Update docs
diff --git a/docs/dyn/adexchangebuyer2_v2beta1.accounts.clients.html b/docs/dyn/adexchangebuyer2_v2beta1.accounts.clients.html
new file mode 100644
index 0000000..791a96b
--- /dev/null
+++ b/docs/dyn/adexchangebuyer2_v2beta1.accounts.clients.html
@@ -0,0 +1,444 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="adexchangebuyer2_v2beta1.html">Ad Exchange Buyer API II</a> . <a href="adexchangebuyer2_v2beta1.accounts.html">accounts</a> . <a href="adexchangebuyer2_v2beta1.accounts.clients.html">clients</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="adexchangebuyer2_v2beta1.accounts.clients.invitations.html">invitations()</a></code>
+</p>
+<p class="firstline">Returns the invitations Resource.</p>
+
+<p class="toc_element">
+  <code><a href="adexchangebuyer2_v2beta1.accounts.clients.users.html">users()</a></code>
+</p>
+<p class="firstline">Returns the users Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#create">create(accountId=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a new client buyer.</p>
+<p class="toc_element">
+  <code><a href="#get">get(accountId, clientAccountId, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets a client buyer with a given client account ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(accountId, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists all the clients for the current sponsor buyer.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#update">update(accountId=None, clientAccountId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an existing client buyer.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(accountId=None, body, x__xgafv=None)</code>
+  <pre>Creates a new client buyer.
+
+Args:
+  accountId: string, Unique numerical account ID for the buyer of which the client buyer
+is a customer; the sponsor buyer to create a client for. (required) (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A client resource represents a client buyer&mdash;an agency,
+      # a brand, or an advertiser customer of the sponsor buyer.
+      # Users associated with the client buyer have restricted access to
+      # the Ad Exchange Marketplace and certain other sections
+      # of the Ad Exchange Buyer UI based on the role
+      # granted to the client buyer.
+      # All fields are required unless otherwise specified.
+    "status": "A String", # The status of the client buyer.
+    "clientAccountId": "A String", # The globally-unique numerical ID of the client.
+        # The value of this field is ignored in create and update operations.
+    "entityName": "A String", # The name of the entity. This field is automatically fetched based on
+        # the type and ID.
+        # The value of this field is ignored in create and update operations.
+    "entityType": "A String", # The type of the client entity: `ADVERTISER`, `BRAND`, or `AGENCY`.
+    "role": "A String", # The role which is assigned to the client buyer. Each role implies a set of
+        # permissions granted to the client. Must be one of `CLIENT_DEAL_VIEWER`,
+        # `CLIENT_DEAL_NEGOTIATOR`, or `CLIENT_DEAL_APPROVER`.
+    "visibleToSeller": True or False, # Whether the client buyer will be visible to sellers.
+    "entityId": "A String", # Numerical identifier of the client entity.
+        # The entity can be an advertiser, a brand, or an agency.
+        # This identifier is unique among all the entities with the same type.
+        # 
+        # A list of all known advertisers with their identifiers is available in the
+        # [advertisers.txt](https://storage.googleapis.com/adx-rtb-dictionaries/advertisers.txt)
+        # file.
+        # 
+        # A list of all known brands with their identifiers is available in the
+        # [brands.txt](https://storage.googleapis.com/adx-rtb-dictionaries/brands.txt)
+        # file.
+        # 
+        # A list of all known agencies with their identifiers is available in the
+        # [agencies.txt](https://storage.googleapis.com/adx-rtb-dictionaries/agencies.txt)
+        # file.
+    "clientName": "A String", # Name used to represent this client to publishers.
+        # You may have multiple clients that map to the same entity,
+        # but for each client the combination of `clientName` and entity
+        # must be unique.
+        # You can specify this field as empty.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A client resource represents a client buyer&mdash;an agency,
+        # a brand, or an advertiser customer of the sponsor buyer.
+        # Users associated with the client buyer have restricted access to
+        # the Ad Exchange Marketplace and certain other sections
+        # of the Ad Exchange Buyer UI based on the role
+        # granted to the client buyer.
+        # All fields are required unless otherwise specified.
+      "status": "A String", # The status of the client buyer.
+      "clientAccountId": "A String", # The globally-unique numerical ID of the client.
+          # The value of this field is ignored in create and update operations.
+      "entityName": "A String", # The name of the entity. This field is automatically fetched based on
+          # the type and ID.
+          # The value of this field is ignored in create and update operations.
+      "entityType": "A String", # The type of the client entity: `ADVERTISER`, `BRAND`, or `AGENCY`.
+      "role": "A String", # The role which is assigned to the client buyer. Each role implies a set of
+          # permissions granted to the client. Must be one of `CLIENT_DEAL_VIEWER`,
+          # `CLIENT_DEAL_NEGOTIATOR`, or `CLIENT_DEAL_APPROVER`.
+      "visibleToSeller": True or False, # Whether the client buyer will be visible to sellers.
+      "entityId": "A String", # Numerical identifier of the client entity.
+          # The entity can be an advertiser, a brand, or an agency.
+          # This identifier is unique among all the entities with the same type.
+          #
+          # A list of all known advertisers with their identifiers is available in the
+          # [advertisers.txt](https://storage.googleapis.com/adx-rtb-dictionaries/advertisers.txt)
+          # file.
+          #
+          # A list of all known brands with their identifiers is available in the
+          # [brands.txt](https://storage.googleapis.com/adx-rtb-dictionaries/brands.txt)
+          # file.
+          #
+          # A list of all known agencies with their identifiers is available in the
+          # [agencies.txt](https://storage.googleapis.com/adx-rtb-dictionaries/agencies.txt)
+          # file.
+      "clientName": "A String", # Name used to represent this client to publishers.
+          # You may have multiple clients that map to the same entity,
+          # but for each client the combination of `clientName` and entity
+          # must be unique.
+          # You can specify this field as empty.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(accountId, clientAccountId, x__xgafv=None)</code>
+  <pre>Gets a client buyer with a given client account ID.
+
+Args:
+  accountId: string, Numerical account ID of the client's sponsor buyer. (required) (required)
+  clientAccountId: string, Numerical account ID of the client buyer to retrieve. (required) (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A client resource represents a client buyer&mdash;an agency,
+        # a brand, or an advertiser customer of the sponsor buyer.
+        # Users associated with the client buyer have restricted access to
+        # the Ad Exchange Marketplace and certain other sections
+        # of the Ad Exchange Buyer UI based on the role
+        # granted to the client buyer.
+        # All fields are required unless otherwise specified.
+      "status": "A String", # The status of the client buyer.
+      "clientAccountId": "A String", # The globally-unique numerical ID of the client.
+          # The value of this field is ignored in create and update operations.
+      "entityName": "A String", # The name of the entity. This field is automatically fetched based on
+          # the type and ID.
+          # The value of this field is ignored in create and update operations.
+      "entityType": "A String", # The type of the client entity: `ADVERTISER`, `BRAND`, or `AGENCY`.
+      "role": "A String", # The role which is assigned to the client buyer. Each role implies a set of
+          # permissions granted to the client. Must be one of `CLIENT_DEAL_VIEWER`,
+          # `CLIENT_DEAL_NEGOTIATOR`, or `CLIENT_DEAL_APPROVER`.
+      "visibleToSeller": True or False, # Whether the client buyer will be visible to sellers.
+      "entityId": "A String", # Numerical identifier of the client entity.
+          # The entity can be an advertiser, a brand, or an agency.
+          # This identifier is unique among all the entities with the same type.
+          #
+          # A list of all known advertisers with their identifiers is available in the
+          # [advertisers.txt](https://storage.googleapis.com/adx-rtb-dictionaries/advertisers.txt)
+          # file.
+          #
+          # A list of all known brands with their identifiers is available in the
+          # [brands.txt](https://storage.googleapis.com/adx-rtb-dictionaries/brands.txt)
+          # file.
+          #
+          # A list of all known agencies with their identifiers is available in the
+          # [agencies.txt](https://storage.googleapis.com/adx-rtb-dictionaries/agencies.txt)
+          # file.
+      "clientName": "A String", # Name used to represent this client to publishers.
+          # You may have multiple clients that map to the same entity,
+          # but for each client the combination of `clientName` and entity
+          # must be unique.
+          # You can specify this field as empty.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(accountId, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists all the clients for the current sponsor buyer.
+
+Args:
+  accountId: string, Unique numerical account ID of the sponsor buyer to list the clients for. (required)
+  pageSize: integer, Requested page size. The server may return fewer clients than requested.
+If unspecified, the server will pick an appropriate default.
+  pageToken: string, A token identifying a page of results the server should return.
+Typically, this is the value of
+ListClientsResponse.nextPageToken
+returned from the previous call to the
+accounts.clients.list method.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    {
+    "nextPageToken": "A String", # A token to retrieve the next page of results.
+        # Pass this value in the
+        # ListClientsRequest.pageToken
+        # field in the subsequent call to the
+        # accounts.clients.list method
+        # to retrieve the next page of results.
+    "clients": [ # The returned list of clients.
+      { # A client resource represents a client buyer&mdash;an agency,
+            # a brand, or an advertiser customer of the sponsor buyer.
+            # Users associated with the client buyer have restricted access to
+            # the Ad Exchange Marketplace and certain other sections
+            # of the Ad Exchange Buyer UI based on the role
+            # granted to the client buyer.
+            # All fields are required unless otherwise specified.
+          "status": "A String", # The status of the client buyer.
+          "clientAccountId": "A String", # The globally-unique numerical ID of the client.
+              # The value of this field is ignored in create and update operations.
+          "entityName": "A String", # The name of the entity. This field is automatically fetched based on
+              # the type and ID.
+              # The value of this field is ignored in create and update operations.
+          "entityType": "A String", # The type of the client entity: `ADVERTISER`, `BRAND`, or `AGENCY`.
+          "role": "A String", # The role which is assigned to the client buyer. Each role implies a set of
+              # permissions granted to the client. Must be one of `CLIENT_DEAL_VIEWER`,
+              # `CLIENT_DEAL_NEGOTIATOR`, or `CLIENT_DEAL_APPROVER`.
+          "visibleToSeller": True or False, # Whether the client buyer will be visible to sellers.
+          "entityId": "A String", # Numerical identifier of the client entity.
+              # The entity can be an advertiser, a brand, or an agency.
+              # This identifier is unique among all the entities with the same type.
+              #
+              # A list of all known advertisers with their identifiers is available in the
+              # [advertisers.txt](https://storage.googleapis.com/adx-rtb-dictionaries/advertisers.txt)
+              # file.
+              #
+              # A list of all known brands with their identifiers is available in the
+              # [brands.txt](https://storage.googleapis.com/adx-rtb-dictionaries/brands.txt)
+              # file.
+              #
+              # A list of all known agencies with their identifiers is available in the
+              # [agencies.txt](https://storage.googleapis.com/adx-rtb-dictionaries/agencies.txt)
+              # file.
+          "clientName": "A String", # Name used to represent this client to publishers.
+              # You may have multiple clients that map to the same entity,
+              # but for each client the combination of `clientName` and entity
+              # must be unique.
+              # You can specify this field as empty.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(accountId=None, clientAccountId, body, x__xgafv=None)</code>
+  <pre>Updates an existing client buyer.
+
+Args:
+  accountId: string, Unique numerical account ID for the buyer of which the client buyer
+is a customer; the sponsor buyer to update a client for. (required) (required)
+  clientAccountId: string, Unique numerical account ID of the client to update. (required) (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A client resource represents a client buyer&mdash;an agency,
+      # a brand, or an advertiser customer of the sponsor buyer.
+      # Users associated with the client buyer have restricted access to
+      # the Ad Exchange Marketplace and certain other sections
+      # of the Ad Exchange Buyer UI based on the role
+      # granted to the client buyer.
+      # All fields are required unless otherwise specified.
+    "status": "A String", # The status of the client buyer.
+    "clientAccountId": "A String", # The globally-unique numerical ID of the client.
+        # The value of this field is ignored in create and update operations.
+    "entityName": "A String", # The name of the entity. This field is automatically fetched based on
+        # the type and ID.
+        # The value of this field is ignored in create and update operations.
+    "entityType": "A String", # The type of the client entity: `ADVERTISER`, `BRAND`, or `AGENCY`.
+    "role": "A String", # The role which is assigned to the client buyer. Each role implies a set of
+        # permissions granted to the client. Must be one of `CLIENT_DEAL_VIEWER`,
+        # `CLIENT_DEAL_NEGOTIATOR`, or `CLIENT_DEAL_APPROVER`.
+    "visibleToSeller": True or False, # Whether the client buyer will be visible to sellers.
+    "entityId": "A String", # Numerical identifier of the client entity.
+        # The entity can be an advertiser, a brand, or an agency.
+        # This identifier is unique among all the entities with the same type.
+        # 
+        # A list of all known advertisers with their identifiers is available in the
+        # [advertisers.txt](https://storage.googleapis.com/adx-rtb-dictionaries/advertisers.txt)
+        # file.
+        # 
+        # A list of all known brands with their identifiers is available in the
+        # [brands.txt](https://storage.googleapis.com/adx-rtb-dictionaries/brands.txt)
+        # file.
+        # 
+        # A list of all known agencies with their identifiers is available in the
+        # [agencies.txt](https://storage.googleapis.com/adx-rtb-dictionaries/agencies.txt)
+        # file.
+    "clientName": "A String", # Name used to represent this client to publishers.
+        # You may have multiple clients that map to the same entity,
+        # but for each client the combination of `clientName` and entity
+        # must be unique.
+        # You can specify this field as empty.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A client resource represents a client buyer&mdash;an agency,
+        # a brand, or an advertiser customer of the sponsor buyer.
+        # Users associated with the client buyer have restricted access to
+        # the Ad Exchange Marketplace and certain other sections
+        # of the Ad Exchange Buyer UI based on the role
+        # granted to the client buyer.
+        # All fields are required unless otherwise specified.
+      "status": "A String", # The status of the client buyer.
+      "clientAccountId": "A String", # The globally-unique numerical ID of the client.
+          # The value of this field is ignored in create and update operations.
+      "entityName": "A String", # The name of the entity. This field is automatically fetched based on
+          # the type and ID.
+          # The value of this field is ignored in create and update operations.
+      "entityType": "A String", # The type of the client entity: `ADVERTISER`, `BRAND`, or `AGENCY`.
+      "role": "A String", # The role which is assigned to the client buyer. Each role implies a set of
+          # permissions granted to the client. Must be one of `CLIENT_DEAL_VIEWER`,
+          # `CLIENT_DEAL_NEGOTIATOR`, or `CLIENT_DEAL_APPROVER`.
+      "visibleToSeller": True or False, # Whether the client buyer will be visible to sellers.
+      "entityId": "A String", # Numerical identifier of the client entity.
+          # The entity can be an advertiser, a brand, or an agency.
+          # This identifier is unique among all the entities with the same type.
+          #
+          # A list of all known advertisers with their identifiers is available in the
+          # [advertisers.txt](https://storage.googleapis.com/adx-rtb-dictionaries/advertisers.txt)
+          # file.
+          #
+          # A list of all known brands with their identifiers is available in the
+          # [brands.txt](https://storage.googleapis.com/adx-rtb-dictionaries/brands.txt)
+          # file.
+          #
+          # A list of all known agencies with their identifiers is available in the
+          # [agencies.txt](https://storage.googleapis.com/adx-rtb-dictionaries/agencies.txt)
+          # file.
+      "clientName": "A String", # Name used to represent this client to publishers.
+          # You may have multiple clients that map to the same entity,
+          # but for each client the combination of `clientName` and entity
+          # must be unique.
+          # You can specify this field as empty.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/adexchangebuyer2_v2beta1.accounts.clients.invitations.html b/docs/dyn/adexchangebuyer2_v2beta1.accounts.clients.invitations.html
new file mode 100644
index 0000000..a8c07ad
--- /dev/null
+++ b/docs/dyn/adexchangebuyer2_v2beta1.accounts.clients.invitations.html
@@ -0,0 +1,236 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="adexchangebuyer2_v2beta1.html">Ad Exchange Buyer API II</a> . <a href="adexchangebuyer2_v2beta1.accounts.html">accounts</a> . <a href="adexchangebuyer2_v2beta1.accounts.clients.html">clients</a> . <a href="adexchangebuyer2_v2beta1.accounts.clients.invitations.html">invitations</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(accountId, clientAccountId=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates and sends out an email invitation to access</p>
+<p class="toc_element">
+  <code><a href="#get">get(accountId, clientAccountId=None, invitationId, x__xgafv=None)</a></code></p>
+<p class="firstline">Retrieves an existing client user invitation.</p>
+<p class="toc_element">
+  <code><a href="#list">list(accountId, clientAccountId=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists all the client users invitations for a client</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(accountId, clientAccountId=None, body, x__xgafv=None)</code>
+  <pre>Creates and sends out an email invitation to access
+an Ad Exchange client buyer account.
+
+Args:
+  accountId: string, Numerical account ID of the client's sponsor buyer. (required) (required)
+  clientAccountId: string, Numerical account ID of the client buyer that the user
+should be associated with. (required) (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # An invitation for a new client user to get access to the AdExchange Buyer UI.
+      # 
+      # All fields are required unless otherwise specified.
+    "clientAccountId": "A String", # Numerical account ID of the client buyer
+        # that the invited user is associated with.
+        # The value of this field is ignored in create operations.
+    "email": "A String", # The email address to which the invitation is sent. Email
+        # addresses should be unique among all client users under each sponsor
+        # buyer.
+    "invitationId": "A String", # The unique numerical ID of the invitation that is sent to the user.
+        # The value of this field is ignored in create operations.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An invitation for a new client user to get access to the AdExchange Buyer UI.
+        #
+        # All fields are required unless otherwise specified.
+      "clientAccountId": "A String", # Numerical account ID of the client buyer
+          # that the invited user is associated with.
+          # The value of this field is ignored in create operations.
+      "email": "A String", # The email address to which the invitation is sent. Email
+          # addresses should be unique among all client users under each sponsor
+          # buyer.
+      "invitationId": "A String", # The unique numerical ID of the invitation that is sent to the user.
+          # The value of this field is ignored in create operations.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(accountId, clientAccountId=None, invitationId, x__xgafv=None)</code>
+  <pre>Retrieves an existing client user invitation.
+
+Args:
+  accountId: string, Numerical account ID of the client's sponsor buyer. (required) (required)
+  clientAccountId: string, Numerical account ID of the client buyer that the user invitation
+to be retrieved is associated with. (required) (required)
+  invitationId: string, Numerical identifier of the user invitation to retrieve. (required) (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # An invitation for a new client user to get access to the AdExchange Buyer UI.
+        #
+        # All fields are required unless otherwise specified.
+      "clientAccountId": "A String", # Numerical account ID of the client buyer
+          # that the invited user is associated with.
+          # The value of this field is ignored in create operations.
+      "email": "A String", # The email address to which the invitation is sent. Email
+          # addresses should be unique among all client users under each sponsor
+          # buyer.
+      "invitationId": "A String", # The unique numerical ID of the invitation that is sent to the user.
+          # The value of this field is ignored in create operations.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(accountId, clientAccountId=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists all the client users invitations for a client
+with a given account ID.
+
+Args:
+  accountId: string, Numerical account ID of the client's sponsor buyer. (required) (required)
+  clientAccountId: string, Numerical account ID of the client buyer to list invitations for.
+(required)
+You must either specify a string representation of a
+numerical account identifier or the `-` character
+to list all the invitations for all the clients
+of a given sponsor buyer. (required)
+  pageSize: integer, Requested page size. Server may return fewer clients than requested.
+If unspecified, server will pick an appropriate default.
+  pageToken: string, A token identifying a page of results the server should return.
+Typically, this is the value of
+ListClientUserInvitationsResponse.nextPageToken
+returned from the previous call to the
+clients.invitations.list
+method.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    {
+    "nextPageToken": "A String", # A token to retrieve the next page of results.
+        # Pass this value in the
+        # ListClientUserInvitationsRequest.pageToken
+        # field in the subsequent call to the
+        # clients.invitations.list
+        # method to retrieve the next
+        # page of results.
+    "invitations": [ # The returned list of client users.
+      { # An invitation for a new client user to get access to the AdExchange Buyer UI.
+            #
+            # All fields are required unless otherwise specified.
+          "clientAccountId": "A String", # Numerical account ID of the client buyer
+              # that the invited user is associated with.
+              # The value of this field is ignored in create operations.
+          "email": "A String", # The email address to which the invitation is sent. Email
+              # addresses should be unique among all client users under each sponsor
+              # buyer.
+          "invitationId": "A String", # The unique numerical ID of the invitation that is sent to the user.
+              # The value of this field is ignored in create operations.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/adexchangebuyer2_v2beta1.accounts.clients.users.html b/docs/dyn/adexchangebuyer2_v2beta1.accounts.clients.users.html
new file mode 100644
index 0000000..bc0ce40
--- /dev/null
+++ b/docs/dyn/adexchangebuyer2_v2beta1.accounts.clients.users.html
@@ -0,0 +1,280 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="adexchangebuyer2_v2beta1.html">Ad Exchange Buyer API II</a> . <a href="adexchangebuyer2_v2beta1.accounts.html">accounts</a> . <a href="adexchangebuyer2_v2beta1.accounts.clients.html">clients</a> . <a href="adexchangebuyer2_v2beta1.accounts.clients.users.html">users</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(accountId, clientAccountId=None, userId, x__xgafv=None)</a></code></p>
+<p class="firstline">Retrieves an existing client user.</p>
+<p class="toc_element">
+  <code><a href="#list">list(accountId=None, clientAccountId, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists all the known client users for a specified</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#update">update(accountId, clientAccountId=None, userId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an existing client user.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(accountId, clientAccountId=None, userId, x__xgafv=None)</code>
+  <pre>Retrieves an existing client user.
+
+Args:
+  accountId: string, Numerical account ID of the client's sponsor buyer. (required) (required)
+  clientAccountId: string, Numerical account ID of the client buyer
+that the user to be retrieved is associated with. (required) (required)
+  userId: string, Numerical identifier of the user to retrieve. (required) (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A client user is created under a client buyer and has restricted access to
+      # the Ad Exchange Marketplace and certain other sections
+      # of the Ad Exchange Buyer UI based on the role
+      # granted to the associated client buyer.
+      #
+      # The only way a new client user can be created is via accepting an
+      # email invitation
+      # (see the
+      # accounts.clients.invitations.create
+      # method).
+      #
+      # All fields are required unless otherwise specified.
+    "status": "A String", # The status of the client user.
+    "clientAccountId": "A String", # Numerical account ID of the client buyer
+        # with which the user is associated; the
+        # buyer must be a client of the current sponsor buyer.
+        # The value of this field is ignored in an update operation.
+    "userId": "A String", # The unique numerical ID of the client user
+        # that has accepted an invitation.
+        # The value of this field is ignored in an update operation.
+    "email": "A String", # User's email address. The value of this field
+        # is ignored in an update operation.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(accountId=None, clientAccountId, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists all the known client users for a specified
+sponsor buyer account ID.
+
+Args:
+  accountId: string, Numerical account ID of the sponsor buyer of the client to list users for.
+(required) (required)
+  clientAccountId: string, The account ID of the client buyer to list users for. (required)
+You must specify either a string representation of a
+numerical account identifier or the `-` character
+to list all the client users for all the clients
+of a given sponsor buyer. (required)
+  pageSize: integer, Requested page size. The server may return fewer clients than requested.
+If unspecified, the server will pick an appropriate default.
+  pageToken: string, A token identifying a page of results the server should return.
+Typically, this is the value of
+ListClientUsersResponse.nextPageToken
+returned from the previous call to the
+accounts.clients.users.list method.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    {
+    "nextPageToken": "A String", # A token to retrieve the next page of results.
+        # Pass this value in the
+        # ListClientUsersRequest.pageToken
+        # field in the subsequent call to the
+        # clients.invitations.list
+        # method to retrieve the next
+        # page of results.
+    "users": [ # The returned list of client users.
+      { # A client user is created under a client buyer and has restricted access to
+          # the Ad Exchange Marketplace and certain other sections
+          # of the Ad Exchange Buyer UI based on the role
+          # granted to the associated client buyer.
+          #
+          # The only way a new client user can be created is via accepting an
+          # email invitation
+          # (see the
+          # accounts.clients.invitations.create
+          # method).
+          #
+          # All fields are required unless otherwise specified.
+        "status": "A String", # The status of the client user.
+        "clientAccountId": "A String", # Numerical account ID of the client buyer
+            # with which the user is associated; the
+            # buyer must be a client of the current sponsor buyer.
+            # The value of this field is ignored in an update operation.
+        "userId": "A String", # The unique numerical ID of the client user
+            # that has accepted an invitation.
+            # The value of this field is ignored in an update operation.
+        "email": "A String", # User's email address. The value of this field
+            # is ignored in an update operation.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(accountId, clientAccountId=None, userId, body, x__xgafv=None)</code>
+  <pre>Updates an existing client user.
+Only the user status can be changed on update.
+
+Args:
+  accountId: string, Numerical account ID of the client's sponsor buyer. (required) (required)
+  clientAccountId: string, Numerical account ID of the client buyer that the user to be retrieved
+is associated with. (required) (required)
+  userId: string, Numerical identifier of the user to retrieve. (required) (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A client user is created under a client buyer and has restricted access to
+    # the Ad Exchange Marketplace and certain other sections
+    # of the Ad Exchange Buyer UI based on the role
+    # granted to the associated client buyer.
+    # 
+    # The only way a new client user can be created is via accepting an
+    # email invitation
+    # (see the
+    # accounts.clients.invitations.create
+    # method).
+    # 
+    # All fields are required unless otherwise specified.
+  "status": "A String", # The status of the client user.
+  "clientAccountId": "A String", # Numerical account ID of the client buyer
+      # with which the user is associated; the
+      # buyer must be a client of the current sponsor buyer.
+      # The value of this field is ignored in an update operation.
+  "userId": "A String", # The unique numerical ID of the client user
+      # that has accepted an invitation.
+      # The value of this field is ignored in an update operation.
+  "email": "A String", # User's email address. The value of this field
+      # is ignored in an update operation.
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A client user is created under a client buyer and has restricted access to
+      # the Ad Exchange Marketplace and certain other sections
+      # of the Ad Exchange Buyer UI based on the role
+      # granted to the associated client buyer.
+      #
+      # The only way a new client user can be created is via accepting an
+      # email invitation
+      # (see the
+      # accounts.clients.invitations.create
+      # method).
+      #
+      # All fields are required unless otherwise specified.
+    "status": "A String", # The status of the client user.
+    "clientAccountId": "A String", # Numerical account ID of the client buyer
+        # with which the user is associated; the
+        # buyer must be a client of the current sponsor buyer.
+        # The value of this field is ignored in an update operation.
+    "userId": "A String", # The unique numerical ID of the client user
+        # that has accepted an invitation.
+        # The value of this field is ignored in an update operation.
+    "email": "A String", # User's email address. The value of this field
+        # is ignored in an update operation.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/adexchangebuyer2_v2beta1.accounts.html b/docs/dyn/adexchangebuyer2_v2beta1.accounts.html
new file mode 100644
index 0000000..9c6461b
--- /dev/null
+++ b/docs/dyn/adexchangebuyer2_v2beta1.accounts.html
@@ -0,0 +1,82 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="adexchangebuyer2_v2beta1.html">Ad Exchange Buyer API II</a> . <a href="adexchangebuyer2_v2beta1.accounts.html">accounts</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="adexchangebuyer2_v2beta1.accounts.clients.html">clients()</a></code>
+</p>
+<p class="firstline">Returns the clients Resource.</p>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/adexchangebuyer2_v2beta1.html b/docs/dyn/adexchangebuyer2_v2beta1.html
new file mode 100644
index 0000000..8b29501
--- /dev/null
+++ b/docs/dyn/adexchangebuyer2_v2beta1.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="adexchangebuyer2_v2beta1.html">Ad Exchange Buyer API II</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="adexchangebuyer2_v2beta1.accounts.html">accounts()</a></code>
+</p>
+<p class="firstline">Returns the accounts Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/adexchangebuyer_v1_4.accounts.html b/docs/dyn/adexchangebuyer_v1_4.accounts.html
index ff3b93b..6be850a 100644
--- a/docs/dyn/adexchangebuyer_v1_4.accounts.html
+++ b/docs/dyn/adexchangebuyer_v1_4.accounts.html
@@ -110,6 +110,11 @@
               # - US_EAST
               # - US_WEST
           "maximumQps": 42, # The maximum queries per second the Ad Exchange will send.
+          "bidProtocol": "A String", # The protocol that the bidder endpoint is using. By default, OpenRTB protocols use JSON, except PROTOCOL_OPENRTB_PROTOBUF. PROTOCOL_OPENRTB_PROTOBUF uses protobuf encoding over the latest OpenRTB protocol version, which is 2.3 right now. Allowed values:
+              # - PROTOCOL_ADX
+              # - PROTOCOL_OPENRTB_2_2
+              # - PROTOCOL_OPENRTB_2_3
+              # - PROTOCOL_OPENRTB_PROTOBUF
         },
       ],
       "cookieMatchingNid": "A String", # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
@@ -143,6 +148,11 @@
                   # - US_EAST
                   # - US_WEST
               "maximumQps": 42, # The maximum queries per second the Ad Exchange will send.
+              "bidProtocol": "A String", # The protocol that the bidder endpoint is using. By default, OpenRTB protocols use JSON, except PROTOCOL_OPENRTB_PROTOBUF. PROTOCOL_OPENRTB_PROTOBUF uses protobuf encoding over the latest OpenRTB protocol version, which is 2.3 right now. Allowed values:
+                  # - PROTOCOL_ADX
+                  # - PROTOCOL_OPENRTB_2_2
+                  # - PROTOCOL_OPENRTB_2_3
+                  # - PROTOCOL_OPENRTB_PROTOBUF
             },
           ],
           "cookieMatchingNid": "A String", # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
@@ -177,6 +187,11 @@
             # - US_EAST
             # - US_WEST
         "maximumQps": 42, # The maximum queries per second the Ad Exchange will send.
+        "bidProtocol": "A String", # The protocol that the bidder endpoint is using. By default, OpenRTB protocols use JSON, except PROTOCOL_OPENRTB_PROTOBUF. PROTOCOL_OPENRTB_PROTOBUF uses protobuf encoding over the latest OpenRTB protocol version, which is 2.3 right now. Allowed values:
+            # - PROTOCOL_ADX
+            # - PROTOCOL_OPENRTB_2_2
+            # - PROTOCOL_OPENRTB_2_3
+            # - PROTOCOL_OPENRTB_PROTOBUF
       },
     ],
     "cookieMatchingNid": "A String", # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
@@ -202,6 +217,11 @@
               # - US_EAST
               # - US_WEST
           "maximumQps": 42, # The maximum queries per second the Ad Exchange will send.
+          "bidProtocol": "A String", # The protocol that the bidder endpoint is using. By default, OpenRTB protocols use JSON, except PROTOCOL_OPENRTB_PROTOBUF. PROTOCOL_OPENRTB_PROTOBUF uses protobuf encoding over the latest OpenRTB protocol version, which is 2.3 right now. Allowed values:
+              # - PROTOCOL_ADX
+              # - PROTOCOL_OPENRTB_2_2
+              # - PROTOCOL_OPENRTB_2_3
+              # - PROTOCOL_OPENRTB_PROTOBUF
         },
       ],
       "cookieMatchingNid": "A String", # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
@@ -233,6 +253,11 @@
             # - US_EAST
             # - US_WEST
         "maximumQps": 42, # The maximum queries per second the Ad Exchange will send.
+        "bidProtocol": "A String", # The protocol that the bidder endpoint is using. By default, OpenRTB protocols use JSON, except PROTOCOL_OPENRTB_PROTOBUF. PROTOCOL_OPENRTB_PROTOBUF uses protobuf encoding over the latest OpenRTB protocol version, which is 2.3 right now. Allowed values:
+            # - PROTOCOL_ADX
+            # - PROTOCOL_OPENRTB_2_2
+            # - PROTOCOL_OPENRTB_2_3
+            # - PROTOCOL_OPENRTB_PROTOBUF
       },
     ],
     "cookieMatchingNid": "A String", # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
@@ -258,6 +283,11 @@
               # - US_EAST
               # - US_WEST
           "maximumQps": 42, # The maximum queries per second the Ad Exchange will send.
+          "bidProtocol": "A String", # The protocol that the bidder endpoint is using. By default, OpenRTB protocols use JSON, except PROTOCOL_OPENRTB_PROTOBUF. PROTOCOL_OPENRTB_PROTOBUF uses protobuf encoding over the latest OpenRTB protocol version, which is 2.3 right now. Allowed values:
+              # - PROTOCOL_ADX
+              # - PROTOCOL_OPENRTB_2_2
+              # - PROTOCOL_OPENRTB_2_3
+              # - PROTOCOL_OPENRTB_PROTOBUF
         },
       ],
       "cookieMatchingNid": "A String", # The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this.
diff --git a/docs/dyn/adexchangebuyer_v1_4.creatives.html b/docs/dyn/adexchangebuyer_v1_4.creatives.html
index 133e881..fa4c962 100644
--- a/docs/dyn/adexchangebuyer_v1_4.creatives.html
+++ b/docs/dyn/adexchangebuyer_v1_4.creatives.html
@@ -124,6 +124,7 @@
       "HTMLSnippet": "A String", # The HTML snippet that displays the ad when inserted in the web page. If set, videoURL should not be set.
       "openAuctionStatus": "A String", # Top-level open auction status. Read-only. This field should not be set in requests. If disapproved, an entry for auctionType=OPEN_AUCTION (or ALL) in servingRestrictions will also exist. Note that this may be nuanced with other contextual restrictions, in which case it may be preferable to read from ServingRestrictions directly.
       "buyerCreativeId": "A String", # A buyer-specific id identifying the creative in this ad.
+      "adChoicesDestinationUrl": "A String", # The link to the Ad Preferences page. This is only supported for native ads.
       "impressionTrackingUrl": [ # The set of urls to be called to record an impression.
         "A String",
       ],
@@ -245,6 +246,7 @@
     "HTMLSnippet": "A String", # The HTML snippet that displays the ad when inserted in the web page. If set, videoURL should not be set.
     "openAuctionStatus": "A String", # Top-level open auction status. Read-only. This field should not be set in requests. If disapproved, an entry for auctionType=OPEN_AUCTION (or ALL) in servingRestrictions will also exist. Note that this may be nuanced with other contextual restrictions, in which case it may be preferable to read from ServingRestrictions directly.
     "buyerCreativeId": "A String", # A buyer-specific id identifying the creative in this ad.
+    "adChoicesDestinationUrl": "A String", # The link to the Ad Preferences page. This is only supported for native ads.
     "impressionTrackingUrl": [ # The set of urls to be called to record an impression.
       "A String",
     ],
@@ -361,6 +363,7 @@
       "HTMLSnippet": "A String", # The HTML snippet that displays the ad when inserted in the web page. If set, videoURL should not be set.
       "openAuctionStatus": "A String", # Top-level open auction status. Read-only. This field should not be set in requests. If disapproved, an entry for auctionType=OPEN_AUCTION (or ALL) in servingRestrictions will also exist. Note that this may be nuanced with other contextual restrictions, in which case it may be preferable to read from ServingRestrictions directly.
       "buyerCreativeId": "A String", # A buyer-specific id identifying the creative in this ad.
+      "adChoicesDestinationUrl": "A String", # The link to the Ad Preferences page. This is only supported for native ads.
       "impressionTrackingUrl": [ # The set of urls to be called to record an impression.
         "A String",
       ],
@@ -502,6 +505,7 @@
           "HTMLSnippet": "A String", # The HTML snippet that displays the ad when inserted in the web page. If set, videoURL should not be set.
           "openAuctionStatus": "A String", # Top-level open auction status. Read-only. This field should not be set in requests. If disapproved, an entry for auctionType=OPEN_AUCTION (or ALL) in servingRestrictions will also exist. Note that this may be nuanced with other contextual restrictions, in which case it may be preferable to read from ServingRestrictions directly.
           "buyerCreativeId": "A String", # A buyer-specific id identifying the creative in this ad.
+          "adChoicesDestinationUrl": "A String", # The link to the Ad Preferences page. This is only supported for native ads.
           "impressionTrackingUrl": [ # The set of urls to be called to record an impression.
             "A String",
           ],
diff --git a/docs/dyn/adexchangebuyer_v1_4.html b/docs/dyn/adexchangebuyer_v1_4.html
index 8ab0fc3..68d3585 100644
--- a/docs/dyn/adexchangebuyer_v1_4.html
+++ b/docs/dyn/adexchangebuyer_v1_4.html
@@ -105,6 +105,11 @@
 <p class="firstline">Returns the marketplacenotes Resource.</p>
 
 <p class="toc_element">
+  <code><a href="adexchangebuyer_v1_4.marketplaceprivateauction.html">marketplaceprivateauction()</a></code>
+</p>
+<p class="firstline">Returns the marketplaceprivateauction Resource.</p>
+
+<p class="toc_element">
   <code><a href="adexchangebuyer_v1_4.performanceReport.html">performanceReport()</a></code>
 </p>
 <p class="firstline">Returns the performanceReport Resource.</p>
@@ -125,6 +130,11 @@
 <p class="firstline">Returns the proposals Resource.</p>
 
 <p class="toc_element">
+  <code><a href="adexchangebuyer_v1_4.pubprofiles.html">pubprofiles()</a></code>
+</p>
+<p class="firstline">Returns the pubprofiles Resource.</p>
+
+<p class="toc_element">
   <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
 <p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
 <h3>Method Details</h3>
diff --git a/docs/dyn/adexchangebuyer_v1_4.marketplacedeals.html b/docs/dyn/adexchangebuyer_v1_4.marketplacedeals.html
index dcb1eb5..2cc6ec1 100644
--- a/docs/dyn/adexchangebuyer_v1_4.marketplacedeals.html
+++ b/docs/dyn/adexchangebuyer_v1_4.marketplacedeals.html
@@ -81,7 +81,7 @@
   <code><a href="#insert">insert(proposalId, body)</a></code></p>
 <p class="firstline">Add new deals for the specified proposal</p>
 <p class="toc_element">
-  <code><a href="#list">list(proposalId)</a></code></p>
+  <code><a href="#list">list(proposalId, pqlQuery=None)</a></code></p>
 <p class="firstline">List all the deals for a given proposal</p>
 <p class="toc_element">
   <code><a href="#update">update(proposalId, body)</a></code></p>
@@ -98,7 +98,7 @@
 
 {
     "proposalRevisionNumber": "A String", # The last known proposal revision number.
-    "updateAction": "A String",
+    "updateAction": "A String", # Indicates an optional action to take on the proposal
     "dealIds": [ # List of deals to delete for a given proposal
       "A String",
     ],
@@ -111,6 +111,17 @@
     {
     "deals": [ # List of deals deleted (in the same proposal as passed in the request)
       { # A proposal can contain multiple deals. A deal contains the terms and targeting information that is used for serving.
+        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
+        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
+          {
+            "email": "A String", # Email address of the contact.
+            "name": "A String", # The name of the contact.
+          },
+        ],
+        "webPropertyCode": "A String",
+        "proposalId": "A String",
+        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
+        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
         "deliveryControl": { # The set of fields around delivery control that are interesting for a buyer to see but are non-negotiable. These are set by the publisher. This message is assigned an id of 100 since some day we would want to model this as a protobuf extension.
           "frequencyCaps": [
             {
@@ -122,18 +133,77 @@
           "creativeBlockingLevel": "A String",
           "deliveryRateType": "A String",
         },
-        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
-        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
-        "name": "A String", # The name of the deal. (updatable)
-        "buyerPrivateData": { # Buyer private data (hidden from seller).
-          "referenceId": "A String",
-          "referencePayload": "A String",
+        "terms": { # The negotiable terms of the deal. (updatable)
+          "brandingType": "A String", # Visibilty of the URL in bid requests.
+          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
+            "pricingType": "A String", # The pricing type for the deal/product.
+            "currencyCode": "A String", # The currency code for the price.
+            "amountMicros": 3.14, # The price value in micros.
+          },
+          "sellerTimeZone": "A String", # For deals with Cost Per Day billing, defines the timezone used to mark the boundaries of a day (buyer-readonly)
+          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
+          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
+            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
+            "billingInfo": { # External billing info for this Deal. This field is relevant when external billing info such as price has a different currency code than DFP/AdX.
+              "price": { # The original reservation price for the deal, if the currency code is different from the one used in negotiation.
+                "pricingType": "A String", # The pricing type for the deal/product.
+                "currencyCode": "A String", # The currency code for the price.
+                "amountMicros": 3.14, # The price value in micros.
+              },
+              "originalContractedQuantity": "A String", # The original contracted quantity (# impressions) for this deal. To ensure delivery, sometimes publisher will book the deal with a impression buffer, however clients are billed using the original contracted quantity.
+              "currencyConversionTimeMs": "A String", # The timestamp (in ms since epoch) when the original reservation price for the deal was first converted to DFP currency. This is used to convert the contracted price into advertiser's currency without discrepancy.
+            },
+          },
+          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
+            "autoOptimizePrivateAuction": True or False, # True if open auction buyers are allowed to compete with invited buyers in this private auction (buyer-readonly).
+            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "description": "A String", # Description for the proposed terms of the deal.
         },
-        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
-        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. (updatable)
+        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. Each shared targeting entity is AND'd together. (updatable)
           {
-            "inclusions": [ # The list of value to include as part of the targeting.
+            "inclusions": [ # The list of value to include as part of the targeting. Each value is OR'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -164,7 +234,7 @@
                 "stringValue": "A String", # The string value to exclude/include.
               },
             ],
-            "exclusions": [ # The list of values to exclude from targeting.
+            "exclusions": [ # The list of values to exclude from targeting. Each value is AND'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -198,77 +268,29 @@
             "key": "A String", # The key representing the shared targeting criterion.
           },
         ],
-        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "dealId": "A String", # A unique deal=id for the deal (readonly).
-        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
-          {
-            "email": "A String", # Email address of the contact.
-            "name": "A String", # The name of the contact.
-          },
-        ],
-        "webPropertyCode": "A String",
-        "proposalId": "A String",
+        "creativeSafeFrameCompatibility": "A String", # Specifies whether the creative is safeFrame compatible (buyer-readonly)
+        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
+        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
+        "programmaticCreativeSource": "A String", # Specifies the creative source for programmatic deals, PUBLISHER means creative is provided by seller and ADVERTISR means creative is provided by buyer. (buyer-readonly)
+        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
+        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
+        "name": "A String", # The name of the deal. (updatable)
+        "buyerPrivateData": { # Buyer private data (hidden from seller).
+          "referenceId": "A String",
+          "referencePayload": "A String",
+        },
+        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
+        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "flightStartTimeMs": "A String", # Proposed flight start time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "terms": { # The negotiable terms of the deal. (updatable)
-          "brandingType": "A String", # Visibilty of the URL in bid requests.
-          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
-            "pricingType": "A String", # The pricing type for the deal/product.
-            "currencyCode": "A String", # The currency code for the price.
-            "amountMicros": 3.14, # The price value in micros.
+        "dealServingMetadata": { # Metadata about the serving status of this deal (readonly, writes via custom actions)
+          "dealPauseStatus": { # Tracks which parties (if any) have paused a deal. The deal is considered paused if has_buyer_paused || has_seller_paused. Each of the has_buyer_paused or the has_seller_paused bits can be set independently. # Tracks which parties (if any) have paused a deal. (readonly, except via PauseResumeOrderDeals action)
+            "hasSellerPaused": True or False,
+            "hasBuyerPaused": True or False,
+            "firstPausedBy": "A String", # If the deal is paused, records which party paused the deal first.
           },
-          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
-          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-          },
-          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
-            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
-          },
-          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
-            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "privateAuctionId": "A String", # Id of the corresponding private auction.
-          },
-          "description": "A String", # Description for the proposed terms of the deal.
         },
         "creationTimeMs": "A String", # The time (ms since epoch) of the deal creation. (readonly)
-        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
-        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
-        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
-        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
       },
     ],
     "proposalRevisionNumber": "A String", # The updated revision number for the proposal.
@@ -287,6 +309,17 @@
 {
     "deals": [ # The list of deals to add
       { # A proposal can contain multiple deals. A deal contains the terms and targeting information that is used for serving.
+        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
+        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
+          {
+            "email": "A String", # Email address of the contact.
+            "name": "A String", # The name of the contact.
+          },
+        ],
+        "webPropertyCode": "A String",
+        "proposalId": "A String",
+        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
+        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
         "deliveryControl": { # The set of fields around delivery control that are interesting for a buyer to see but are non-negotiable. These are set by the publisher. This message is assigned an id of 100 since some day we would want to model this as a protobuf extension.
           "frequencyCaps": [
             {
@@ -298,18 +331,77 @@
           "creativeBlockingLevel": "A String",
           "deliveryRateType": "A String",
         },
-        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
-        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
-        "name": "A String", # The name of the deal. (updatable)
-        "buyerPrivateData": { # Buyer private data (hidden from seller).
-          "referenceId": "A String",
-          "referencePayload": "A String",
+        "terms": { # The negotiable terms of the deal. (updatable)
+          "brandingType": "A String", # Visibilty of the URL in bid requests.
+          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
+            "pricingType": "A String", # The pricing type for the deal/product.
+            "currencyCode": "A String", # The currency code for the price.
+            "amountMicros": 3.14, # The price value in micros.
+          },
+          "sellerTimeZone": "A String", # For deals with Cost Per Day billing, defines the timezone used to mark the boundaries of a day (buyer-readonly)
+          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
+          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
+            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
+            "billingInfo": { # External billing info for this Deal. This field is relevant when external billing info such as price has a different currency code than DFP/AdX.
+              "price": { # The original reservation price for the deal, if the currency code is different from the one used in negotiation.
+                "pricingType": "A String", # The pricing type for the deal/product.
+                "currencyCode": "A String", # The currency code for the price.
+                "amountMicros": 3.14, # The price value in micros.
+              },
+              "originalContractedQuantity": "A String", # The original contracted quantity (# impressions) for this deal. To ensure delivery, sometimes publisher will book the deal with a impression buffer, however clients are billed using the original contracted quantity.
+              "currencyConversionTimeMs": "A String", # The timestamp (in ms since epoch) when the original reservation price for the deal was first converted to DFP currency. This is used to convert the contracted price into advertiser's currency without discrepancy.
+            },
+          },
+          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
+            "autoOptimizePrivateAuction": True or False, # True if open auction buyers are allowed to compete with invited buyers in this private auction (buyer-readonly).
+            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "description": "A String", # Description for the proposed terms of the deal.
         },
-        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
-        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. (updatable)
+        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. Each shared targeting entity is AND'd together. (updatable)
           {
-            "inclusions": [ # The list of value to include as part of the targeting.
+            "inclusions": [ # The list of value to include as part of the targeting. Each value is OR'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -340,7 +432,7 @@
                 "stringValue": "A String", # The string value to exclude/include.
               },
             ],
-            "exclusions": [ # The list of values to exclude from targeting.
+            "exclusions": [ # The list of values to exclude from targeting. Each value is AND'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -374,77 +466,29 @@
             "key": "A String", # The key representing the shared targeting criterion.
           },
         ],
-        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "dealId": "A String", # A unique deal=id for the deal (readonly).
-        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
-          {
-            "email": "A String", # Email address of the contact.
-            "name": "A String", # The name of the contact.
-          },
-        ],
-        "webPropertyCode": "A String",
-        "proposalId": "A String",
+        "creativeSafeFrameCompatibility": "A String", # Specifies whether the creative is safeFrame compatible (buyer-readonly)
+        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
+        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
+        "programmaticCreativeSource": "A String", # Specifies the creative source for programmatic deals, PUBLISHER means creative is provided by seller and ADVERTISR means creative is provided by buyer. (buyer-readonly)
+        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
+        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
+        "name": "A String", # The name of the deal. (updatable)
+        "buyerPrivateData": { # Buyer private data (hidden from seller).
+          "referenceId": "A String",
+          "referencePayload": "A String",
+        },
+        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
+        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "flightStartTimeMs": "A String", # Proposed flight start time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "terms": { # The negotiable terms of the deal. (updatable)
-          "brandingType": "A String", # Visibilty of the URL in bid requests.
-          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
-            "pricingType": "A String", # The pricing type for the deal/product.
-            "currencyCode": "A String", # The currency code for the price.
-            "amountMicros": 3.14, # The price value in micros.
+        "dealServingMetadata": { # Metadata about the serving status of this deal (readonly, writes via custom actions)
+          "dealPauseStatus": { # Tracks which parties (if any) have paused a deal. The deal is considered paused if has_buyer_paused || has_seller_paused. Each of the has_buyer_paused or the has_seller_paused bits can be set independently. # Tracks which parties (if any) have paused a deal. (readonly, except via PauseResumeOrderDeals action)
+            "hasSellerPaused": True or False,
+            "hasBuyerPaused": True or False,
+            "firstPausedBy": "A String", # If the deal is paused, records which party paused the deal first.
           },
-          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
-          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-          },
-          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
-            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
-          },
-          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
-            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "privateAuctionId": "A String", # Id of the corresponding private auction.
-          },
-          "description": "A String", # Description for the proposed terms of the deal.
         },
         "creationTimeMs": "A String", # The time (ms since epoch) of the deal creation. (readonly)
-        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
-        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
-        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
-        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
       },
     ],
     "proposalRevisionNumber": "A String", # The last known proposal revision number.
@@ -458,6 +502,17 @@
     {
     "deals": [ # List of deals added (in the same proposal as passed in the request)
       { # A proposal can contain multiple deals. A deal contains the terms and targeting information that is used for serving.
+        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
+        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
+          {
+            "email": "A String", # Email address of the contact.
+            "name": "A String", # The name of the contact.
+          },
+        ],
+        "webPropertyCode": "A String",
+        "proposalId": "A String",
+        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
+        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
         "deliveryControl": { # The set of fields around delivery control that are interesting for a buyer to see but are non-negotiable. These are set by the publisher. This message is assigned an id of 100 since some day we would want to model this as a protobuf extension.
           "frequencyCaps": [
             {
@@ -469,18 +524,77 @@
           "creativeBlockingLevel": "A String",
           "deliveryRateType": "A String",
         },
-        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
-        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
-        "name": "A String", # The name of the deal. (updatable)
-        "buyerPrivateData": { # Buyer private data (hidden from seller).
-          "referenceId": "A String",
-          "referencePayload": "A String",
+        "terms": { # The negotiable terms of the deal. (updatable)
+          "brandingType": "A String", # Visibilty of the URL in bid requests.
+          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
+            "pricingType": "A String", # The pricing type for the deal/product.
+            "currencyCode": "A String", # The currency code for the price.
+            "amountMicros": 3.14, # The price value in micros.
+          },
+          "sellerTimeZone": "A String", # For deals with Cost Per Day billing, defines the timezone used to mark the boundaries of a day (buyer-readonly)
+          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
+          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
+            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
+            "billingInfo": { # External billing info for this Deal. This field is relevant when external billing info such as price has a different currency code than DFP/AdX.
+              "price": { # The original reservation price for the deal, if the currency code is different from the one used in negotiation.
+                "pricingType": "A String", # The pricing type for the deal/product.
+                "currencyCode": "A String", # The currency code for the price.
+                "amountMicros": 3.14, # The price value in micros.
+              },
+              "originalContractedQuantity": "A String", # The original contracted quantity (# impressions) for this deal. To ensure delivery, sometimes publisher will book the deal with a impression buffer, however clients are billed using the original contracted quantity.
+              "currencyConversionTimeMs": "A String", # The timestamp (in ms since epoch) when the original reservation price for the deal was first converted to DFP currency. This is used to convert the contracted price into advertiser's currency without discrepancy.
+            },
+          },
+          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
+            "autoOptimizePrivateAuction": True or False, # True if open auction buyers are allowed to compete with invited buyers in this private auction (buyer-readonly).
+            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "description": "A String", # Description for the proposed terms of the deal.
         },
-        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
-        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. (updatable)
+        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. Each shared targeting entity is AND'd together. (updatable)
           {
-            "inclusions": [ # The list of value to include as part of the targeting.
+            "inclusions": [ # The list of value to include as part of the targeting. Each value is OR'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -511,7 +625,7 @@
                 "stringValue": "A String", # The string value to exclude/include.
               },
             ],
-            "exclusions": [ # The list of values to exclude from targeting.
+            "exclusions": [ # The list of values to exclude from targeting. Each value is AND'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -545,77 +659,29 @@
             "key": "A String", # The key representing the shared targeting criterion.
           },
         ],
-        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "dealId": "A String", # A unique deal=id for the deal (readonly).
-        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
-          {
-            "email": "A String", # Email address of the contact.
-            "name": "A String", # The name of the contact.
-          },
-        ],
-        "webPropertyCode": "A String",
-        "proposalId": "A String",
+        "creativeSafeFrameCompatibility": "A String", # Specifies whether the creative is safeFrame compatible (buyer-readonly)
+        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
+        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
+        "programmaticCreativeSource": "A String", # Specifies the creative source for programmatic deals, PUBLISHER means creative is provided by seller and ADVERTISR means creative is provided by buyer. (buyer-readonly)
+        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
+        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
+        "name": "A String", # The name of the deal. (updatable)
+        "buyerPrivateData": { # Buyer private data (hidden from seller).
+          "referenceId": "A String",
+          "referencePayload": "A String",
+        },
+        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
+        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "flightStartTimeMs": "A String", # Proposed flight start time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "terms": { # The negotiable terms of the deal. (updatable)
-          "brandingType": "A String", # Visibilty of the URL in bid requests.
-          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
-            "pricingType": "A String", # The pricing type for the deal/product.
-            "currencyCode": "A String", # The currency code for the price.
-            "amountMicros": 3.14, # The price value in micros.
+        "dealServingMetadata": { # Metadata about the serving status of this deal (readonly, writes via custom actions)
+          "dealPauseStatus": { # Tracks which parties (if any) have paused a deal. The deal is considered paused if has_buyer_paused || has_seller_paused. Each of the has_buyer_paused or the has_seller_paused bits can be set independently. # Tracks which parties (if any) have paused a deal. (readonly, except via PauseResumeOrderDeals action)
+            "hasSellerPaused": True or False,
+            "hasBuyerPaused": True or False,
+            "firstPausedBy": "A String", # If the deal is paused, records which party paused the deal first.
           },
-          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
-          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-          },
-          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
-            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
-          },
-          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
-            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "privateAuctionId": "A String", # Id of the corresponding private auction.
-          },
-          "description": "A String", # Description for the proposed terms of the deal.
         },
         "creationTimeMs": "A String", # The time (ms since epoch) of the deal creation. (readonly)
-        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
-        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
-        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
-        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
       },
     ],
     "proposalRevisionNumber": "A String", # The updated revision number for the proposal.
@@ -623,11 +689,12 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(proposalId)</code>
+    <code class="details" id="list">list(proposalId, pqlQuery=None)</code>
   <pre>List all the deals for a given proposal
 
 Args:
-  proposalId: string, The proposalId to get deals for. (required)
+  proposalId: string, The proposalId to get deals for. To search across proposals specify order_id = '-' as part of the URL. (required)
+  pqlQuery: string, Query string to retrieve specific deals.
 
 Returns:
   An object of the form:
@@ -635,6 +702,17 @@
     {
     "deals": [ # List of deals for the proposal
       { # A proposal can contain multiple deals. A deal contains the terms and targeting information that is used for serving.
+        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
+        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
+          {
+            "email": "A String", # Email address of the contact.
+            "name": "A String", # The name of the contact.
+          },
+        ],
+        "webPropertyCode": "A String",
+        "proposalId": "A String",
+        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
+        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
         "deliveryControl": { # The set of fields around delivery control that are interesting for a buyer to see but are non-negotiable. These are set by the publisher. This message is assigned an id of 100 since some day we would want to model this as a protobuf extension.
           "frequencyCaps": [
             {
@@ -646,18 +724,77 @@
           "creativeBlockingLevel": "A String",
           "deliveryRateType": "A String",
         },
-        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
-        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
-        "name": "A String", # The name of the deal. (updatable)
-        "buyerPrivateData": { # Buyer private data (hidden from seller).
-          "referenceId": "A String",
-          "referencePayload": "A String",
+        "terms": { # The negotiable terms of the deal. (updatable)
+          "brandingType": "A String", # Visibilty of the URL in bid requests.
+          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
+            "pricingType": "A String", # The pricing type for the deal/product.
+            "currencyCode": "A String", # The currency code for the price.
+            "amountMicros": 3.14, # The price value in micros.
+          },
+          "sellerTimeZone": "A String", # For deals with Cost Per Day billing, defines the timezone used to mark the boundaries of a day (buyer-readonly)
+          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
+          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
+            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
+            "billingInfo": { # External billing info for this Deal. This field is relevant when external billing info such as price has a different currency code than DFP/AdX.
+              "price": { # The original reservation price for the deal, if the currency code is different from the one used in negotiation.
+                "pricingType": "A String", # The pricing type for the deal/product.
+                "currencyCode": "A String", # The currency code for the price.
+                "amountMicros": 3.14, # The price value in micros.
+              },
+              "originalContractedQuantity": "A String", # The original contracted quantity (# impressions) for this deal. To ensure delivery, sometimes publisher will book the deal with a impression buffer, however clients are billed using the original contracted quantity.
+              "currencyConversionTimeMs": "A String", # The timestamp (in ms since epoch) when the original reservation price for the deal was first converted to DFP currency. This is used to convert the contracted price into advertiser's currency without discrepancy.
+            },
+          },
+          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
+            "autoOptimizePrivateAuction": True or False, # True if open auction buyers are allowed to compete with invited buyers in this private auction (buyer-readonly).
+            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "description": "A String", # Description for the proposed terms of the deal.
         },
-        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
-        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. (updatable)
+        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. Each shared targeting entity is AND'd together. (updatable)
           {
-            "inclusions": [ # The list of value to include as part of the targeting.
+            "inclusions": [ # The list of value to include as part of the targeting. Each value is OR'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -688,7 +825,7 @@
                 "stringValue": "A String", # The string value to exclude/include.
               },
             ],
-            "exclusions": [ # The list of values to exclude from targeting.
+            "exclusions": [ # The list of values to exclude from targeting. Each value is AND'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -722,77 +859,29 @@
             "key": "A String", # The key representing the shared targeting criterion.
           },
         ],
-        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "dealId": "A String", # A unique deal=id for the deal (readonly).
-        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
-          {
-            "email": "A String", # Email address of the contact.
-            "name": "A String", # The name of the contact.
-          },
-        ],
-        "webPropertyCode": "A String",
-        "proposalId": "A String",
+        "creativeSafeFrameCompatibility": "A String", # Specifies whether the creative is safeFrame compatible (buyer-readonly)
+        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
+        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
+        "programmaticCreativeSource": "A String", # Specifies the creative source for programmatic deals, PUBLISHER means creative is provided by seller and ADVERTISR means creative is provided by buyer. (buyer-readonly)
+        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
+        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
+        "name": "A String", # The name of the deal. (updatable)
+        "buyerPrivateData": { # Buyer private data (hidden from seller).
+          "referenceId": "A String",
+          "referencePayload": "A String",
+        },
+        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
+        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "flightStartTimeMs": "A String", # Proposed flight start time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "terms": { # The negotiable terms of the deal. (updatable)
-          "brandingType": "A String", # Visibilty of the URL in bid requests.
-          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
-            "pricingType": "A String", # The pricing type for the deal/product.
-            "currencyCode": "A String", # The currency code for the price.
-            "amountMicros": 3.14, # The price value in micros.
+        "dealServingMetadata": { # Metadata about the serving status of this deal (readonly, writes via custom actions)
+          "dealPauseStatus": { # Tracks which parties (if any) have paused a deal. The deal is considered paused if has_buyer_paused || has_seller_paused. Each of the has_buyer_paused or the has_seller_paused bits can be set independently. # Tracks which parties (if any) have paused a deal. (readonly, except via PauseResumeOrderDeals action)
+            "hasSellerPaused": True or False,
+            "hasBuyerPaused": True or False,
+            "firstPausedBy": "A String", # If the deal is paused, records which party paused the deal first.
           },
-          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
-          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-          },
-          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
-            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
-          },
-          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
-            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "privateAuctionId": "A String", # Id of the corresponding private auction.
-          },
-          "description": "A String", # Description for the proposed terms of the deal.
         },
         "creationTimeMs": "A String", # The time (ms since epoch) of the deal creation. (readonly)
-        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
-        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
-        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
-        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
       },
     ],
   }</pre>
@@ -810,6 +899,17 @@
 {
     "deals": [ # List of deals to edit. Service may perform 3 different operations based on comparison of deals in this list vs deals already persisted in database: 1. Add new deal to proposal If a deal in this list does not exist in the proposal, the service will create a new deal and add it to the proposal. Validation will follow AddOrderDealsRequest. 2. Update existing deal in the proposal If a deal in this list already exist in the proposal, the service will update that existing deal to this new deal in the request. Validation will follow UpdateOrderDealsRequest. 3. Delete deals from the proposal (just need the id) If a existing deal in the proposal is not present in this list, the service will delete that deal from the proposal. Validation will follow DeleteOrderDealsRequest.
       { # A proposal can contain multiple deals. A deal contains the terms and targeting information that is used for serving.
+        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
+        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
+          {
+            "email": "A String", # Email address of the contact.
+            "name": "A String", # The name of the contact.
+          },
+        ],
+        "webPropertyCode": "A String",
+        "proposalId": "A String",
+        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
+        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
         "deliveryControl": { # The set of fields around delivery control that are interesting for a buyer to see but are non-negotiable. These are set by the publisher. This message is assigned an id of 100 since some day we would want to model this as a protobuf extension.
           "frequencyCaps": [
             {
@@ -821,18 +921,77 @@
           "creativeBlockingLevel": "A String",
           "deliveryRateType": "A String",
         },
-        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
-        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
-        "name": "A String", # The name of the deal. (updatable)
-        "buyerPrivateData": { # Buyer private data (hidden from seller).
-          "referenceId": "A String",
-          "referencePayload": "A String",
+        "terms": { # The negotiable terms of the deal. (updatable)
+          "brandingType": "A String", # Visibilty of the URL in bid requests.
+          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
+            "pricingType": "A String", # The pricing type for the deal/product.
+            "currencyCode": "A String", # The currency code for the price.
+            "amountMicros": 3.14, # The price value in micros.
+          },
+          "sellerTimeZone": "A String", # For deals with Cost Per Day billing, defines the timezone used to mark the boundaries of a day (buyer-readonly)
+          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
+          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
+            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
+            "billingInfo": { # External billing info for this Deal. This field is relevant when external billing info such as price has a different currency code than DFP/AdX.
+              "price": { # The original reservation price for the deal, if the currency code is different from the one used in negotiation.
+                "pricingType": "A String", # The pricing type for the deal/product.
+                "currencyCode": "A String", # The currency code for the price.
+                "amountMicros": 3.14, # The price value in micros.
+              },
+              "originalContractedQuantity": "A String", # The original contracted quantity (# impressions) for this deal. To ensure delivery, sometimes publisher will book the deal with a impression buffer, however clients are billed using the original contracted quantity.
+              "currencyConversionTimeMs": "A String", # The timestamp (in ms since epoch) when the original reservation price for the deal was first converted to DFP currency. This is used to convert the contracted price into advertiser's currency without discrepancy.
+            },
+          },
+          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
+            "autoOptimizePrivateAuction": True or False, # True if open auction buyers are allowed to compete with invited buyers in this private auction (buyer-readonly).
+            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "description": "A String", # Description for the proposed terms of the deal.
         },
-        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
-        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. (updatable)
+        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. Each shared targeting entity is AND'd together. (updatable)
           {
-            "inclusions": [ # The list of value to include as part of the targeting.
+            "inclusions": [ # The list of value to include as part of the targeting. Each value is OR'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -863,7 +1022,7 @@
                 "stringValue": "A String", # The string value to exclude/include.
               },
             ],
-            "exclusions": [ # The list of values to exclude from targeting.
+            "exclusions": [ # The list of values to exclude from targeting. Each value is AND'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -897,92 +1056,34 @@
             "key": "A String", # The key representing the shared targeting criterion.
           },
         ],
-        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "dealId": "A String", # A unique deal=id for the deal (readonly).
-        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
-          {
-            "email": "A String", # Email address of the contact.
-            "name": "A String", # The name of the contact.
-          },
-        ],
-        "webPropertyCode": "A String",
-        "proposalId": "A String",
+        "creativeSafeFrameCompatibility": "A String", # Specifies whether the creative is safeFrame compatible (buyer-readonly)
+        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
+        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
+        "programmaticCreativeSource": "A String", # Specifies the creative source for programmatic deals, PUBLISHER means creative is provided by seller and ADVERTISR means creative is provided by buyer. (buyer-readonly)
+        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
+        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
+        "name": "A String", # The name of the deal. (updatable)
+        "buyerPrivateData": { # Buyer private data (hidden from seller).
+          "referenceId": "A String",
+          "referencePayload": "A String",
+        },
+        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
+        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "flightStartTimeMs": "A String", # Proposed flight start time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "terms": { # The negotiable terms of the deal. (updatable)
-          "brandingType": "A String", # Visibilty of the URL in bid requests.
-          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
-            "pricingType": "A String", # The pricing type for the deal/product.
-            "currencyCode": "A String", # The currency code for the price.
-            "amountMicros": 3.14, # The price value in micros.
+        "dealServingMetadata": { # Metadata about the serving status of this deal (readonly, writes via custom actions)
+          "dealPauseStatus": { # Tracks which parties (if any) have paused a deal. The deal is considered paused if has_buyer_paused || has_seller_paused. Each of the has_buyer_paused or the has_seller_paused bits can be set independently. # Tracks which parties (if any) have paused a deal. (readonly, except via PauseResumeOrderDeals action)
+            "hasSellerPaused": True or False,
+            "hasBuyerPaused": True or False,
+            "firstPausedBy": "A String", # If the deal is paused, records which party paused the deal first.
           },
-          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
-          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-          },
-          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
-            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
-          },
-          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
-            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "privateAuctionId": "A String", # Id of the corresponding private auction.
-          },
-          "description": "A String", # Description for the proposed terms of the deal.
         },
         "creationTimeMs": "A String", # The time (ms since epoch) of the deal creation. (readonly)
-        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
-        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
-        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
-        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
       },
     ],
     "proposal": { # Represents a proposal in the marketplace. A proposal is the unit of negotiation between a seller and a buyer and contains deals which are served. Each field in a proposal can have one of the following setting: # If specified, also updates the proposal in the batch transaction. This is useful when the proposal and the deals need to be updated in one transaction.
         #
         # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only the seller can set this field. (seller-readonly) - Only the buyer can set this field. (updatable) - The field is updatable at all times by either buyer or the seller.
-      "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
-      "proposalState": "A String", # The current state of the proposal. (readonly)
-      "name": "A String", # The name for the proposal (updatable)
-      "buyerPrivateData": { # Private data for buyer. (hidden from seller).
-        "referenceId": "A String",
-        "referencePayload": "A String",
-      },
-      "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
-        "accountId": "A String", # Adx account id of the buyer.
-      },
       "labels": [ # List of labels associated with the proposal. (readonly)
         {
           "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
@@ -999,30 +1100,41 @@
           "accountId": "A String", # The accountId of the party that created the label.
         },
       ],
-      "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
-      "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
       "sellerContacts": [ # Optional contact information for the seller (buyer-readonly).
         {
           "email": "A String", # Email address of the contact.
           "name": "A String", # The name of the contact.
         },
       ],
-      "lastUpdaterRole": "A String",
-      "proposalId": "A String", # The unique id of the proposal. (readonly).
+      "negotiationId": "A String", # Optional negotiation id if this proposal is a preferred deal proposal.
       "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
       "revisionNumber": "A String", # The revision number for the proposal (readonly).
-      "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
-      "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
-      "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
-        "accountId": "A String", # Adx account id of the buyer.
-      },
-      "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
-      "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly)
+      "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
       "seller": { # Reference to the seller on the proposal. (readonly, except on create)
         "subAccountId": "A String", # Optional sub-account id for the seller.
         "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
       },
+      "proposalId": "A String", # The unique id of the proposal. (readonly).
+      "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
       "lastUpdaterOrCommentorRole": "A String", # The role of the last user that either updated the proposal or left a comment. (readonly)
+      "privateAuctionId": "A String", # Optional private auction id if this proposal is a private auction proposal.
+      "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
+      "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
+      "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
+        "accountId": "A String", # Adx account id of the buyer.
+      },
+      "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
+      "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
+      "proposalState": "A String", # The current state of the proposal. (readonly)
+      "name": "A String", # The name for the proposal (updatable)
+      "buyerPrivateData": { # Private data for buyer. (hidden from seller).
+        "referenceId": "A String",
+        "referencePayload": "A String",
+      },
+      "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
+        "accountId": "A String", # Adx account id of the buyer.
+      },
+      "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly, except via OrderSetupCompleted action)
       "buyerContacts": [ # Optional contact information fort the buyer. (seller-readonly)
         {
           "email": "A String", # Email address of the contact.
@@ -1041,6 +1153,17 @@
     {
     "deals": [ # List of all deals in the proposal after edit.
       { # A proposal can contain multiple deals. A deal contains the terms and targeting information that is used for serving.
+        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
+        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
+          {
+            "email": "A String", # Email address of the contact.
+            "name": "A String", # The name of the contact.
+          },
+        ],
+        "webPropertyCode": "A String",
+        "proposalId": "A String",
+        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
+        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
         "deliveryControl": { # The set of fields around delivery control that are interesting for a buyer to see but are non-negotiable. These are set by the publisher. This message is assigned an id of 100 since some day we would want to model this as a protobuf extension.
           "frequencyCaps": [
             {
@@ -1052,18 +1175,77 @@
           "creativeBlockingLevel": "A String",
           "deliveryRateType": "A String",
         },
-        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
-        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
-        "name": "A String", # The name of the deal. (updatable)
-        "buyerPrivateData": { # Buyer private data (hidden from seller).
-          "referenceId": "A String",
-          "referencePayload": "A String",
+        "terms": { # The negotiable terms of the deal. (updatable)
+          "brandingType": "A String", # Visibilty of the URL in bid requests.
+          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
+            "pricingType": "A String", # The pricing type for the deal/product.
+            "currencyCode": "A String", # The currency code for the price.
+            "amountMicros": 3.14, # The price value in micros.
+          },
+          "sellerTimeZone": "A String", # For deals with Cost Per Day billing, defines the timezone used to mark the boundaries of a day (buyer-readonly)
+          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
+          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
+            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
+            "billingInfo": { # External billing info for this Deal. This field is relevant when external billing info such as price has a different currency code than DFP/AdX.
+              "price": { # The original reservation price for the deal, if the currency code is different from the one used in negotiation.
+                "pricingType": "A String", # The pricing type for the deal/product.
+                "currencyCode": "A String", # The currency code for the price.
+                "amountMicros": 3.14, # The price value in micros.
+              },
+              "originalContractedQuantity": "A String", # The original contracted quantity (# impressions) for this deal. To ensure delivery, sometimes publisher will book the deal with a impression buffer, however clients are billed using the original contracted quantity.
+              "currencyConversionTimeMs": "A String", # The timestamp (in ms since epoch) when the original reservation price for the deal was first converted to DFP currency. This is used to convert the contracted price into advertiser's currency without discrepancy.
+            },
+          },
+          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
+            "autoOptimizePrivateAuction": True or False, # True if open auction buyers are allowed to compete with invited buyers in this private auction (buyer-readonly).
+            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "description": "A String", # Description for the proposed terms of the deal.
         },
-        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
-        "flightEndTimeMs": "A String", # Proposed flight end time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. (updatable)
+        "sharedTargetings": [ # The shared targeting visible to buyers and sellers. Each shared targeting entity is AND'd together. (updatable)
           {
-            "inclusions": [ # The list of value to include as part of the targeting.
+            "inclusions": [ # The list of value to include as part of the targeting. Each value is OR'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -1094,7 +1276,7 @@
                 "stringValue": "A String", # The string value to exclude/include.
               },
             ],
-            "exclusions": [ # The list of values to exclude from targeting.
+            "exclusions": [ # The list of values to exclude from targeting. Each value is AND'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -1128,79 +1310,32 @@
             "key": "A String", # The key representing the shared targeting criterion.
           },
         ],
-        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "dealId": "A String", # A unique deal=id for the deal (readonly).
-        "sellerContacts": [ # Optional Seller contact information for the deal (buyer-readonly)
-          {
-            "email": "A String", # Email address of the contact.
-            "name": "A String", # The name of the contact.
-          },
-        ],
-        "webPropertyCode": "A String",
-        "proposalId": "A String",
+        "creativeSafeFrameCompatibility": "A String", # Specifies whether the creative is safeFrame compatible (buyer-readonly)
+        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
+        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
+        "programmaticCreativeSource": "A String", # Specifies the creative source for programmatic deals, PUBLISHER means creative is provided by seller and ADVERTISR means creative is provided by buyer. (buyer-readonly)
+        "kind": "adexchangebuyer#marketplaceDeal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceDeal".
+        "creativePreApprovalPolicy": "A String", # Specifies the creative pre-approval policy (buyer-readonly)
+        "name": "A String", # The name of the deal. (updatable)
+        "buyerPrivateData": { # Buyer private data (hidden from seller).
+          "referenceId": "A String",
+          "referencePayload": "A String",
+        },
+        "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
+        "productRevisionNumber": "A String", # The revision number of the product that the deal was created from (readonly, except on create)
         "flightStartTimeMs": "A String", # Proposed flight start time of the deal (ms since epoch) This will generally be stored in a granularity of a second. (updatable)
-        "terms": { # The negotiable terms of the deal. (updatable)
-          "brandingType": "A String", # Visibilty of the URL in bid requests.
-          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
-            "pricingType": "A String", # The pricing type for the deal/product.
-            "currencyCode": "A String", # The currency code for the price.
-            "amountMicros": 3.14, # The price value in micros.
+        "dealServingMetadata": { # Metadata about the serving status of this deal (readonly, writes via custom actions)
+          "dealPauseStatus": { # Tracks which parties (if any) have paused a deal. The deal is considered paused if has_buyer_paused || has_seller_paused. Each of the has_buyer_paused or the has_seller_paused bits can be set independently. # Tracks which parties (if any) have paused a deal. (readonly, except via PauseResumeOrderDeals action)
+            "hasSellerPaused": True or False,
+            "hasBuyerPaused": True or False,
+            "firstPausedBy": "A String", # If the deal is paused, records which party paused the deal first.
           },
-          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
-          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-          },
-          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
-            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
-          },
-          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
-            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "privateAuctionId": "A String", # Id of the corresponding private auction.
-          },
-          "description": "A String", # Description for the proposed terms of the deal.
         },
         "creationTimeMs": "A String", # The time (ms since epoch) of the deal creation. (readonly)
-        "lastUpdateTimeMs": "A String", # The time (ms since epoch) when the deal was last updated. (readonly)
-        "externalDealId": "A String", # The external deal id assigned to this deal once the deal is finalized. This is the deal-id that shows up in serving/reporting etc. (readonly)
-        "inventoryDescription": "A String", # Description for the deal terms. (updatable)
-        "productId": "A String", # The product-id from which this deal was created. (readonly, except on create)
       },
     ],
+    "orderRevisionNumber": "A String", # The latest revision number after the update has been applied.
   }</pre>
 </div>
 
diff --git a/docs/dyn/adexchangebuyer_v1_4.marketplaceprivateauction.html b/docs/dyn/adexchangebuyer_v1_4.marketplaceprivateauction.html
new file mode 100644
index 0000000..566633b
--- /dev/null
+++ b/docs/dyn/adexchangebuyer_v1_4.marketplaceprivateauction.html
@@ -0,0 +1,109 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="adexchangebuyer_v1_4.html">Ad Exchange Buyer API</a> . <a href="adexchangebuyer_v1_4.marketplaceprivateauction.html">marketplaceprivateauction</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#updateproposal">updateproposal(privateAuctionId, body)</a></code></p>
+<p class="firstline">Update a given private auction proposal</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="updateproposal">updateproposal(privateAuctionId, body)</code>
+  <pre>Update a given private auction proposal
+
+Args:
+  privateAuctionId: string, The private auction id to be updated. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{
+    "note": { # A proposal is associated with a bunch of notes which may optionally be associated with a deal and/or revision number. # Optional note to be added.
+      "kind": "adexchangebuyer#marketplaceNote", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#marketplaceNote".
+      "proposalRevisionNumber": "A String", # If the note is associated with a proposal revision number, then store that here. (readonly, except on create)
+      "dealId": "A String", # Notes can optionally be associated with a deal. (readonly, except on create)
+      "note": "A String", # The actual note to attach. (readonly, except on create)
+      "proposalId": "A String", # The proposalId that a note is attached to. (readonly)
+      "creatorRole": "A String", # The role of the person (buyer/seller) creating the note. (readonly)
+      "noteId": "A String", # The unique id for the note. (readonly)
+      "timestampMs": "A String", # The timestamp (ms since epoch) that this note was created. (readonly)
+    },
+    "externalDealId": "A String", # The externalDealId of the deal to be updated.
+    "proposalRevisionNumber": "A String", # The current revision number of the proposal to be updated.
+    "updateAction": "A String", # The proposed action on the private auction proposal.
+  }
+
+</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/adexchangebuyer_v1_4.performanceReport.html b/docs/dyn/adexchangebuyer_v1_4.performanceReport.html
index 0808b4c..824c345 100644
--- a/docs/dyn/adexchangebuyer_v1_4.performanceReport.html
+++ b/docs/dyn/adexchangebuyer_v1_4.performanceReport.html
@@ -92,7 +92,7 @@
 Returns:
   An object of the form:
 
-    { # The configuration data for an Ad Exchange performance report list. https://sites.google.com/a/google.com/adx-integration/Home/engineering/binary-releases/rtb-api-release https://cs.corp.google.com/#piper///depot/google3/contentads/adx/tools/rtb_api/adxrtb.py
+    { # The configuration data for an Ad Exchange performance report list.
     "kind": "adexchangebuyer#performanceReportList", # Resource type.
     "performanceReport": [ # A list of performance reports relevant for the account.
       { # The configuration data for an Ad Exchange performance report list.
diff --git a/docs/dyn/adexchangebuyer_v1_4.products.html b/docs/dyn/adexchangebuyer_v1_4.products.html
index 4677e70..a793a8e 100644
--- a/docs/dyn/adexchangebuyer_v1_4.products.html
+++ b/docs/dyn/adexchangebuyer_v1_4.products.html
@@ -100,10 +100,132 @@
         "name": "A String", # The name of the contact.
       },
     ],
-    "kind": "adexchangebuyer#product", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#product".
+    "publisherProvidedForecast": { # This message carries publisher provided forecasting information. # Publisher self-provided forecast information.
+      "weeklyImpressions": "A String", # Publisher provided weekly impressions.
+      "dimensions": [ # Publisher provided dimensions. E.g. geo, sizes etc...
+        { # This message carries publisher provided breakdown. E.g. {dimension_type: 'COUNTRY', [{dimension_value: {id: 1, name: 'US'}}, {dimension_value: {id: 2, name: 'UK'}}]}
+          "dimensionType": "A String",
+          "dimensionValues": [
+            { # Value of the dimension.
+              "id": 42, # Id of the dimension.
+              "name": "A String", # Name of the dimension mainly for debugging purposes.
+            },
+          ],
+        },
+      ],
+      "weeklyUniques": "A String", # Publisher provided weekly uniques.
+    },
+    "flightEndTimeMs": "A String", # The proposed end time for the deal (ms since epoch) (buyer-readonly)
+    "labels": [ # Optional List of labels for the product (optional, buyer-readonly).
+      {
+        "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
+        "deprecatedMarketplaceDealParty": { # Information about the party that created the label.
+          "buyer": { # The buyer/seller associated with the deal. One of buyer/seller is specified for a deal-party.
+            "accountId": "A String", # Adx account id of the buyer.
+          },
+          "seller": { # The buyer/seller associated with the deal. One of buyer/seller is specified for a deal party.
+            "subAccountId": "A String", # Optional sub-account id for the seller.
+            "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
+          },
+        },
+        "label": "A String", # The label to use.
+        "accountId": "A String", # The accountId of the party that created the label.
+      },
+    ],
+    "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
+    "publisherProfileId": "A String", # Id of the publisher profile for a given seller. A (seller.account_id, publisher_profile_id) pair uniquely identifies a publisher profile. Buyers can call the PublisherProfiles::List endpoint to get a list of publisher profiles for a given seller.
+    "revisionNumber": "A String", # The revision number of the product. (readonly)
+    "seller": { # Information about the seller that created this product (readonly, except on create)
+      "subAccountId": "A String", # Optional sub-account id for the seller.
+      "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
+    },
+    "webPropertyCode": "A String", # The web property code for the seller. This field is meant to be copied over as is when creating deals.
+    "state": "A String", # The state of the product. (buyer-readonly)
+    "hasCreatorSignedOff": True or False, # If the creator has already signed off on the product, then the buyer can finalize the deal by accepting the product as is. When copying to a proposal, if any of the terms are changed, then auto_finalize is automatically set to false.
+    "productId": "A String", # The unique id for the product (readonly)
+    "deliveryControl": { # The set of fields around delivery control that are interesting for a buyer to see but are non-negotiable. These are set by the publisher. This message is assigned an id of 100 since some day we would want to model this as a protobuf extension.
+      "frequencyCaps": [
+        {
+          "numTimeUnits": 42,
+          "timeUnitType": "A String",
+          "maxImpressions": 42,
+        },
+      ],
+      "creativeBlockingLevel": "A String",
+      "deliveryRateType": "A String",
+    },
+    "terms": { # The negotiable terms of the deal (buyer-readonly)
+      "brandingType": "A String", # Visibilty of the URL in bid requests.
+      "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
+        "pricingType": "A String", # The pricing type for the deal/product.
+        "currencyCode": "A String", # The currency code for the price.
+        "amountMicros": 3.14, # The price value in micros.
+      },
+      "sellerTimeZone": "A String", # For deals with Cost Per Day billing, defines the timezone used to mark the boundaries of a day (buyer-readonly)
+      "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
+      "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
+        "fixedPrices": [ # Fixed price for the specified buyer.
+          { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+            "auctionTier": "A String", # Optional access type for this buyer.
+            "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+              "accountId": "A String", # Adx account id of the buyer.
+            },
+            "price": { # The specified price
+              "pricingType": "A String", # The pricing type for the deal/product.
+              "currencyCode": "A String", # The currency code for the price.
+              "amountMicros": 3.14, # The price value in micros.
+            },
+          },
+        ],
+      },
+      "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
+        "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
+        "fixedPrices": [ # Fixed price for the specified buyer.
+          { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+            "auctionTier": "A String", # Optional access type for this buyer.
+            "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+              "accountId": "A String", # Adx account id of the buyer.
+            },
+            "price": { # The specified price
+              "pricingType": "A String", # The pricing type for the deal/product.
+              "currencyCode": "A String", # The currency code for the price.
+              "amountMicros": 3.14, # The price value in micros.
+            },
+          },
+        ],
+        "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
+        "billingInfo": { # External billing info for this Deal. This field is relevant when external billing info such as price has a different currency code than DFP/AdX.
+          "price": { # The original reservation price for the deal, if the currency code is different from the one used in negotiation.
+            "pricingType": "A String", # The pricing type for the deal/product.
+            "currencyCode": "A String", # The currency code for the price.
+            "amountMicros": 3.14, # The price value in micros.
+          },
+          "originalContractedQuantity": "A String", # The original contracted quantity (# impressions) for this deal. To ensure delivery, sometimes publisher will book the deal with a impression buffer, however clients are billed using the original contracted quantity.
+          "currencyConversionTimeMs": "A String", # The timestamp (in ms since epoch) when the original reservation price for the deal was first converted to DFP currency. This is used to convert the contracted price into advertiser's currency without discrepancy.
+        },
+      },
+      "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
+        "autoOptimizePrivateAuction": True or False, # True if open auction buyers are allowed to compete with invited buyers in this private auction (buyer-readonly).
+        "reservePricePerBuyers": [ # Reserve price for the specified buyer.
+          { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+            "auctionTier": "A String", # Optional access type for this buyer.
+            "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+              "accountId": "A String", # Adx account id of the buyer.
+            },
+            "price": { # The specified price
+              "pricingType": "A String", # The pricing type for the deal/product.
+              "currencyCode": "A String", # The currency code for the price.
+              "amountMicros": 3.14, # The price value in micros.
+            },
+          },
+        ],
+      },
+      "description": "A String", # Description for the proposed terms of the deal.
+    },
+    "privateAuctionId": "A String", # Optional private auction id if this offer is a private auction offer.
     "sharedTargetings": [ # Targeting that is shared between the buyer and the seller. Each targeting criteria has a specified key and for each key there is a list of inclusion value or exclusion values. (buyer-readonly)
       {
-        "inclusions": [ # The list of value to include as part of the targeting.
+        "inclusions": [ # The list of value to include as part of the targeting. Each value is OR'd together.
           {
             "longValue": "A String", # The long value to exclude/include.
             "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -134,7 +256,7 @@
             "stringValue": "A String", # The string value to exclude/include.
           },
         ],
-        "exclusions": [ # The list of values to exclude from targeting.
+        "exclusions": [ # The list of values to exclude from targeting. Each value is AND'd together.
           {
             "longValue": "A String", # The long value to exclude/include.
             "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -168,93 +290,13 @@
         "key": "A String", # The key representing the shared targeting criterion.
       },
     ],
-    "terms": { # The negotiable terms of the deal (buyer-readonly)
-      "brandingType": "A String", # Visibilty of the URL in bid requests.
-      "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
-        "pricingType": "A String", # The pricing type for the deal/product.
-        "currencyCode": "A String", # The currency code for the price.
-        "amountMicros": 3.14, # The price value in micros.
-      },
-      "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
-      "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
-        "fixedPrices": [ # Fixed price for the specified buyer.
-          { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-            "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-              "accountId": "A String", # Adx account id of the buyer.
-            },
-            "price": { # The specified price
-              "pricingType": "A String", # The pricing type for the deal/product.
-              "currencyCode": "A String", # The currency code for the price.
-              "amountMicros": 3.14, # The price value in micros.
-            },
-          },
-        ],
-      },
-      "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
-        "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
-        "fixedPrices": [ # Fixed price for the specified buyer.
-          { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-            "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-              "accountId": "A String", # Adx account id of the buyer.
-            },
-            "price": { # The specified price
-              "pricingType": "A String", # The pricing type for the deal/product.
-              "currencyCode": "A String", # The currency code for the price.
-              "amountMicros": 3.14, # The price value in micros.
-            },
-          },
-        ],
-        "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
-      },
-      "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
-        "reservePricePerBuyers": [ # Reserve price for the specified buyer.
-          { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-            "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-              "accountId": "A String", # Adx account id of the buyer.
-            },
-            "price": { # The specified price
-              "pricingType": "A String", # The pricing type for the deal/product.
-              "currencyCode": "A String", # The currency code for the price.
-              "amountMicros": 3.14, # The price value in micros.
-            },
-          },
-        ],
-        "privateAuctionId": "A String", # Id of the corresponding private auction.
-      },
-      "description": "A String", # Description for the proposed terms of the deal.
-    },
+    "lastUpdateTimeMs": "A String", # Time of last update in ms. since epoch (readonly)
+    "legacyOfferId": "A String", # Optional legacy offer id if this offer is a preferred deal offer.
+    "kind": "adexchangebuyer#product", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#product".
     "name": "A String", # The name for this product as set by the seller. (buyer-readonly)
     "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
-    "flightEndTimeMs": "A String", # The proposed end time for the deal (ms since epoch) (buyer-readonly)
-    "labels": [ # Optional List of labels for the product (optional, buyer-readonly).
-      {
-        "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
-        "deprecatedMarketplaceDealParty": { # Information about the party that created the label.
-          "buyer": { # The buyer/seller associated with the deal. One of buyer/seller is specified for a deal-party.
-            "accountId": "A String", # Adx account id of the buyer.
-          },
-          "seller": { # The buyer/seller associated with the deal. One of buyer/seller is specified for a deal party.
-            "subAccountId": "A String", # Optional sub-account id for the seller.
-            "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
-          },
-        },
-        "label": "A String", # The label to use.
-        "accountId": "A String", # The accountId of the party that created the label.
-      },
-    ],
-    "seller": { # Information about the seller that created this product (readonly, except on create)
-      "subAccountId": "A String", # Optional sub-account id for the seller.
-      "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
-    },
-    "webPropertyCode": "A String",
-    "state": "A String", # The state of the product. (buyer-readonly)
-    "hasCreatorSignedOff": True or False, # If the creator has already signed off on the product, then the buyer can finalize the deal by accepting the product as is. When copying to a proposal, if any of the terms are changed, then auto_finalize is automatically set to false.
-    "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
     "flightStartTimeMs": "A String", # Inventory availability dates. (times are in ms since epoch) The granularity is generally in the order of seconds. (buyer-readonly)
     "creationTimeMs": "A String", # Creation time in ms. since epoch (readonly)
-    "lastUpdateTimeMs": "A String", # Time of last update in ms. since epoch (readonly)
-    "revisionNumber": "A String", # The revision number of the product. (readonly)
-    "productId": "A String", # The unique id for the product (readonly)
   }</pre>
 </div>
 
@@ -279,10 +321,132 @@
             "name": "A String", # The name of the contact.
           },
         ],
-        "kind": "adexchangebuyer#product", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#product".
+        "publisherProvidedForecast": { # This message carries publisher provided forecasting information. # Publisher self-provided forecast information.
+          "weeklyImpressions": "A String", # Publisher provided weekly impressions.
+          "dimensions": [ # Publisher provided dimensions. E.g. geo, sizes etc...
+            { # This message carries publisher provided breakdown. E.g. {dimension_type: 'COUNTRY', [{dimension_value: {id: 1, name: 'US'}}, {dimension_value: {id: 2, name: 'UK'}}]}
+              "dimensionType": "A String",
+              "dimensionValues": [
+                { # Value of the dimension.
+                  "id": 42, # Id of the dimension.
+                  "name": "A String", # Name of the dimension mainly for debugging purposes.
+                },
+              ],
+            },
+          ],
+          "weeklyUniques": "A String", # Publisher provided weekly uniques.
+        },
+        "flightEndTimeMs": "A String", # The proposed end time for the deal (ms since epoch) (buyer-readonly)
+        "labels": [ # Optional List of labels for the product (optional, buyer-readonly).
+          {
+            "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
+            "deprecatedMarketplaceDealParty": { # Information about the party that created the label.
+              "buyer": { # The buyer/seller associated with the deal. One of buyer/seller is specified for a deal-party.
+                "accountId": "A String", # Adx account id of the buyer.
+              },
+              "seller": { # The buyer/seller associated with the deal. One of buyer/seller is specified for a deal party.
+                "subAccountId": "A String", # Optional sub-account id for the seller.
+                "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
+              },
+            },
+            "label": "A String", # The label to use.
+            "accountId": "A String", # The accountId of the party that created the label.
+          },
+        ],
+        "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
+        "publisherProfileId": "A String", # Id of the publisher profile for a given seller. A (seller.account_id, publisher_profile_id) pair uniquely identifies a publisher profile. Buyers can call the PublisherProfiles::List endpoint to get a list of publisher profiles for a given seller.
+        "revisionNumber": "A String", # The revision number of the product. (readonly)
+        "seller": { # Information about the seller that created this product (readonly, except on create)
+          "subAccountId": "A String", # Optional sub-account id for the seller.
+          "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
+        },
+        "webPropertyCode": "A String", # The web property code for the seller. This field is meant to be copied over as is when creating deals.
+        "state": "A String", # The state of the product. (buyer-readonly)
+        "hasCreatorSignedOff": True or False, # If the creator has already signed off on the product, then the buyer can finalize the deal by accepting the product as is. When copying to a proposal, if any of the terms are changed, then auto_finalize is automatically set to false.
+        "productId": "A String", # The unique id for the product (readonly)
+        "deliveryControl": { # The set of fields around delivery control that are interesting for a buyer to see but are non-negotiable. These are set by the publisher. This message is assigned an id of 100 since some day we would want to model this as a protobuf extension.
+          "frequencyCaps": [
+            {
+              "numTimeUnits": 42,
+              "timeUnitType": "A String",
+              "maxImpressions": 42,
+            },
+          ],
+          "creativeBlockingLevel": "A String",
+          "deliveryRateType": "A String",
+        },
+        "terms": { # The negotiable terms of the deal (buyer-readonly)
+          "brandingType": "A String", # Visibilty of the URL in bid requests.
+          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
+            "pricingType": "A String", # The pricing type for the deal/product.
+            "currencyCode": "A String", # The currency code for the price.
+            "amountMicros": 3.14, # The price value in micros.
+          },
+          "sellerTimeZone": "A String", # For deals with Cost Per Day billing, defines the timezone used to mark the boundaries of a day (buyer-readonly)
+          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
+          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
+            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
+            "fixedPrices": [ # Fixed price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
+            "billingInfo": { # External billing info for this Deal. This field is relevant when external billing info such as price has a different currency code than DFP/AdX.
+              "price": { # The original reservation price for the deal, if the currency code is different from the one used in negotiation.
+                "pricingType": "A String", # The pricing type for the deal/product.
+                "currencyCode": "A String", # The currency code for the price.
+                "amountMicros": 3.14, # The price value in micros.
+              },
+              "originalContractedQuantity": "A String", # The original contracted quantity (# impressions) for this deal. To ensure delivery, sometimes publisher will book the deal with a impression buffer, however clients are billed using the original contracted quantity.
+              "currencyConversionTimeMs": "A String", # The timestamp (in ms since epoch) when the original reservation price for the deal was first converted to DFP currency. This is used to convert the contracted price into advertiser's currency without discrepancy.
+            },
+          },
+          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
+            "autoOptimizePrivateAuction": True or False, # True if open auction buyers are allowed to compete with invited buyers in this private auction (buyer-readonly).
+            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
+              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
+                "auctionTier": "A String", # Optional access type for this buyer.
+                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
+                  "accountId": "A String", # Adx account id of the buyer.
+                },
+                "price": { # The specified price
+                  "pricingType": "A String", # The pricing type for the deal/product.
+                  "currencyCode": "A String", # The currency code for the price.
+                  "amountMicros": 3.14, # The price value in micros.
+                },
+              },
+            ],
+          },
+          "description": "A String", # Description for the proposed terms of the deal.
+        },
+        "privateAuctionId": "A String", # Optional private auction id if this offer is a private auction offer.
         "sharedTargetings": [ # Targeting that is shared between the buyer and the seller. Each targeting criteria has a specified key and for each key there is a list of inclusion value or exclusion values. (buyer-readonly)
           {
-            "inclusions": [ # The list of value to include as part of the targeting.
+            "inclusions": [ # The list of value to include as part of the targeting. Each value is OR'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -313,7 +477,7 @@
                 "stringValue": "A String", # The string value to exclude/include.
               },
             ],
-            "exclusions": [ # The list of values to exclude from targeting.
+            "exclusions": [ # The list of values to exclude from targeting. Each value is AND'd together.
               {
                 "longValue": "A String", # The long value to exclude/include.
                 "dayPartTargetingValue": { # The daypart targeting to include / exclude. Filled in when the key is GOOG_DAYPART_TARGETING.
@@ -347,93 +511,13 @@
             "key": "A String", # The key representing the shared targeting criterion.
           },
         ],
-        "terms": { # The negotiable terms of the deal (buyer-readonly)
-          "brandingType": "A String", # Visibilty of the URL in bid requests.
-          "estimatedGrossSpend": { # Non-binding estimate of the estimated gross spend for this deal Can be set by buyer or seller.
-            "pricingType": "A String", # The pricing type for the deal/product.
-            "currencyCode": "A String", # The currency code for the price.
-            "amountMicros": 3.14, # The price value in micros.
-          },
-          "estimatedImpressionsPerDay": "A String", # Non-binding estimate of the impressions served per day Can be set by buyer or seller.
-          "nonGuaranteedFixedPriceTerms": { # The terms for non-guaranteed fixed price deals.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-          },
-          "guaranteedFixedPriceTerms": { # The terms for guaranteed fixed price deals.
-            "guaranteedImpressions": "A String", # Guaranteed impressions as a percentage. This is the percentage of guaranteed looks that the buyer is guaranteeing to buy.
-            "fixedPrices": [ # Fixed price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "guaranteedLooks": "A String", # Count of guaranteed looks. Required for deal, optional for product.
-          },
-          "nonGuaranteedAuctionTerms": { # The terms for non-guaranteed auction deals.
-            "reservePricePerBuyers": [ # Reserve price for the specified buyer.
-              { # Used to specify pricing rules for buyers/advertisers. Each PricePerBuyer in an product can become [0,1] deals. To check if there is a PricePerBuyer for a particular buyer or buyer/advertiser pair, we look for the most specific matching rule - we first look for a rule matching the buyer and advertiser, next a rule with the buyer but an empty advertiser list, and otherwise look for a matching rule where no buyer is set.
-                "buyer": { # The buyer who will pay this price. If unset, all buyers can pay this price (if the advertisers match, and there's no more specific rule matching the buyer).
-                  "accountId": "A String", # Adx account id of the buyer.
-                },
-                "price": { # The specified price
-                  "pricingType": "A String", # The pricing type for the deal/product.
-                  "currencyCode": "A String", # The currency code for the price.
-                  "amountMicros": 3.14, # The price value in micros.
-                },
-              },
-            ],
-            "privateAuctionId": "A String", # Id of the corresponding private auction.
-          },
-          "description": "A String", # Description for the proposed terms of the deal.
-        },
+        "lastUpdateTimeMs": "A String", # Time of last update in ms. since epoch (readonly)
+        "legacyOfferId": "A String", # Optional legacy offer id if this offer is a preferred deal offer.
+        "kind": "adexchangebuyer#product", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#product".
         "name": "A String", # The name for this product as set by the seller. (buyer-readonly)
         "syndicationProduct": "A String", # The syndication product associated with the deal. (readonly, except on create)
-        "flightEndTimeMs": "A String", # The proposed end time for the deal (ms since epoch) (buyer-readonly)
-        "labels": [ # Optional List of labels for the product (optional, buyer-readonly).
-          {
-            "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
-            "deprecatedMarketplaceDealParty": { # Information about the party that created the label.
-              "buyer": { # The buyer/seller associated with the deal. One of buyer/seller is specified for a deal-party.
-                "accountId": "A String", # Adx account id of the buyer.
-              },
-              "seller": { # The buyer/seller associated with the deal. One of buyer/seller is specified for a deal party.
-                "subAccountId": "A String", # Optional sub-account id for the seller.
-                "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
-              },
-            },
-            "label": "A String", # The label to use.
-            "accountId": "A String", # The accountId of the party that created the label.
-          },
-        ],
-        "seller": { # Information about the seller that created this product (readonly, except on create)
-          "subAccountId": "A String", # Optional sub-account id for the seller.
-          "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
-        },
-        "webPropertyCode": "A String",
-        "state": "A String", # The state of the product. (buyer-readonly)
-        "hasCreatorSignedOff": True or False, # If the creator has already signed off on the product, then the buyer can finalize the deal by accepting the product as is. When copying to a proposal, if any of the terms are changed, then auto_finalize is automatically set to false.
-        "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
         "flightStartTimeMs": "A String", # Inventory availability dates. (times are in ms since epoch) The granularity is generally in the order of seconds. (buyer-readonly)
         "creationTimeMs": "A String", # Creation time in ms. since epoch (readonly)
-        "lastUpdateTimeMs": "A String", # Time of last update in ms. since epoch (readonly)
-        "revisionNumber": "A String", # The revision number of the product. (readonly)
-        "productId": "A String", # The unique id for the product (readonly)
       },
     ],
   }</pre>
diff --git a/docs/dyn/adexchangebuyer_v1_4.proposals.html b/docs/dyn/adexchangebuyer_v1_4.proposals.html
index c1e5e09..974d218 100644
--- a/docs/dyn/adexchangebuyer_v1_4.proposals.html
+++ b/docs/dyn/adexchangebuyer_v1_4.proposals.html
@@ -87,6 +87,9 @@
   <code><a href="#search">search(pqlQuery=None)</a></code></p>
 <p class="firstline">Search for proposals using pql query</p>
 <p class="toc_element">
+  <code><a href="#setupcomplete">setupcomplete(proposalId)</a></code></p>
+<p class="firstline">Update the given proposal to indicate that setup has been completed.</p>
+<p class="toc_element">
   <code><a href="#update">update(proposalId, revisionNumber, updateAction, body)</a></code></p>
 <p class="firstline">Update the given proposal</p>
 <h3>Method Details</h3>
@@ -103,16 +106,6 @@
     { # Represents a proposal in the marketplace. A proposal is the unit of negotiation between a seller and a buyer and contains deals which are served. Each field in a proposal can have one of the following setting:
       #
       # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only the seller can set this field. (seller-readonly) - Only the buyer can set this field. (updatable) - The field is updatable at all times by either buyer or the seller.
-    "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
-    "proposalState": "A String", # The current state of the proposal. (readonly)
-    "name": "A String", # The name for the proposal (updatable)
-    "buyerPrivateData": { # Private data for buyer. (hidden from seller).
-      "referenceId": "A String",
-      "referencePayload": "A String",
-    },
-    "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
-      "accountId": "A String", # Adx account id of the buyer.
-    },
     "labels": [ # List of labels associated with the proposal. (readonly)
       {
         "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
@@ -129,30 +122,41 @@
         "accountId": "A String", # The accountId of the party that created the label.
       },
     ],
-    "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
-    "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
     "sellerContacts": [ # Optional contact information for the seller (buyer-readonly).
       {
         "email": "A String", # Email address of the contact.
         "name": "A String", # The name of the contact.
       },
     ],
-    "lastUpdaterRole": "A String",
-    "proposalId": "A String", # The unique id of the proposal. (readonly).
+    "negotiationId": "A String", # Optional negotiation id if this proposal is a preferred deal proposal.
     "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
     "revisionNumber": "A String", # The revision number for the proposal (readonly).
-    "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
-    "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
-    "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
-      "accountId": "A String", # Adx account id of the buyer.
-    },
-    "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
-    "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly)
+    "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
     "seller": { # Reference to the seller on the proposal. (readonly, except on create)
       "subAccountId": "A String", # Optional sub-account id for the seller.
       "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
     },
+    "proposalId": "A String", # The unique id of the proposal. (readonly).
+    "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
     "lastUpdaterOrCommentorRole": "A String", # The role of the last user that either updated the proposal or left a comment. (readonly)
+    "privateAuctionId": "A String", # Optional private auction id if this proposal is a private auction proposal.
+    "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
+    "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
+    "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
+      "accountId": "A String", # Adx account id of the buyer.
+    },
+    "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
+    "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
+    "proposalState": "A String", # The current state of the proposal. (readonly)
+    "name": "A String", # The name for the proposal (updatable)
+    "buyerPrivateData": { # Private data for buyer. (hidden from seller).
+      "referenceId": "A String",
+      "referencePayload": "A String",
+    },
+    "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
+      "accountId": "A String", # Adx account id of the buyer.
+    },
+    "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly, except via OrderSetupCompleted action)
     "buyerContacts": [ # Optional contact information fort the buyer. (seller-readonly)
       {
         "email": "A String", # Email address of the contact.
@@ -171,21 +175,11 @@
     The object takes the form of:
 
 {
-    "webPropertyCode": "A String",
+    "webPropertyCode": "A String", # Web property id of the seller creating these orders
     "proposals": [ # The list of proposals to create.
       { # Represents a proposal in the marketplace. A proposal is the unit of negotiation between a seller and a buyer and contains deals which are served. Each field in a proposal can have one of the following setting:
           #
           # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only the seller can set this field. (seller-readonly) - Only the buyer can set this field. (updatable) - The field is updatable at all times by either buyer or the seller.
-        "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
-        "proposalState": "A String", # The current state of the proposal. (readonly)
-        "name": "A String", # The name for the proposal (updatable)
-        "buyerPrivateData": { # Private data for buyer. (hidden from seller).
-          "referenceId": "A String",
-          "referencePayload": "A String",
-        },
-        "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
-          "accountId": "A String", # Adx account id of the buyer.
-        },
         "labels": [ # List of labels associated with the proposal. (readonly)
           {
             "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
@@ -202,30 +196,41 @@
             "accountId": "A String", # The accountId of the party that created the label.
           },
         ],
-        "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
-        "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
         "sellerContacts": [ # Optional contact information for the seller (buyer-readonly).
           {
             "email": "A String", # Email address of the contact.
             "name": "A String", # The name of the contact.
           },
         ],
-        "lastUpdaterRole": "A String",
-        "proposalId": "A String", # The unique id of the proposal. (readonly).
+        "negotiationId": "A String", # Optional negotiation id if this proposal is a preferred deal proposal.
         "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
         "revisionNumber": "A String", # The revision number for the proposal (readonly).
-        "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
-        "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
-        "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
-          "accountId": "A String", # Adx account id of the buyer.
-        },
-        "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
-        "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly)
+        "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
         "seller": { # Reference to the seller on the proposal. (readonly, except on create)
           "subAccountId": "A String", # Optional sub-account id for the seller.
           "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
         },
+        "proposalId": "A String", # The unique id of the proposal. (readonly).
+        "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
         "lastUpdaterOrCommentorRole": "A String", # The role of the last user that either updated the proposal or left a comment. (readonly)
+        "privateAuctionId": "A String", # Optional private auction id if this proposal is a private auction proposal.
+        "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
+        "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
+        "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
+          "accountId": "A String", # Adx account id of the buyer.
+        },
+        "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
+        "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
+        "proposalState": "A String", # The current state of the proposal. (readonly)
+        "name": "A String", # The name for the proposal (updatable)
+        "buyerPrivateData": { # Private data for buyer. (hidden from seller).
+          "referenceId": "A String",
+          "referencePayload": "A String",
+        },
+        "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
+          "accountId": "A String", # Adx account id of the buyer.
+        },
+        "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly, except via OrderSetupCompleted action)
         "buyerContacts": [ # Optional contact information fort the buyer. (seller-readonly)
           {
             "email": "A String", # Email address of the contact.
@@ -245,16 +250,6 @@
       { # Represents a proposal in the marketplace. A proposal is the unit of negotiation between a seller and a buyer and contains deals which are served. Each field in a proposal can have one of the following setting:
           #
           # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only the seller can set this field. (seller-readonly) - Only the buyer can set this field. (updatable) - The field is updatable at all times by either buyer or the seller.
-        "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
-        "proposalState": "A String", # The current state of the proposal. (readonly)
-        "name": "A String", # The name for the proposal (updatable)
-        "buyerPrivateData": { # Private data for buyer. (hidden from seller).
-          "referenceId": "A String",
-          "referencePayload": "A String",
-        },
-        "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
-          "accountId": "A String", # Adx account id of the buyer.
-        },
         "labels": [ # List of labels associated with the proposal. (readonly)
           {
             "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
@@ -271,30 +266,41 @@
             "accountId": "A String", # The accountId of the party that created the label.
           },
         ],
-        "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
-        "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
         "sellerContacts": [ # Optional contact information for the seller (buyer-readonly).
           {
             "email": "A String", # Email address of the contact.
             "name": "A String", # The name of the contact.
           },
         ],
-        "lastUpdaterRole": "A String",
-        "proposalId": "A String", # The unique id of the proposal. (readonly).
+        "negotiationId": "A String", # Optional negotiation id if this proposal is a preferred deal proposal.
         "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
         "revisionNumber": "A String", # The revision number for the proposal (readonly).
-        "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
-        "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
-        "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
-          "accountId": "A String", # Adx account id of the buyer.
-        },
-        "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
-        "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly)
+        "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
         "seller": { # Reference to the seller on the proposal. (readonly, except on create)
           "subAccountId": "A String", # Optional sub-account id for the seller.
           "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
         },
+        "proposalId": "A String", # The unique id of the proposal. (readonly).
+        "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
         "lastUpdaterOrCommentorRole": "A String", # The role of the last user that either updated the proposal or left a comment. (readonly)
+        "privateAuctionId": "A String", # Optional private auction id if this proposal is a private auction proposal.
+        "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
+        "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
+        "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
+          "accountId": "A String", # Adx account id of the buyer.
+        },
+        "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
+        "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
+        "proposalState": "A String", # The current state of the proposal. (readonly)
+        "name": "A String", # The name for the proposal (updatable)
+        "buyerPrivateData": { # Private data for buyer. (hidden from seller).
+          "referenceId": "A String",
+          "referencePayload": "A String",
+        },
+        "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
+          "accountId": "A String", # Adx account id of the buyer.
+        },
+        "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly, except via OrderSetupCompleted action)
         "buyerContacts": [ # Optional contact information fort the buyer. (seller-readonly)
           {
             "email": "A String", # Email address of the contact.
@@ -326,16 +332,6 @@
 { # Represents a proposal in the marketplace. A proposal is the unit of negotiation between a seller and a buyer and contains deals which are served. Each field in a proposal can have one of the following setting:
     # 
     # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only the seller can set this field. (seller-readonly) - Only the buyer can set this field. (updatable) - The field is updatable at all times by either buyer or the seller.
-  "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
-  "proposalState": "A String", # The current state of the proposal. (readonly)
-  "name": "A String", # The name for the proposal (updatable)
-  "buyerPrivateData": { # Private data for buyer. (hidden from seller).
-    "referenceId": "A String",
-    "referencePayload": "A String",
-  },
-  "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
-    "accountId": "A String", # Adx account id of the buyer.
-  },
   "labels": [ # List of labels associated with the proposal. (readonly)
     {
       "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
@@ -352,30 +348,41 @@
       "accountId": "A String", # The accountId of the party that created the label.
     },
   ],
-  "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
-  "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
   "sellerContacts": [ # Optional contact information for the seller (buyer-readonly).
     {
       "email": "A String", # Email address of the contact.
       "name": "A String", # The name of the contact.
     },
   ],
-  "lastUpdaterRole": "A String",
-  "proposalId": "A String", # The unique id of the proposal. (readonly).
+  "negotiationId": "A String", # Optional negotiation id if this proposal is a preferred deal proposal.
   "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
   "revisionNumber": "A String", # The revision number for the proposal (readonly).
-  "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
-  "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
-  "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
-    "accountId": "A String", # Adx account id of the buyer.
-  },
-  "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
-  "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly)
+  "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
   "seller": { # Reference to the seller on the proposal. (readonly, except on create)
     "subAccountId": "A String", # Optional sub-account id for the seller.
     "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
   },
+  "proposalId": "A String", # The unique id of the proposal. (readonly).
+  "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
   "lastUpdaterOrCommentorRole": "A String", # The role of the last user that either updated the proposal or left a comment. (readonly)
+  "privateAuctionId": "A String", # Optional private auction id if this proposal is a private auction proposal.
+  "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
+  "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
+  "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
+    "accountId": "A String", # Adx account id of the buyer.
+  },
+  "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
+  "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
+  "proposalState": "A String", # The current state of the proposal. (readonly)
+  "name": "A String", # The name for the proposal (updatable)
+  "buyerPrivateData": { # Private data for buyer. (hidden from seller).
+    "referenceId": "A String",
+    "referencePayload": "A String",
+  },
+  "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
+    "accountId": "A String", # Adx account id of the buyer.
+  },
+  "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly, except via OrderSetupCompleted action)
   "buyerContacts": [ # Optional contact information fort the buyer. (seller-readonly)
     {
       "email": "A String", # Email address of the contact.
@@ -391,16 +398,6 @@
     { # Represents a proposal in the marketplace. A proposal is the unit of negotiation between a seller and a buyer and contains deals which are served. Each field in a proposal can have one of the following setting:
       #
       # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only the seller can set this field. (seller-readonly) - Only the buyer can set this field. (updatable) - The field is updatable at all times by either buyer or the seller.
-    "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
-    "proposalState": "A String", # The current state of the proposal. (readonly)
-    "name": "A String", # The name for the proposal (updatable)
-    "buyerPrivateData": { # Private data for buyer. (hidden from seller).
-      "referenceId": "A String",
-      "referencePayload": "A String",
-    },
-    "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
-      "accountId": "A String", # Adx account id of the buyer.
-    },
     "labels": [ # List of labels associated with the proposal. (readonly)
       {
         "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
@@ -417,30 +414,41 @@
         "accountId": "A String", # The accountId of the party that created the label.
       },
     ],
-    "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
-    "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
     "sellerContacts": [ # Optional contact information for the seller (buyer-readonly).
       {
         "email": "A String", # Email address of the contact.
         "name": "A String", # The name of the contact.
       },
     ],
-    "lastUpdaterRole": "A String",
-    "proposalId": "A String", # The unique id of the proposal. (readonly).
+    "negotiationId": "A String", # Optional negotiation id if this proposal is a preferred deal proposal.
     "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
     "revisionNumber": "A String", # The revision number for the proposal (readonly).
-    "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
-    "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
-    "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
-      "accountId": "A String", # Adx account id of the buyer.
-    },
-    "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
-    "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly)
+    "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
     "seller": { # Reference to the seller on the proposal. (readonly, except on create)
       "subAccountId": "A String", # Optional sub-account id for the seller.
       "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
     },
+    "proposalId": "A String", # The unique id of the proposal. (readonly).
+    "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
     "lastUpdaterOrCommentorRole": "A String", # The role of the last user that either updated the proposal or left a comment. (readonly)
+    "privateAuctionId": "A String", # Optional private auction id if this proposal is a private auction proposal.
+    "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
+    "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
+    "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
+      "accountId": "A String", # Adx account id of the buyer.
+    },
+    "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
+    "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
+    "proposalState": "A String", # The current state of the proposal. (readonly)
+    "name": "A String", # The name for the proposal (updatable)
+    "buyerPrivateData": { # Private data for buyer. (hidden from seller).
+      "referenceId": "A String",
+      "referencePayload": "A String",
+    },
+    "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
+      "accountId": "A String", # Adx account id of the buyer.
+    },
+    "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly, except via OrderSetupCompleted action)
     "buyerContacts": [ # Optional contact information fort the buyer. (seller-readonly)
       {
         "email": "A String", # Email address of the contact.
@@ -465,16 +473,6 @@
       { # Represents a proposal in the marketplace. A proposal is the unit of negotiation between a seller and a buyer and contains deals which are served. Each field in a proposal can have one of the following setting:
           #
           # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only the seller can set this field. (seller-readonly) - Only the buyer can set this field. (updatable) - The field is updatable at all times by either buyer or the seller.
-        "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
-        "proposalState": "A String", # The current state of the proposal. (readonly)
-        "name": "A String", # The name for the proposal (updatable)
-        "buyerPrivateData": { # Private data for buyer. (hidden from seller).
-          "referenceId": "A String",
-          "referencePayload": "A String",
-        },
-        "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
-          "accountId": "A String", # Adx account id of the buyer.
-        },
         "labels": [ # List of labels associated with the proposal. (readonly)
           {
             "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
@@ -491,30 +489,41 @@
             "accountId": "A String", # The accountId of the party that created the label.
           },
         ],
-        "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
-        "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
         "sellerContacts": [ # Optional contact information for the seller (buyer-readonly).
           {
             "email": "A String", # Email address of the contact.
             "name": "A String", # The name of the contact.
           },
         ],
-        "lastUpdaterRole": "A String",
-        "proposalId": "A String", # The unique id of the proposal. (readonly).
+        "negotiationId": "A String", # Optional negotiation id if this proposal is a preferred deal proposal.
         "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
         "revisionNumber": "A String", # The revision number for the proposal (readonly).
-        "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
-        "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
-        "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
-          "accountId": "A String", # Adx account id of the buyer.
-        },
-        "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
-        "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly)
+        "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
         "seller": { # Reference to the seller on the proposal. (readonly, except on create)
           "subAccountId": "A String", # Optional sub-account id for the seller.
           "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
         },
+        "proposalId": "A String", # The unique id of the proposal. (readonly).
+        "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
         "lastUpdaterOrCommentorRole": "A String", # The role of the last user that either updated the proposal or left a comment. (readonly)
+        "privateAuctionId": "A String", # Optional private auction id if this proposal is a private auction proposal.
+        "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
+        "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
+        "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
+          "accountId": "A String", # Adx account id of the buyer.
+        },
+        "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
+        "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
+        "proposalState": "A String", # The current state of the proposal. (readonly)
+        "name": "A String", # The name for the proposal (updatable)
+        "buyerPrivateData": { # Private data for buyer. (hidden from seller).
+          "referenceId": "A String",
+          "referencePayload": "A String",
+        },
+        "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
+          "accountId": "A String", # Adx account id of the buyer.
+        },
+        "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly, except via OrderSetupCompleted action)
         "buyerContacts": [ # Optional contact information fort the buyer. (seller-readonly)
           {
             "email": "A String", # Email address of the contact.
@@ -527,6 +536,15 @@
 </div>
 
 <div class="method">
+    <code class="details" id="setupcomplete">setupcomplete(proposalId)</code>
+  <pre>Update the given proposal to indicate that setup has been completed.
+
+Args:
+  proposalId: string, The proposal id for which the setup is complete (required)
+</pre>
+</div>
+
+<div class="method">
     <code class="details" id="update">update(proposalId, revisionNumber, updateAction, body)</code>
   <pre>Update the given proposal
 
@@ -546,16 +564,6 @@
 { # Represents a proposal in the marketplace. A proposal is the unit of negotiation between a seller and a buyer and contains deals which are served. Each field in a proposal can have one of the following setting:
     # 
     # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only the seller can set this field. (seller-readonly) - Only the buyer can set this field. (updatable) - The field is updatable at all times by either buyer or the seller.
-  "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
-  "proposalState": "A String", # The current state of the proposal. (readonly)
-  "name": "A String", # The name for the proposal (updatable)
-  "buyerPrivateData": { # Private data for buyer. (hidden from seller).
-    "referenceId": "A String",
-    "referencePayload": "A String",
-  },
-  "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
-    "accountId": "A String", # Adx account id of the buyer.
-  },
   "labels": [ # List of labels associated with the proposal. (readonly)
     {
       "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
@@ -572,30 +580,41 @@
       "accountId": "A String", # The accountId of the party that created the label.
     },
   ],
-  "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
-  "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
   "sellerContacts": [ # Optional contact information for the seller (buyer-readonly).
     {
       "email": "A String", # Email address of the contact.
       "name": "A String", # The name of the contact.
     },
   ],
-  "lastUpdaterRole": "A String",
-  "proposalId": "A String", # The unique id of the proposal. (readonly).
+  "negotiationId": "A String", # Optional negotiation id if this proposal is a preferred deal proposal.
   "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
   "revisionNumber": "A String", # The revision number for the proposal (readonly).
-  "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
-  "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
-  "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
-    "accountId": "A String", # Adx account id of the buyer.
-  },
-  "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
-  "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly)
+  "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
   "seller": { # Reference to the seller on the proposal. (readonly, except on create)
     "subAccountId": "A String", # Optional sub-account id for the seller.
     "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
   },
+  "proposalId": "A String", # The unique id of the proposal. (readonly).
+  "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
   "lastUpdaterOrCommentorRole": "A String", # The role of the last user that either updated the proposal or left a comment. (readonly)
+  "privateAuctionId": "A String", # Optional private auction id if this proposal is a private auction proposal.
+  "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
+  "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
+  "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
+    "accountId": "A String", # Adx account id of the buyer.
+  },
+  "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
+  "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
+  "proposalState": "A String", # The current state of the proposal. (readonly)
+  "name": "A String", # The name for the proposal (updatable)
+  "buyerPrivateData": { # Private data for buyer. (hidden from seller).
+    "referenceId": "A String",
+    "referencePayload": "A String",
+  },
+  "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
+    "accountId": "A String", # Adx account id of the buyer.
+  },
+  "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly, except via OrderSetupCompleted action)
   "buyerContacts": [ # Optional contact information fort the buyer. (seller-readonly)
     {
       "email": "A String", # Email address of the contact.
@@ -611,16 +630,6 @@
     { # Represents a proposal in the marketplace. A proposal is the unit of negotiation between a seller and a buyer and contains deals which are served. Each field in a proposal can have one of the following setting:
       #
       # (readonly) - It is an error to try and set this field. (buyer-readonly) - Only the seller can set this field. (seller-readonly) - Only the buyer can set this field. (updatable) - The field is updatable at all times by either buyer or the seller.
-    "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
-    "proposalState": "A String", # The current state of the proposal. (readonly)
-    "name": "A String", # The name for the proposal (updatable)
-    "buyerPrivateData": { # Private data for buyer. (hidden from seller).
-      "referenceId": "A String",
-      "referencePayload": "A String",
-    },
-    "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
-      "accountId": "A String", # Adx account id of the buyer.
-    },
     "labels": [ # List of labels associated with the proposal. (readonly)
       {
         "createTimeMs": "A String", # The creation time (in ms since epoch) for the label.
@@ -637,30 +646,41 @@
         "accountId": "A String", # The accountId of the party that created the label.
       },
     ],
-    "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
-    "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
     "sellerContacts": [ # Optional contact information for the seller (buyer-readonly).
       {
         "email": "A String", # Email address of the contact.
         "name": "A String", # The name of the contact.
       },
     ],
-    "lastUpdaterRole": "A String",
-    "proposalId": "A String", # The unique id of the proposal. (readonly).
+    "negotiationId": "A String", # Optional negotiation id if this proposal is a preferred deal proposal.
     "inventorySource": "A String", # What exchange will provide this inventory (readonly, except on create).
     "revisionNumber": "A String", # The revision number for the proposal (readonly).
-    "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
-    "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
-    "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
-      "accountId": "A String", # Adx account id of the buyer.
-    },
-    "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
-    "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly)
+    "revisionTimeMs": "A String", # The time (ms since epoch) when the proposal was last revised (readonly).
     "seller": { # Reference to the seller on the proposal. (readonly, except on create)
       "subAccountId": "A String", # Optional sub-account id for the seller.
       "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
     },
+    "proposalId": "A String", # The unique id of the proposal. (readonly).
+    "isRenegotiating": True or False, # True if the proposal is being renegotiated (readonly).
     "lastUpdaterOrCommentorRole": "A String", # The role of the last user that either updated the proposal or left a comment. (readonly)
+    "privateAuctionId": "A String", # Optional private auction id if this proposal is a private auction proposal.
+    "originatorRole": "A String", # Indicates whether the buyer/seller created the proposal.(readonly)
+    "hasSellerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (buyer-readonly)
+    "buyer": { # Reference to the buyer on the proposal. (readonly, except on create)
+      "accountId": "A String", # Adx account id of the buyer.
+    },
+    "hasBuyerSignedOff": True or False, # When an proposal is in an accepted state, indicates whether the buyer has signed off Once both sides have signed off on a deal, the proposal can be finalized by the seller. (seller-readonly)
+    "kind": "adexchangebuyer#proposal", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#proposal".
+    "proposalState": "A String", # The current state of the proposal. (readonly)
+    "name": "A String", # The name for the proposal (updatable)
+    "buyerPrivateData": { # Private data for buyer. (hidden from seller).
+      "referenceId": "A String",
+      "referencePayload": "A String",
+    },
+    "billedBuyer": { # Reference to the buyer that will get billed for this proposal. (readonly)
+      "accountId": "A String", # Adx account id of the buyer.
+    },
+    "isSetupComplete": True or False, # True, if the buyside inventory setup is complete for this proposal. (readonly, except via OrderSetupCompleted action)
     "buyerContacts": [ # Optional contact information fort the buyer. (seller-readonly)
       {
         "email": "A String", # Email address of the contact.
diff --git a/docs/dyn/adexchangebuyer_v1_4.pubprofiles.html b/docs/dyn/adexchangebuyer_v1_4.pubprofiles.html
new file mode 100644
index 0000000..e4271c0
--- /dev/null
+++ b/docs/dyn/adexchangebuyer_v1_4.pubprofiles.html
@@ -0,0 +1,143 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="adexchangebuyer_v1_4.html">Ad Exchange Buyer API</a> . <a href="adexchangebuyer_v1_4.pubprofiles.html">pubprofiles</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(accountId)</a></code></p>
+<p class="firstline">Gets the requested publisher profile(s) by publisher accountId.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(accountId)</code>
+  <pre>Gets the requested publisher profile(s) by publisher accountId.
+
+Args:
+  accountId: integer, The accountId of the publisher to get profiles for. (required)
+
+Returns:
+  An object of the form:
+
+    {
+    "profiles": [ # Profiles for the requested publisher
+      {
+        "googlePlusLink": "A String", # Link to publisher's Google+ page.
+        "mediaKitLink": "A String", # The url for additional marketing and sales materials.
+        "publisherProvidedForecast": { # This message carries publisher provided forecasting information. # Publisher provided forecasting information.
+          "weeklyImpressions": "A String", # Publisher provided weekly impressions.
+          "dimensions": [ # Publisher provided dimensions. E.g. geo, sizes etc...
+            { # This message carries publisher provided breakdown. E.g. {dimension_type: 'COUNTRY', [{dimension_value: {id: 1, name: 'US'}}, {dimension_value: {id: 2, name: 'UK'}}]}
+              "dimensionType": "A String",
+              "dimensionValues": [
+                { # Value of the dimension.
+                  "id": 42, # Id of the dimension.
+                  "name": "A String", # Name of the dimension mainly for debugging purposes.
+                },
+              ],
+            },
+          ],
+          "weeklyUniques": "A String", # Publisher provided weekly uniques.
+        },
+        "overview": "A String", # Publisher provided overview.
+        "buyerPitchStatement": "A String", # A pitch statement for the buyer
+        "isParent": True or False, # True, if this is the parent profile, which represents all domains owned by the publisher.
+        "topHeadlines": [ # Publisher provided key metrics and rankings.
+          "A String",
+        ],
+        "publisherProfileId": "A String", # Unique Id for publisher profile.
+        "accountId": "A String", # The account id of the seller.
+        "programmaticContact": "A String", # Programmatic contact for the publisher profile.
+        "rateCardInfoLink": "A String", # Link to publisher rate card
+        "seller": { # Seller of the publisher profile.
+          "subAccountId": "A String", # Optional sub-account id for the seller.
+          "accountId": "A String", # The unique id for the seller. The seller fills in this field. The seller account id is then available to buyer in the product.
+        },
+        "directContact": "A String", # Direct contact for the publisher profile.
+        "samplePageLink": "A String", # Link for a sample content page.
+        "state": "A String", # State of the publisher profile.
+        "exchange": "A String", # Exchange where this publisher profile is from. E.g. AdX, Rubicon etc...
+        "kind": "adexchangebuyer#publisherProfileApiProto", # Identifies what kind of resource this is. Value: the fixed string "adexchangebuyer#publisherProfileApiProto".
+        "name": "A String",
+        "publisherDomains": [ # The list of domains represented in this publisher profile. Empty if this is a parent profile.
+          "A String",
+        ],
+        "isPublished": True or False, # True, if this profile is published. Deprecated for state.
+        "audience": "A String", # Publisher provided info on its audience.
+        "logoUrl": "A String", # The url to the logo for the publisher.
+        "profileId": 42, # The pair of (seller.account_id, profile_id) uniquely identifies a publisher profile for a given publisher.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/analytics_v3.management.accountSummaries.html b/docs/dyn/analytics_v3.management.accountSummaries.html
index 2114c3f..f01e419 100644
--- a/docs/dyn/analytics_v3.management.accountSummaries.html
+++ b/docs/dyn/analytics_v3.management.accountSummaries.html
@@ -94,6 +94,7 @@
     "kind": "analytics#accountSummaries", # Collection type.
     "items": [ # A list of AccountSummaries.
       { # JSON template for an Analytics AccountSummary. An AccountSummary is a lightweight tree comprised of properties/profiles.
+        "starred": True or False, # Indicates whether this account is starred or not.
         "kind": "analytics#accountSummary", # Resource type for Analytics AccountSummary.
         "webProperties": [ # List of web properties under this account.
           { # JSON template for an Analytics WebPropertySummary. WebPropertySummary returns basic information (i.e., summary) for a web property.
@@ -102,6 +103,7 @@
             "level": "A String", # Level for this web property. Possible values are STANDARD or PREMIUM.
             "profiles": [ # List of profiles under this web property.
               { # JSON template for an Analytics ProfileSummary. ProfileSummary returns basic information (i.e., summary) for a profile.
+                "starred": True or False, # Indicates whether this view (profile) is starred or not.
                 "kind": "analytics#profileSummary", # Resource type for Analytics ProfileSummary.
                 "type": "A String", # View (Profile) type. Supported types: WEB or APP.
                 "id": "A String", # View (profile) ID.
@@ -110,6 +112,7 @@
             ],
             "websiteUrl": "A String", # Website url for this web property.
             "internalWebPropertyId": "A String", # Internal ID for this web property.
+            "starred": True or False, # Indicates whether this web property is starred or not.
             "id": "A String", # Web property ID of the form UA-XXXXX-YY.
           },
         ],
diff --git a/docs/dyn/analytics_v3.management.accounts.html b/docs/dyn/analytics_v3.management.accounts.html
index f3dca44..a005cc2 100644
--- a/docs/dyn/analytics_v3.management.accounts.html
+++ b/docs/dyn/analytics_v3.management.accounts.html
@@ -102,6 +102,7 @@
           "href": "A String", # Link to the list of web properties for this account.
           "type": "analytics#webproperties", # Type of the child link. Its value is "analytics#webproperties".
         },
+        "starred": True or False, # Indicates whether this account is starred or not.
         "id": "A String", # Account ID.
         "selfLink": "A String", # Link for this account.
         "permissions": { # Permissions the user has for this account.
diff --git a/docs/dyn/analytics_v3.management.goals.html b/docs/dyn/analytics_v3.management.goals.html
index 249639d..35fa360 100644
--- a/docs/dyn/analytics_v3.management.goals.html
+++ b/docs/dyn/analytics_v3.management.goals.html
@@ -85,10 +85,10 @@
 <p class="firstline">Lists goals to which the user has access.</p>
 <p class="toc_element">
   <code><a href="#patch">patch(accountId, webPropertyId, profileId, goalId, body)</a></code></p>
-<p class="firstline">Updates an existing view (profile). This method supports patch semantics.</p>
+<p class="firstline">Updates an existing goal. This method supports patch semantics.</p>
 <p class="toc_element">
   <code><a href="#update">update(accountId, webPropertyId, profileId, goalId, body)</a></code></p>
-<p class="firstline">Updates an existing view (profile).</p>
+<p class="firstline">Updates an existing goal.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="get">get(accountId, webPropertyId, profileId, goalId)</code>
@@ -360,7 +360,7 @@
 
 <div class="method">
     <code class="details" id="patch">patch(accountId, webPropertyId, profileId, goalId, body)</code>
-  <pre>Updates an existing view (profile). This method supports patch semantics.
+  <pre>Updates an existing goal. This method supports patch semantics.
 
 Args:
   accountId: string, Account ID to update the goal. (required)
@@ -483,7 +483,7 @@
 
 <div class="method">
     <code class="details" id="update">update(accountId, webPropertyId, profileId, goalId, body)</code>
-  <pre>Updates an existing view (profile).
+  <pre>Updates an existing goal.
 
 Args:
   accountId: string, Account ID to update the goal. (required)
diff --git a/docs/dyn/analytics_v3.management.profiles.html b/docs/dyn/analytics_v3.management.profiles.html
index daf686f..be50130 100644
--- a/docs/dyn/analytics_v3.management.profiles.html
+++ b/docs/dyn/analytics_v3.management.profiles.html
@@ -109,9 +109,9 @@
   <pre>Gets a view (profile) to which the user has access.
 
 Args:
-  accountId: string, Account ID to retrieve the goal for. (required)
-  webPropertyId: string, Web property ID to retrieve the goal for. (required)
-  profileId: string, View (Profile) ID to retrieve the goal for. (required)
+  accountId: string, Account ID to retrieve the view (profile) for. (required)
+  webPropertyId: string, Web property ID to retrieve the view (profile) for. (required)
+  profileId: string, View (Profile) ID to retrieve the view (profile) for. (required)
 
 Returns:
   An object of the form:
@@ -136,6 +136,10 @@
         "type": "analytics#goals", # Value is "analytics#goals".
       },
       "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+      "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+        "href": "A String", # Link to the web property to which this view (profile) belongs.
+        "type": "analytics#webproperty", # Value is "analytics#webproperty".
+      },
       "permissions": { # Permissions the user has for this view (profile).
         "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
           "A String",
@@ -148,10 +152,7 @@
       "created": "A String", # Time this view (profile) was created.
       "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
       "websiteUrl": "A String", # Website URL for this view (profile).
-      "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-        "href": "A String", # Link to the web property to which this view (profile) belongs.
-        "type": "analytics#webproperty", # Value is "analytics#webproperty".
-      },
+      "starred": True or False, # Indicates whether this view (profile) is starred or not.
       "selfLink": "A String", # Link for this view (profile).
     }</pre>
 </div>
@@ -186,6 +187,10 @@
       "type": "analytics#goals", # Value is "analytics#goals".
     },
     "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+    "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+      "href": "A String", # Link to the web property to which this view (profile) belongs.
+      "type": "analytics#webproperty", # Value is "analytics#webproperty".
+    },
     "permissions": { # Permissions the user has for this view (profile).
       "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
         "A String",
@@ -198,10 +203,7 @@
     "created": "A String", # Time this view (profile) was created.
     "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
     "websiteUrl": "A String", # Website URL for this view (profile).
-    "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-      "href": "A String", # Link to the web property to which this view (profile) belongs.
-      "type": "analytics#webproperty", # Value is "analytics#webproperty".
-    },
+    "starred": True or False, # Indicates whether this view (profile) is starred or not.
     "selfLink": "A String", # Link for this view (profile).
   }
 
@@ -229,6 +231,10 @@
         "type": "analytics#goals", # Value is "analytics#goals".
       },
       "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+      "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+        "href": "A String", # Link to the web property to which this view (profile) belongs.
+        "type": "analytics#webproperty", # Value is "analytics#webproperty".
+      },
       "permissions": { # Permissions the user has for this view (profile).
         "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
           "A String",
@@ -241,10 +247,7 @@
       "created": "A String", # Time this view (profile) was created.
       "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
       "websiteUrl": "A String", # Website URL for this view (profile).
-      "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-        "href": "A String", # Link to the web property to which this view (profile) belongs.
-        "type": "analytics#webproperty", # Value is "analytics#webproperty".
-      },
+      "starred": True or False, # Indicates whether this view (profile) is starred or not.
       "selfLink": "A String", # Link for this view (profile).
     }</pre>
 </div>
@@ -286,6 +289,10 @@
             "type": "analytics#goals", # Value is "analytics#goals".
           },
           "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+          "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+            "href": "A String", # Link to the web property to which this view (profile) belongs.
+            "type": "analytics#webproperty", # Value is "analytics#webproperty".
+          },
           "permissions": { # Permissions the user has for this view (profile).
             "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
               "A String",
@@ -298,10 +305,7 @@
           "created": "A String", # Time this view (profile) was created.
           "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
           "websiteUrl": "A String", # Website URL for this view (profile).
-          "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-            "href": "A String", # Link to the web property to which this view (profile) belongs.
-            "type": "analytics#webproperty", # Value is "analytics#webproperty".
-          },
+          "starred": True or False, # Indicates whether this view (profile) is starred or not.
           "selfLink": "A String", # Link for this view (profile).
         },
     ],
@@ -344,6 +348,10 @@
       "type": "analytics#goals", # Value is "analytics#goals".
     },
     "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+    "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+      "href": "A String", # Link to the web property to which this view (profile) belongs.
+      "type": "analytics#webproperty", # Value is "analytics#webproperty".
+    },
     "permissions": { # Permissions the user has for this view (profile).
       "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
         "A String",
@@ -356,10 +364,7 @@
     "created": "A String", # Time this view (profile) was created.
     "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
     "websiteUrl": "A String", # Website URL for this view (profile).
-    "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-      "href": "A String", # Link to the web property to which this view (profile) belongs.
-      "type": "analytics#webproperty", # Value is "analytics#webproperty".
-    },
+    "starred": True or False, # Indicates whether this view (profile) is starred or not.
     "selfLink": "A String", # Link for this view (profile).
   }
 
@@ -387,6 +392,10 @@
         "type": "analytics#goals", # Value is "analytics#goals".
       },
       "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+      "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+        "href": "A String", # Link to the web property to which this view (profile) belongs.
+        "type": "analytics#webproperty", # Value is "analytics#webproperty".
+      },
       "permissions": { # Permissions the user has for this view (profile).
         "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
           "A String",
@@ -399,10 +408,7 @@
       "created": "A String", # Time this view (profile) was created.
       "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
       "websiteUrl": "A String", # Website URL for this view (profile).
-      "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-        "href": "A String", # Link to the web property to which this view (profile) belongs.
-        "type": "analytics#webproperty", # Value is "analytics#webproperty".
-      },
+      "starred": True or False, # Indicates whether this view (profile) is starred or not.
       "selfLink": "A String", # Link for this view (profile).
     }</pre>
 </div>
@@ -438,6 +444,10 @@
       "type": "analytics#goals", # Value is "analytics#goals".
     },
     "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+    "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+      "href": "A String", # Link to the web property to which this view (profile) belongs.
+      "type": "analytics#webproperty", # Value is "analytics#webproperty".
+    },
     "permissions": { # Permissions the user has for this view (profile).
       "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
         "A String",
@@ -450,10 +460,7 @@
     "created": "A String", # Time this view (profile) was created.
     "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
     "websiteUrl": "A String", # Website URL for this view (profile).
-    "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-      "href": "A String", # Link to the web property to which this view (profile) belongs.
-      "type": "analytics#webproperty", # Value is "analytics#webproperty".
-    },
+    "starred": True or False, # Indicates whether this view (profile) is starred or not.
     "selfLink": "A String", # Link for this view (profile).
   }
 
@@ -481,6 +488,10 @@
         "type": "analytics#goals", # Value is "analytics#goals".
       },
       "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+      "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+        "href": "A String", # Link to the web property to which this view (profile) belongs.
+        "type": "analytics#webproperty", # Value is "analytics#webproperty".
+      },
       "permissions": { # Permissions the user has for this view (profile).
         "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
           "A String",
@@ -493,10 +504,7 @@
       "created": "A String", # Time this view (profile) was created.
       "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
       "websiteUrl": "A String", # Website URL for this view (profile).
-      "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-        "href": "A String", # Link to the web property to which this view (profile) belongs.
-        "type": "analytics#webproperty", # Value is "analytics#webproperty".
-      },
+      "starred": True or False, # Indicates whether this view (profile) is starred or not.
       "selfLink": "A String", # Link for this view (profile).
     }</pre>
 </div>
diff --git a/docs/dyn/analytics_v3.management.webproperties.html b/docs/dyn/analytics_v3.management.webproperties.html
index a1a5f85..e5c7eb7 100644
--- a/docs/dyn/analytics_v3.management.webproperties.html
+++ b/docs/dyn/analytics_v3.management.webproperties.html
@@ -116,6 +116,7 @@
         "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
       },
       "industryVertical": "A String", # The industry vertical/category selected for this web property.
+      "starred": True or False, # Indicates whether this web property is starred or not.
       "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
         "href": "A String", # Link to the account for this web property.
         "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
@@ -155,6 +156,7 @@
       "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
     },
     "industryVertical": "A String", # The industry vertical/category selected for this web property.
+    "starred": True or False, # Indicates whether this web property is starred or not.
     "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
       "href": "A String", # Link to the account for this web property.
       "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
@@ -188,6 +190,7 @@
         "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
       },
       "industryVertical": "A String", # The industry vertical/category selected for this web property.
+      "starred": True or False, # Indicates whether this web property is starred or not.
       "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
         "href": "A String", # Link to the account for this web property.
         "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
@@ -234,6 +237,7 @@
             "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
           },
           "industryVertical": "A String", # The industry vertical/category selected for this web property.
+          "starred": True or False, # Indicates whether this web property is starred or not.
           "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
             "href": "A String", # Link to the account for this web property.
             "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
@@ -281,6 +285,7 @@
       "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
     },
     "industryVertical": "A String", # The industry vertical/category selected for this web property.
+    "starred": True or False, # Indicates whether this web property is starred or not.
     "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
       "href": "A String", # Link to the account for this web property.
       "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
@@ -314,6 +319,7 @@
         "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
       },
       "industryVertical": "A String", # The industry vertical/category selected for this web property.
+      "starred": True or False, # Indicates whether this web property is starred or not.
       "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
         "href": "A String", # Link to the account for this web property.
         "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
@@ -354,6 +360,7 @@
       "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
     },
     "industryVertical": "A String", # The industry vertical/category selected for this web property.
+    "starred": True or False, # Indicates whether this web property is starred or not.
     "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
       "href": "A String", # Link to the account for this web property.
       "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
@@ -387,6 +394,7 @@
         "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
       },
       "industryVertical": "A String", # The industry vertical/category selected for this web property.
+      "starred": True or False, # Indicates whether this web property is starred or not.
       "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
         "href": "A String", # Link to the account for this web property.
         "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
diff --git a/docs/dyn/analytics_v3.provisioning.html b/docs/dyn/analytics_v3.provisioning.html
index e16a600..542940d 100644
--- a/docs/dyn/analytics_v3.provisioning.html
+++ b/docs/dyn/analytics_v3.provisioning.html
@@ -107,6 +107,10 @@
           "type": "analytics#goals", # Value is "analytics#goals".
         },
         "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+        "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+          "href": "A String", # Link to the web property to which this view (profile) belongs.
+          "type": "analytics#webproperty", # Value is "analytics#webproperty".
+        },
         "permissions": { # Permissions the user has for this view (profile).
           "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
             "A String",
@@ -119,10 +123,7 @@
         "created": "A String", # Time this view (profile) was created.
         "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
         "websiteUrl": "A String", # Website URL for this view (profile).
-        "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-          "href": "A String", # Link to the web property to which this view (profile) belongs.
-          "type": "analytics#webproperty", # Value is "analytics#webproperty".
-        },
+        "starred": True or False, # Indicates whether this view (profile) is starred or not.
         "selfLink": "A String", # Link for this view (profile).
       },
     "account": { # JSON template for Analytics account entry. # Account for this ticket.
@@ -134,6 +135,7 @@
         "href": "A String", # Link to the list of web properties for this account.
         "type": "analytics#webproperties", # Type of the child link. Its value is "analytics#webproperties".
       },
+      "starred": True or False, # Indicates whether this account is starred or not.
       "id": "A String", # Account ID.
       "selfLink": "A String", # Link for this account.
       "permissions": { # Permissions the user has for this account.
@@ -157,6 +159,7 @@
           "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
         },
         "industryVertical": "A String", # The industry vertical/category selected for this web property.
+        "starred": True or False, # Indicates whether this web property is starred or not.
         "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
           "href": "A String", # Link to the account for this web property.
           "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
@@ -200,6 +203,10 @@
             "type": "analytics#goals", # Value is "analytics#goals".
           },
           "enhancedECommerceTracking": True or False, # Indicates whether enhanced ecommerce tracking is enabled for this view (profile). This property can only be enabled if ecommerce tracking is enabled.
+          "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
+            "href": "A String", # Link to the web property to which this view (profile) belongs.
+            "type": "analytics#webproperty", # Value is "analytics#webproperty".
+          },
           "permissions": { # Permissions the user has for this view (profile).
             "effective": [ # All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.
               "A String",
@@ -212,10 +219,7 @@
           "created": "A String", # Time this view (profile) was created.
           "siteSearchQueryParameters": "A String", # The site search query parameters for this view (profile).
           "websiteUrl": "A String", # Website URL for this view (profile).
-          "parentLink": { # Parent link for this view (profile). Points to the web property to which this view (profile) belongs.
-            "href": "A String", # Link to the web property to which this view (profile) belongs.
-            "type": "analytics#webproperty", # Value is "analytics#webproperty".
-          },
+          "starred": True or False, # Indicates whether this view (profile) is starred or not.
           "selfLink": "A String", # Link for this view (profile).
         },
       "account": { # JSON template for Analytics account entry. # Account for this ticket.
@@ -227,6 +231,7 @@
           "href": "A String", # Link to the list of web properties for this account.
           "type": "analytics#webproperties", # Type of the child link. Its value is "analytics#webproperties".
         },
+        "starred": True or False, # Indicates whether this account is starred or not.
         "id": "A String", # Account ID.
         "selfLink": "A String", # Link for this account.
         "permissions": { # Permissions the user has for this account.
@@ -250,6 +255,7 @@
             "type": "analytics#profiles", # Type of the parent link. Its value is "analytics#profiles".
           },
           "industryVertical": "A String", # The industry vertical/category selected for this web property.
+          "starred": True or False, # Indicates whether this web property is starred or not.
           "parentLink": { # Parent link for this web property. Points to the account to which this web property belongs.
             "href": "A String", # Link to the account for this web property.
             "type": "analytics#account", # Type of the parent link. Its value is "analytics#account".
diff --git a/docs/dyn/analyticsreporting_v4.html b/docs/dyn/analyticsreporting_v4.html
new file mode 100644
index 0000000..46eb435
--- /dev/null
+++ b/docs/dyn/analyticsreporting_v4.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="analyticsreporting_v4.html">Google Analytics Reporting API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="analyticsreporting_v4.reports.html">reports()</a></code>
+</p>
+<p class="firstline">Returns the reports Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/analyticsreporting_v4.reports.html b/docs/dyn/analyticsreporting_v4.reports.html
new file mode 100644
index 0000000..780479c
--- /dev/null
+++ b/docs/dyn/analyticsreporting_v4.reports.html
@@ -0,0 +1,839 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="analyticsreporting_v4.html">Google Analytics Reporting API</a> . <a href="analyticsreporting_v4.reports.html">reports</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#batchGet">batchGet(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns the Analytics data.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="batchGet">batchGet(body, x__xgafv=None)</code>
+  <pre>Returns the Analytics data.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The batch request containing multiple report request.
+    "reportRequests": [ # Requests, each request will have a separate response.
+        # There can be a maximum of 5 requests. All requests should have the same
+        # `dateRange`, `viewId`, `segments`, `samplingLevel`, and `cohortGroup`.
+      { # The main request class which specifies the Reporting API request.
+        "pivots": [ # The pivot definitions.
+          { # The Pivot describes the pivot section in the request.
+              # The Pivot helps rearrange the information in the table for certain reports
+              # by pivoting your data on a second dimension.
+            "metrics": [ # Metrics to aggregate and return.
+              { # A metric in the request.
+                "alias": "A String", # An alias for the metric expression is an alternate name for the
+                    # expression. The alias can be used for filtering and sorting. This field
+                    # is optional and is useful if the expression is not a single metric but
+                    # a complex expression which cannot be used in filtering and sorting.
+                    # The alias is also used in the response column header.
+                "expression": "A String", # A metric expression in the request. An expression is constructed from one
+                    # or more metrics and numbers. Accepted operators include: Plus (+), Minus
+                    # (-), Negation (Unary -), Divided by (/), Multiplied by (*), Parenthesis,
+                    # Positive cardinal numbers (0-9), can include decimals and is limited to
+                    # 1024 characters. Example `ga:totalRefunds/ga:users`, in most cases the
+                    # metric expression is just a single metric name like `ga:users`.
+                    # Adding mixed `MetricType` (E.g., `CURRENCY` + `PERCENTAGE`) metrics
+                    # will result in unexpected results.
+                "formattingType": "A String", # Specifies how the metric expression should be formatted, for example
+                    # `INTEGER`.
+              },
+            ],
+            "startGroup": 42, # If k metrics were requested, then the response will contain some
+                # data-dependent multiple of k columns in the report.  E.g., if you pivoted
+                # on the dimension `ga:browser` then you'd get k columns for "Firefox", k
+                # columns for "IE", k columns for "Chrome", etc. The ordering of the groups
+                # of columns is determined by descending order of "total" for the first of
+                # the k values.  Ties are broken by lexicographic ordering of the first
+                # pivot dimension, then lexicographic ordering of the second pivot
+                # dimension, and so on.  E.g., if the totals for the first value for
+                # Firefox, IE, and Chrome were 8, 2, 8, respectively, the order of columns
+                # would be Chrome, Firefox, IE.
+                #
+                # The following let you choose which of the groups of k columns are
+                # included in the response.
+            "dimensions": [ # A list of dimensions to show as pivot columns.
+              { # A dimension in the request.
+                "name": "A String", # Name of the dimension to fetch, for example `ga:browser`.
+                "histogramBuckets": [ # If non-empty, we place dimension values into buckets after string to
+                    # int64. Dimension values that are not the string representation of an
+                    # integral value will be converted to zero.  The bucket values have to be in
+                    # increasing order.  Each bucket is closed on the lower end, and open on the
+                    # upper end. The "first" bucket includes all values less than the first
+                    # boundary, the "last" bucket includes all values up to infinity. Dimension
+                    # values that fall in a bucket get transformed to a new dimension value. For
+                    # example, if one gives a list of "0, 1, 3, 4, 7", then we return the
+                    # following buckets:
+                    #
+                    # - bucket #1: values < 0, dimension value "<0"
+                    # - bucket #2: values in [0,1), dimension value "0"
+                    # - bucket #3: values in [1,3), dimension value "1-2"
+                    # - bucket #4: values in [3,4), dimension value "3"
+                    # - bucket #5: values in [4,7), dimension value "4-6"
+                    # - bucket #6: values >= 7, dimension value "7+"
+                    #
+                    # NOTE: If you are applying histogram mutation on any dimension, and using
+                    # that dimension in sort, you will want to use the sort type
+                    # `HISTOGRAM_BUCKET` for that purpose. Without that the dimension values
+                    # will be sorted according to dictionary
+                    # (lexicographic) order. For example the ascending dictionary order is:
+                    #
+                    #    "<50", "1001+", "121-1000", "50-120"
+                    #
+                    # And the ascending `HISTOGRAM_BUCKET` order is:
+                    #
+                    #    "<50", "50-120", "121-1000", "1001+"
+                    #
+                    # The client has to explicitly request `"orderType": "HISTOGRAM_BUCKET"`
+                    # for a histogram-mutated dimension.
+                  "A String",
+                ],
+              },
+            ],
+            "dimensionFilterClauses": [ # DimensionFilterClauses are logically combined with an `AND` operator: only
+                # data that is included by all these DimensionFilterClauses contributes to
+                # the values in this pivot region. Dimension filters can be used to restrict
+                # the columns shown in the pivot region. For example if you have
+                # `ga:browser` as the requested dimension in the pivot region, and you
+                # specify key filters to restrict `ga:browser` to only "IE" or "Firefox",
+                # then only those two browsers would show up as columns.
+              { # A group of dimension filters. Set the operator value to specify how
+                  # the filters are logically combined.
+                "operator": "A String", # The operator for combining multiple dimension filters. If unspecified, it
+                    # is treated as an `OR`.
+                "filters": [ # The repeated set of filters. They are logically combined based on the
+                    # operator specified.
+                  { # Dimension filter specifies the filtering options on a dimension.
+                    "dimensionName": "A String", # The dimension to filter on. A DimensionFilter must contain a dimension.
+                    "operator": "A String", # How to match the dimension to the expression. The default is REGEXP.
+                    "expressions": [ # Strings or regular expression to match against. Only the first value of
+                        # the list is used for comparison unless the operator is `IN_LIST`.
+                        # If `IN_LIST` operator, then the entire list is used to filter the
+                        # dimensions as explained in the description of the `IN_LIST` operator.
+                      "A String",
+                    ],
+                    "not": True or False, # Logical `NOT` operator. If this boolean is set to true, then the matching
+                        # dimension values will be excluded in the report. The default is false.
+                    "caseSensitive": True or False, # Should the match be case sensitive? Default is false.
+                  },
+                ],
+              },
+            ],
+            "maxGroupCount": 42, # Specifies the maximum number of groups to return.
+                # The default value is 10, also the maximum value is 1,000.
+          },
+        ],
+        "hideTotals": True or False, # If set to true, hides the total of all metrics for all the matching rows,
+            # for every date range. The default false and will return the totals.
+        "metrics": [ # Metrics, the quantitative measurements, requested in the request.
+            # Requests must specify at least one metric.
+          { # A metric in the request.
+            "alias": "A String", # An alias for the metric expression is an alternate name for the
+                # expression. The alias can be used for filtering and sorting. This field
+                # is optional and is useful if the expression is not a single metric but
+                # a complex expression which cannot be used in filtering and sorting.
+                # The alias is also used in the response column header.
+            "expression": "A String", # A metric expression in the request. An expression is constructed from one
+                # or more metrics and numbers. Accepted operators include: Plus (+), Minus
+                # (-), Negation (Unary -), Divided by (/), Multiplied by (*), Parenthesis,
+                # Positive cardinal numbers (0-9), can include decimals and is limited to
+                # 1024 characters. Example `ga:totalRefunds/ga:users`, in most cases the
+                # metric expression is just a single metric name like `ga:users`.
+                # Adding mixed `MetricType` (E.g., `CURRENCY` + `PERCENTAGE`) metrics
+                # will result in unexpected results.
+            "formattingType": "A String", # Specifies how the metric expression should be formatted, for example
+                # `INTEGER`.
+          },
+        ],
+        "dimensions": [ # Dimensions requested in the request.
+          { # A dimension in the request.
+            "name": "A String", # Name of the dimension to fetch, for example `ga:browser`.
+            "histogramBuckets": [ # If non-empty, we place dimension values into buckets after string to
+                # int64. Dimension values that are not the string representation of an
+                # integral value will be converted to zero.  The bucket values have to be in
+                # increasing order.  Each bucket is closed on the lower end, and open on the
+                # upper end. The "first" bucket includes all values less than the first
+                # boundary, the "last" bucket includes all values up to infinity. Dimension
+                # values that fall in a bucket get transformed to a new dimension value. For
+                # example, if one gives a list of "0, 1, 3, 4, 7", then we return the
+                # following buckets:
+                #
+                # - bucket #1: values < 0, dimension value "<0"
+                # - bucket #2: values in [0,1), dimension value "0"
+                # - bucket #3: values in [1,3), dimension value "1-2"
+                # - bucket #4: values in [3,4), dimension value "3"
+                # - bucket #5: values in [4,7), dimension value "4-6"
+                # - bucket #6: values >= 7, dimension value "7+"
+                #
+                # NOTE: If you are applying histogram mutation on any dimension, and using
+                # that dimension in sort, you will want to use the sort type
+                # `HISTOGRAM_BUCKET` for that purpose. Without that the dimension values
+                # will be sorted according to dictionary
+                # (lexicographic) order. For example the ascending dictionary order is:
+                #
+                #    "<50", "1001+", "121-1000", "50-120"
+                #
+                # And the ascending `HISTOGRAM_BUCKET` order is:
+                #
+                #    "<50", "50-120", "121-1000", "1001+"
+                #
+                # The client has to explicitly request `"orderType": "HISTOGRAM_BUCKET"`
+                # for a histogram-mutated dimension.
+              "A String",
+            ],
+          },
+        ],
+        "dimensionFilterClauses": [ # The dimension filter clauses for filtering Dimension Values. They are
+            # logically combined with the `AND` operator. Note that filtering occurs
+            # before any dimensions are aggregated, so that the returned metrics
+            # represent the total for only the relevant dimensions.
+          { # A group of dimension filters. Set the operator value to specify how
+              # the filters are logically combined.
+            "operator": "A String", # The operator for combining multiple dimension filters. If unspecified, it
+                # is treated as an `OR`.
+            "filters": [ # The repeated set of filters. They are logically combined based on the
+                # operator specified.
+              { # Dimension filter specifies the filtering options on a dimension.
+                "dimensionName": "A String", # The dimension to filter on. A DimensionFilter must contain a dimension.
+                "operator": "A String", # How to match the dimension to the expression. The default is REGEXP.
+                "expressions": [ # Strings or regular expression to match against. Only the first value of
+                    # the list is used for comparison unless the operator is `IN_LIST`.
+                    # If `IN_LIST` operator, then the entire list is used to filter the
+                    # dimensions as explained in the description of the `IN_LIST` operator.
+                  "A String",
+                ],
+                "not": True or False, # Logical `NOT` operator. If this boolean is set to true, then the matching
+                    # dimension values will be excluded in the report. The default is false.
+                "caseSensitive": True or False, # Should the match be case sensitive? Default is false.
+              },
+            ],
+          },
+        ],
+        "includeEmptyRows": True or False, # If set to false, the response does not include rows if all the retrieved
+            # metrics are equal to zero. The default is false which will exclude these
+            # rows.
+        "filtersExpression": "A String", # Dimension or metric filters that restrict the data returned for your
+            # request. To use the `filtersExpression`, supply a dimension or metric on
+            # which to filter, followed by the filter expression. For example, the
+            # following expression selects `ga:browser` dimension which starts with
+            # Firefox; `ga:browser=~^Firefox`. For more information on dimensions
+            # and metric filters, see
+            # [Filters reference](https://developers.google.com/analytics/devguides/reporting/core/v3/reference#filters).
+        "segments": [ # Segment the data returned for the request. A segment definition helps look
+            # at a subset of the segment request. A request can contain up to four
+            # segments. All requests should have the same segment definitions. Requests
+            # with segments must have the `ga:segment` dimension.
+          { # The segment definition, if the report needs to be segmented.
+              # A Segment is a subset of the Analytics data. For example, of the entire
+              # set of users, one Segment might be users from a particular country or city.
+            "dynamicSegment": { # Dynamic segment definition for defining the segment within the request. # A dynamic segment definition in the request.
+                # A segment can select users, sessions or both.
+              "sessionSegment": { # SegmentDefinition defines the segment to be a set of SegmentFilters which # Session Segment to select sessions to include in the segment.
+                  # are combined together with a logical `AND` operation.
+                "segmentFilters": [ # A segment is defined by a set of segment filters which are combined
+                    # together with a logical `AND` operation.
+                  { # SegmentFilter defines the segment to be either a simple or a sequence
+                      # segment. A simple segment condition contains dimension and metric conditions
+                      # to select the sessions or users. A sequence segment condition can be used to
+                      # select users or sessions based on sequential conditions.
+                    "not": True or False, # If true, match the complement of simple or sequence segment.
+                        # For example, to match all visits not from "New York", we can define the
+                        # segment as follows:
+                        #
+                        #       "sessionSegment": {
+                        #         "segmentFilters": [{
+                        #           "simpleSegment" :{
+                        #             "orFiltersForSegment": [{
+                        #               "segmentFilterClauses":[{
+                        #                 "dimensionFilter": {
+                        #                   "dimensionName": "ga:city",
+                        #                   "expressions": ["New York"]
+                        #                 }
+                        #               }]
+                        #             }]
+                        #           },
+                        #           "not": "True"
+                        #         }]
+                        #       },
+                    "simpleSegment": { # A Simple segment conditions consist of one or more dimension/metric # A Simple segment conditions consist of one or more dimension/metric
+                        # conditions that can be combined
+                        # conditions that can be combined.
+                      "orFiltersForSegment": [ # A list of segment filters groups which are combined with logical `AND`
+                          # operator.
+                        { # A list of segment filters in the `OR` group are combined with the logical OR
+                            # operator.
+                          "segmentFilterClauses": [ # List of segment filters to be combined with a `OR` operator.
+                            { # Filter Clause to be used in a segment definition, can be wither a metric or
+                                # a dimension filter.
+                              "not": True or False, # Matches the complement (`!`) of the filter.
+                              "dimensionFilter": { # Dimension filter specifies the filtering options on a dimension. # Dimension Filter for the segment definition.
+                                "minComparisonValue": "A String", # Minimum comparison values for `BETWEEN` match type.
+                                "maxComparisonValue": "A String", # Maximum comparison values for `BETWEEN` match type.
+                                "dimensionName": "A String", # Name of the dimension for which the filter is being applied.
+                                "caseSensitive": True or False, # Should the match be case sensitive, ignored for `IN_LIST` operator.
+                                "operator": "A String", # The operator to use to match the dimension with the expressions.
+                                "expressions": [ # The list of expressions, only the first element is used for all operators
+                                  "A String",
+                                ],
+                              },
+                              "metricFilter": { # Metric filter to be used in a segment filter clause. # Metric Filter for the segment definition.
+                                "operator": "A String", # Specifies is the operation to perform to compare the metric. The default
+                                    # is `EQUAL`.
+                                "scope": "A String", # Scope for a metric defines the level at which that metric is defined.  The
+                                    # specified metric scope must be equal to or greater than its primary scope
+                                    # as defined in the data model. The primary scope is defined by if the
+                                    # segment is selecting users or sessions.
+                                "comparisonValue": "A String", # The value to compare against. If the operator is `BETWEEN`, this value is
+                                    # treated as minimum comparison value.
+                                "maxComparisonValue": "A String", # Max comparison value is only used for `BETWEEN` operator.
+                                "metricName": "A String", # The metric that will be filtered on. A `metricFilter` must contain a
+                                    # metric name.
+                              },
+                            },
+                          ],
+                        },
+                      ],
+                    },
+                    "sequenceSegment": { # Sequence conditions consist of one or more steps, where each step is defined # Sequence conditions consist of one or more steps, where each step is
+                        # defined by one or more dimension/metric conditions. Multiple steps can
+                        # be combined with special sequence operators.
+                        # by one or more dimension/metric conditions. Multiple steps can be combined
+                        # with special sequence operators.
+                      "firstStepShouldMatchFirstHit": True or False, # If set, first step condition must match the first hit of the visitor (in
+                          # the date range).
+                      "segmentSequenceSteps": [ # The list of steps in the sequence.
+                        { # A segment sequence definition.
+                          "matchType": "A String", # Specifies if the step immediately precedes or can be any time before the
+                              # next step.
+                          "orFiltersForSegment": [ # A sequence is specified with a list of Or grouped filters which are
+                              # combined with `AND` operator.
+                            { # A list of segment filters in the `OR` group are combined with the logical OR
+                                # operator.
+                              "segmentFilterClauses": [ # List of segment filters to be combined with a `OR` operator.
+                                { # Filter Clause to be used in a segment definition, can be wither a metric or
+                                    # a dimension filter.
+                                  "not": True or False, # Matches the complement (`!`) of the filter.
+                                  "dimensionFilter": { # Dimension filter specifies the filtering options on a dimension. # Dimension Filter for the segment definition.
+                                    "minComparisonValue": "A String", # Minimum comparison values for `BETWEEN` match type.
+                                    "maxComparisonValue": "A String", # Maximum comparison values for `BETWEEN` match type.
+                                    "dimensionName": "A String", # Name of the dimension for which the filter is being applied.
+                                    "caseSensitive": True or False, # Should the match be case sensitive, ignored for `IN_LIST` operator.
+                                    "operator": "A String", # The operator to use to match the dimension with the expressions.
+                                    "expressions": [ # The list of expressions, only the first element is used for all operators
+                                      "A String",
+                                    ],
+                                  },
+                                  "metricFilter": { # Metric filter to be used in a segment filter clause. # Metric Filter for the segment definition.
+                                    "operator": "A String", # Specifies is the operation to perform to compare the metric. The default
+                                        # is `EQUAL`.
+                                    "scope": "A String", # Scope for a metric defines the level at which that metric is defined.  The
+                                        # specified metric scope must be equal to or greater than its primary scope
+                                        # as defined in the data model. The primary scope is defined by if the
+                                        # segment is selecting users or sessions.
+                                    "comparisonValue": "A String", # The value to compare against. If the operator is `BETWEEN`, this value is
+                                        # treated as minimum comparison value.
+                                    "maxComparisonValue": "A String", # Max comparison value is only used for `BETWEEN` operator.
+                                    "metricName": "A String", # The metric that will be filtered on. A `metricFilter` must contain a
+                                        # metric name.
+                                  },
+                                },
+                              ],
+                            },
+                          ],
+                        },
+                      ],
+                    },
+                  },
+                ],
+              },
+              "name": "A String", # The name of the dynamic segment.
+              "userSegment": { # SegmentDefinition defines the segment to be a set of SegmentFilters which # User Segment to select users to include in the segment.
+                  # are combined together with a logical `AND` operation.
+                "segmentFilters": [ # A segment is defined by a set of segment filters which are combined
+                    # together with a logical `AND` operation.
+                  { # SegmentFilter defines the segment to be either a simple or a sequence
+                      # segment. A simple segment condition contains dimension and metric conditions
+                      # to select the sessions or users. A sequence segment condition can be used to
+                      # select users or sessions based on sequential conditions.
+                    "not": True or False, # If true, match the complement of simple or sequence segment.
+                        # For example, to match all visits not from "New York", we can define the
+                        # segment as follows:
+                        #
+                        #       "sessionSegment": {
+                        #         "segmentFilters": [{
+                        #           "simpleSegment" :{
+                        #             "orFiltersForSegment": [{
+                        #               "segmentFilterClauses":[{
+                        #                 "dimensionFilter": {
+                        #                   "dimensionName": "ga:city",
+                        #                   "expressions": ["New York"]
+                        #                 }
+                        #               }]
+                        #             }]
+                        #           },
+                        #           "not": "True"
+                        #         }]
+                        #       },
+                    "simpleSegment": { # A Simple segment conditions consist of one or more dimension/metric # A Simple segment conditions consist of one or more dimension/metric
+                        # conditions that can be combined
+                        # conditions that can be combined.
+                      "orFiltersForSegment": [ # A list of segment filters groups which are combined with logical `AND`
+                          # operator.
+                        { # A list of segment filters in the `OR` group are combined with the logical OR
+                            # operator.
+                          "segmentFilterClauses": [ # List of segment filters to be combined with a `OR` operator.
+                            { # Filter Clause to be used in a segment definition, can be wither a metric or
+                                # a dimension filter.
+                              "not": True or False, # Matches the complement (`!`) of the filter.
+                              "dimensionFilter": { # Dimension filter specifies the filtering options on a dimension. # Dimension Filter for the segment definition.
+                                "minComparisonValue": "A String", # Minimum comparison values for `BETWEEN` match type.
+                                "maxComparisonValue": "A String", # Maximum comparison values for `BETWEEN` match type.
+                                "dimensionName": "A String", # Name of the dimension for which the filter is being applied.
+                                "caseSensitive": True or False, # Should the match be case sensitive, ignored for `IN_LIST` operator.
+                                "operator": "A String", # The operator to use to match the dimension with the expressions.
+                                "expressions": [ # The list of expressions, only the first element is used for all operators
+                                  "A String",
+                                ],
+                              },
+                              "metricFilter": { # Metric filter to be used in a segment filter clause. # Metric Filter for the segment definition.
+                                "operator": "A String", # Specifies is the operation to perform to compare the metric. The default
+                                    # is `EQUAL`.
+                                "scope": "A String", # Scope for a metric defines the level at which that metric is defined.  The
+                                    # specified metric scope must be equal to or greater than its primary scope
+                                    # as defined in the data model. The primary scope is defined by if the
+                                    # segment is selecting users or sessions.
+                                "comparisonValue": "A String", # The value to compare against. If the operator is `BETWEEN`, this value is
+                                    # treated as minimum comparison value.
+                                "maxComparisonValue": "A String", # Max comparison value is only used for `BETWEEN` operator.
+                                "metricName": "A String", # The metric that will be filtered on. A `metricFilter` must contain a
+                                    # metric name.
+                              },
+                            },
+                          ],
+                        },
+                      ],
+                    },
+                    "sequenceSegment": { # Sequence conditions consist of one or more steps, where each step is defined # Sequence conditions consist of one or more steps, where each step is
+                        # defined by one or more dimension/metric conditions. Multiple steps can
+                        # be combined with special sequence operators.
+                        # by one or more dimension/metric conditions. Multiple steps can be combined
+                        # with special sequence operators.
+                      "firstStepShouldMatchFirstHit": True or False, # If set, first step condition must match the first hit of the visitor (in
+                          # the date range).
+                      "segmentSequenceSteps": [ # The list of steps in the sequence.
+                        { # A segment sequence definition.
+                          "matchType": "A String", # Specifies if the step immediately precedes or can be any time before the
+                              # next step.
+                          "orFiltersForSegment": [ # A sequence is specified with a list of Or grouped filters which are
+                              # combined with `AND` operator.
+                            { # A list of segment filters in the `OR` group are combined with the logical OR
+                                # operator.
+                              "segmentFilterClauses": [ # List of segment filters to be combined with a `OR` operator.
+                                { # Filter Clause to be used in a segment definition, can be wither a metric or
+                                    # a dimension filter.
+                                  "not": True or False, # Matches the complement (`!`) of the filter.
+                                  "dimensionFilter": { # Dimension filter specifies the filtering options on a dimension. # Dimension Filter for the segment definition.
+                                    "minComparisonValue": "A String", # Minimum comparison values for `BETWEEN` match type.
+                                    "maxComparisonValue": "A String", # Maximum comparison values for `BETWEEN` match type.
+                                    "dimensionName": "A String", # Name of the dimension for which the filter is being applied.
+                                    "caseSensitive": True or False, # Should the match be case sensitive, ignored for `IN_LIST` operator.
+                                    "operator": "A String", # The operator to use to match the dimension with the expressions.
+                                    "expressions": [ # The list of expressions, only the first element is used for all operators
+                                      "A String",
+                                    ],
+                                  },
+                                  "metricFilter": { # Metric filter to be used in a segment filter clause. # Metric Filter for the segment definition.
+                                    "operator": "A String", # Specifies is the operation to perform to compare the metric. The default
+                                        # is `EQUAL`.
+                                    "scope": "A String", # Scope for a metric defines the level at which that metric is defined.  The
+                                        # specified metric scope must be equal to or greater than its primary scope
+                                        # as defined in the data model. The primary scope is defined by if the
+                                        # segment is selecting users or sessions.
+                                    "comparisonValue": "A String", # The value to compare against. If the operator is `BETWEEN`, this value is
+                                        # treated as minimum comparison value.
+                                    "maxComparisonValue": "A String", # Max comparison value is only used for `BETWEEN` operator.
+                                    "metricName": "A String", # The metric that will be filtered on. A `metricFilter` must contain a
+                                        # metric name.
+                                  },
+                                },
+                              ],
+                            },
+                          ],
+                        },
+                      ],
+                    },
+                  },
+                ],
+              },
+            },
+            "segmentId": "A String", # The segment ID of a built-in or custom segment, for example `gaid::-3`.
+          },
+        ],
+        "hideValueRanges": True or False, # If set to true, hides the minimum and maximum across all matching rows.
+            # The default is false and the value ranges are returned.
+        "orderBys": [ # Sort order on output rows. To compare two rows, the elements of the
+            # following are applied in order until a difference is found.  All date
+            # ranges in the output get the same row order.
+          { # Specifies the sorting options.
+            "orderType": "A String", # The order type. The default orderType is `VALUE`.
+            "fieldName": "A String", # The field which to sort by. The default sort order is ascending. Example:
+                # `ga:browser`.
+                # Note, that you can only specify one field for sort here. For example,
+                # `ga:browser, ga:city` is not valid.
+            "sortOrder": "A String", # The sorting order for the field.
+          },
+        ],
+        "cohortGroup": { # Defines a cohort group. # Cohort group associated with this request. If there is a cohort group
+            # in the request the `ga:cohort` dimension must be present. All requests
+            # should have the same cohort definitions.
+            # For example:
+            #
+            #     "cohortGroup": {
+            #       "cohorts": [{
+            #         "name": "cohort 1",
+            #         "type": "FIRST_VISIT_DATE",
+            #         "dateRange": { "startDate": "2015-08-01", "endDate": "2015-08-01" }
+            #       },{
+            #         "name": "cohort 2"
+            #          "type": "FIRST_VISIT_DATE"
+            #          "dateRange": { "startDate": "2015-07-01", "endDate": "2015-07-01" }
+            #       }]
+            #     }
+          "cohorts": [ # The definition for the cohort.
+            { # Defines a cohort. A cohort is a group of users who share a common
+                # characteristic. For example, all users with the same acquisition date
+                # belong to the same cohort.
+              "dateRange": { # A contiguous set of days: startDate, startDate + 1 day, ..., endDate. # This is used for `FIRST_VISIT_DATE` cohort, the cohort selects users
+                  # whose first visit date is between start date and end date defined in the
+                  # DateRange. The date ranges should be aligned for cohort requests. If the
+                  # request contains `ga:cohortNthDay` it should be exactly one day long,
+                  # if `ga:cohortNthWeek` it should be aligned to the week boundary (starting
+                  # at Sunday and ending Saturday), and for `ga:cohortNthMonth` the date range
+                  # should be aligned to the month (starting at the first and ending on the
+                  # last day of the month).
+                  # For LTV requests there are no such restrictions.
+                  # You do not need to supply a date range for the
+                  # `reportsRequest.dateRanges` field.
+                  # The start and end dates are specified in
+                  # [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) date format `YYYY-MM-DD`.
+                "startDate": "A String", # The start date for the query in the format `YYYY-MM-DD`.
+                "endDate": "A String", # The end date for the query in the format `YYYY-MM-DD`.
+              },
+              "type": "A String", # Type of the cohort. The only supported type as of now is
+                  # `FIRST_VISIT_DATE`. If this field is unspecified the cohort is treated
+                  # as `FIRST_VISIT_DATE` type cohort.
+              "name": "A String", # A unique name for the cohort. If not defined name will be auto-generated
+                  # with values cohort_[1234...].
+            },
+          ],
+          "lifetimeValue": True or False, # Enable Life Time Value (LTV).  LTV measures lifetime value for users
+              # acquired through different channels.
+              # Please see:
+              # [Cohort Analysis](https://support.google.com/analytics/answer/6074676) and
+              # [Lifetime Value](https://support.google.com/analytics/answer/6182550)
+              # If the value of lifetimeValue is false:
+              #
+              # - The metric values are similar to the values in the web interface cohort
+              #   report.
+              # - The cohort definition date ranges must be aligned to the calendar week
+              #   and month. i.e. while requesting `ga:cohortNthWeek` the `startDate` in
+              #   the cohort definition should be a Sunday and the `endDate` should be the
+              #   following Saturday, and for `ga:cohortNthMonth`, the `startDate`
+              #   should be the 1st of the month and `endDate` should be the last day
+              #   of the month.
+              #
+              # When the lifetimeValue is true:
+              #
+              # - The metric values will correspond to the values in the web interface
+              #   LifeTime value report.
+              # - The Lifetime Value report shows you how user value (Revenue) and
+              #   engagement (Appviews, Goal Completions, Sessions, and Session Duration)
+              #   grow during the 90 days after a user is acquired.
+              # - The metrics are calculated as a cumulative average per user per the time
+              #   increment.
+              # - The cohort definition date ranges need not be aligned to the calendar
+              #   week and month boundaries.
+              # - The `viewId` must be an
+              #   [app view ID](https://support.google.com/analytics/answer/2649553#WebVersusAppViews)
+        },
+        "dateRanges": [ # Date ranges in the request. The request can have a maximum of 2 date
+            # ranges. The response will contain a set of metric values for each
+            # combination of the dimensions for each date range in the request. So, if
+            # there are two date ranges, there will be two set of metric values, one for
+            # the original date range and one for the second date range.
+            # The `reportRequest.dateRanges` field should not be specified for cohorts
+            # or Lifetime value requests.
+            # If a date range is not provided, the default date range is (startDate:
+            # current date - 7 days, endDate: current date - 1 day)
+          { # A contiguous set of days: startDate, startDate + 1 day, ..., endDate.
+              # The start and end dates are specified in
+              # [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) date format `YYYY-MM-DD`.
+            "startDate": "A String", # The start date for the query in the format `YYYY-MM-DD`.
+            "endDate": "A String", # The end date for the query in the format `YYYY-MM-DD`.
+          },
+        ],
+        "pageToken": "A String", # A continuation token to get the next page of the results. Adding this to
+            # the request will return the rows after the pageToken. The pageToken should
+            # be the value returned in the nextPageToken parameter in the response to
+            # the GetReports request.
+        "samplingLevel": "A String", # The desired sampling level. If the sampling level is not specified the
+            # DEFAULT sampling level will be used. All requests should have same
+            # `samplingLevel`.
+        "pageSize": 42, # Page size is for paging and specifies the maximum number of returned rows.
+            # Page size should be >= 0. A query returns the default of 1,000 rows.
+            # The Analytics Core Reporting API returns a maximum of 10,000 rows per
+            # request, no matter how many you ask for. It can also return fewer rows
+            # than requested, if there aren't as many dimension segments as you expect.
+            # For instance, there are fewer than 300 possible values for `ga:country`,
+            # so when segmenting only by country, you can't get more than 300 rows,
+            # even if you set `pageSize` to a higher value.
+        "metricFilterClauses": [ # The metric filter clauses. They are logically combined with the `AND`
+            # operator.  Metric filters look at only the first date range and not the
+            # comparing date range. Note that filtering on metrics occurs after the
+            # metrics are aggregated.
+          { # Represents a group of metric filters.
+              # Set the operator value to specify how the filters are logically combined.
+            "operator": "A String", # The operator for combining multiple metric filters. If unspecified, it is
+                # treated as an `OR`.
+            "filters": [ # The repeated set of filters. They are logically combined based on the
+                # operator specified.
+              { # MetricFilter specifies the filter on a metric.
+                "operator": "A String", # Is the metric `EQUAL`, `LESS_THAN` or `GREATER_THAN` the
+                    # comparisonValue, the default is `EQUAL`. If the operator is
+                    # `IS_MISSING`, checks if the metric is missing and would ignore the
+                    # comparisonValue.
+                "not": True or False, # Logical `NOT` operator. If this boolean is set to true, then the matching
+                    # metric values will be excluded in the report. The default is false.
+                "comparisonValue": "A String", # The value to compare against.
+                "metricName": "A String", # The metric that will be filtered on. A metricFilter must contain a metric
+                    # name. A metric name can be an alias earlier defined as a metric or it can
+                    # also be a metric expression.
+              },
+            ],
+          },
+        ],
+        "viewId": "A String", # Unique View Id for retrieving Analytics data.
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The main response class which holds the reports from the Reporting API
+      # `batchGet` call.
+    "reports": [ # Responses corresponding to each of the request.
+      { # The data response corresponding to the request.
+        "nextPageToken": "A String", # Page token to retrieve the next page of results in the list.
+        "data": { # The data part of the report. # Response data.
+          "rows": [ # There's one ReportRow for every unique combination of dimensions.
+            { # A row in the report.
+              "metrics": [ # List of metrics for each requested DateRange
+                { # Used to return a list of metrics for a single DateRange / dimension
+                    # combination
+                  "values": [ # Each value corresponds to each Metric in the request.
+                    "A String",
+                  ],
+                  "pivotValueRegions": [ # The values of each pivot region.
+                    { # The metric values in the pivot region.
+                      "values": [ # The values of the metrics in each of the pivot regions.
+                        "A String",
+                      ],
+                    },
+                  ],
+                },
+              ],
+              "dimensions": [ # List of requested dimensions.
+                "A String",
+              ],
+            },
+          ],
+          "maximums": [ # Minimum and maximum values seen over all matching rows. These are both
+              # empty when `hideValueRanges` in the request is false, or when
+              # rowCount is zero.
+            { # Used to return a list of metrics for a single DateRange / dimension
+                # combination
+              "values": [ # Each value corresponds to each Metric in the request.
+                "A String",
+              ],
+              "pivotValueRegions": [ # The values of each pivot region.
+                { # The metric values in the pivot region.
+                  "values": [ # The values of the metrics in each of the pivot regions.
+                    "A String",
+                  ],
+                },
+              ],
+            },
+          ],
+          "minimums": [ # Minimum and maximum values seen over all matching rows. These are both
+              # empty when `hideValueRanges` in the request is false, or when
+              # rowCount is zero.
+            { # Used to return a list of metrics for a single DateRange / dimension
+                # combination
+              "values": [ # Each value corresponds to each Metric in the request.
+                "A String",
+              ],
+              "pivotValueRegions": [ # The values of each pivot region.
+                { # The metric values in the pivot region.
+                  "values": [ # The values of the metrics in each of the pivot regions.
+                    "A String",
+                  ],
+                },
+              ],
+            },
+          ],
+          "isDataGolden": True or False, # Indicates if response to this request is golden or not. Data is
+              # golden when the exact same request will not produce any new results if
+              # asked at a later point in time.
+          "samplingSpaceSizes": [ # If sampling was enabled, this returns the total number of samples
+              # present, one entry per date range.
+            "A String",
+          ],
+          "totals": [ # For each requested date range, for the set of all rows that match
+              # the query, every requested value format gets a total. The total
+              # for a value format is computed by first totaling the metrics
+              # mentioned in the value format and then evaluating the value
+              # format as a scalar expression.  E.g., The "totals" for
+              # `3 / (ga:sessions + 2)` we compute
+              # `3 / ((sum of all relevant ga:sessions) + 2)`.
+              # Totals are computed before pagination.
+            { # Used to return a list of metrics for a single DateRange / dimension
+                # combination
+              "values": [ # Each value corresponds to each Metric in the request.
+                "A String",
+              ],
+              "pivotValueRegions": [ # The values of each pivot region.
+                { # The metric values in the pivot region.
+                  "values": [ # The values of the metrics in each of the pivot regions.
+                    "A String",
+                  ],
+                },
+              ],
+            },
+          ],
+          "rowCount": 42, # Total number of matching rows for this query.
+          "samplesReadCounts": [ # If sampling was enabled, this returns the total number of samples
+              # read, one entry per date range
+            "A String",
+          ],
+        },
+        "columnHeader": { # Column headers. # The column headers.
+          "dimensions": [ # The dimension names in the response.
+            "A String",
+          ],
+          "metricHeader": { # The headers for the metrics. # Metric headers for the metrics in the response.
+            "pivotHeaders": [ # Headers for the pivots in the response.
+              { # The headers for each of the pivot sections defined in the request.
+                "totalPivotGroupsCount": 42, # The total number of groups for this pivot.
+                "pivotHeaderEntries": [ # A single pivot section header.
+                  { # The headers for the each of the metric column corresponding to the metrics
+                      # requested in the pivots section of the response.
+                    "dimensionValues": [ # The values for the dimensions in the pivot.
+                      "A String",
+                    ],
+                    "dimensionNames": [ # The name of the dimensions in the pivotDimensionValues field in the
+                        # response.
+                      "A String",
+                    ],
+                    "metric": { # Header for the metrics. # The metric header for the metric in the pivot.
+                      "type": "A String", # The type of the metric, for example `INTEGER`.
+                      "name": "A String", # The name of the header.
+                    },
+                  },
+                ],
+              },
+            ],
+            "metricHeaderEntries": [ # Headers for the metrics in the response.
+              { # Header for the metrics.
+                "type": "A String", # The type of the metric, for example `INTEGER`.
+                "name": "A String", # The name of the header.
+              },
+            ],
+          },
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/androidenterprise_v1.collectionviewers.html b/docs/dyn/androidenterprise_v1.collectionviewers.html
index b5bc961..94439b1 100644
--- a/docs/dyn/androidenterprise_v1.collectionviewers.html
+++ b/docs/dyn/androidenterprise_v1.collectionviewers.html
@@ -119,7 +119,7 @@
         #
         # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
       "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
-      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com". Will always be set for Google managed users and not set for EMM managed users.
+      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
       "id": "A String", # The unique ID for the user.
     }</pre>
 </div>
@@ -144,7 +144,7 @@
             #
             # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
           "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
-          "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com". Will always be set for Google managed users and not set for EMM managed users.
+          "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
           "id": "A String", # The unique ID for the user.
         },
     ],
@@ -168,7 +168,7 @@
       # 
       # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
     "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
-    "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com". Will always be set for Google managed users and not set for EMM managed users.
+    "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
     "id": "A String", # The unique ID for the user.
   }
 
@@ -182,7 +182,7 @@
         #
         # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
       "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
-      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com". Will always be set for Google managed users and not set for EMM managed users.
+      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
       "id": "A String", # The unique ID for the user.
     }</pre>
 </div>
@@ -204,7 +204,7 @@
       # 
       # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
     "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
-    "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com". Will always be set for Google managed users and not set for EMM managed users.
+    "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
     "id": "A String", # The unique ID for the user.
   }
 
@@ -218,7 +218,7 @@
         #
         # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
       "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
-      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com". Will always be set for Google managed users and not set for EMM managed users.
+      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
       "id": "A String", # The unique ID for the user.
     }</pre>
 </div>
diff --git a/docs/dyn/androidenterprise_v1.devices.html b/docs/dyn/androidenterprise_v1.devices.html
index 5fc4fd5..5c0d312 100644
--- a/docs/dyn/androidenterprise_v1.devices.html
+++ b/docs/dyn/androidenterprise_v1.devices.html
@@ -103,7 +103,7 @@
       #
       # This collection cannot be modified via the API; it is automatically populated as devices are set up to be managed.
     "kind": "androidenterprise#device", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#device".
-    "managementType": "A String", # The mechanism by which this device is managed by the EMM. "managedDevice" means that the EMM's app is a device owner. "managedProfile" means that the EMM's app is the profile owner (and there is a separate personal profile which is not managed). "containerApp" means that the EMM's app is managing the Android for Work container app on the device.
+    "managementType": "A String", # The mechanism by which this device is managed by the EMM. "managedDevice" means that the EMM's app is a device owner. "managedProfile" means that the EMM's app is the profile owner (and there is a separate personal profile which is not managed). "containerApp" means that the EMM's app is managing the Android for Work container app on the device. ?unmanagedProfile? means that the EMM?s app is managing a managed user on an unmanaged device
     "androidId": "A String", # The Google Play Services Android ID for the device encoded as a lowercase hex string, e.g. "123456789abcdef0".
   }</pre>
 </div>
@@ -143,7 +143,7 @@
           #
           # This collection cannot be modified via the API; it is automatically populated as devices are set up to be managed.
         "kind": "androidenterprise#device", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#device".
-        "managementType": "A String", # The mechanism by which this device is managed by the EMM. "managedDevice" means that the EMM's app is a device owner. "managedProfile" means that the EMM's app is the profile owner (and there is a separate personal profile which is not managed). "containerApp" means that the EMM's app is managing the Android for Work container app on the device.
+        "managementType": "A String", # The mechanism by which this device is managed by the EMM. "managedDevice" means that the EMM's app is a device owner. "managedProfile" means that the EMM's app is the profile owner (and there is a separate personal profile which is not managed). "containerApp" means that the EMM's app is managing the Android for Work container app on the device. ?unmanagedProfile? means that the EMM?s app is managing a managed user on an unmanaged device
         "androidId": "A String", # The Google Play Services Android ID for the device encoded as a lowercase hex string, e.g. "123456789abcdef0".
       },
     ],
diff --git a/docs/dyn/androidenterprise_v1.enterprises.html b/docs/dyn/androidenterprise_v1.enterprises.html
index 8e7baa8..70930bd 100644
--- a/docs/dyn/androidenterprise_v1.enterprises.html
+++ b/docs/dyn/androidenterprise_v1.enterprises.html
@@ -123,7 +123,7 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # An enterprise resource represents a binding between an organisation and their EMM.
+{ # An enterprise resource represents a binding between an organization and their EMM.
       # 
       # To create an enterprise, an admin of the enterprise must first go through a Play for Work sign-up flow. At the end of this the admin will be presented with a token (a short opaque alphanumeric string). They must then present this to the EMM, who then supplies it to the enroll method. Until this is done the EMM will not have any access to the enterprise.
       # 
@@ -142,7 +142,7 @@
 Returns:
   An object of the form:
 
-    { # An enterprise resource represents a binding between an organisation and their EMM.
+    { # An enterprise resource represents a binding between an organization and their EMM.
         #
         # To create an enterprise, an admin of the enterprise must first go through a Play for Work sign-up flow. At the end of this the admin will be presented with a token (a short opaque alphanumeric string). They must then present this to the EMM, who then supplies it to the enroll method. Until this is done the EMM will not have any access to the enterprise.
         #
@@ -168,7 +168,7 @@
 Returns:
   An object of the form:
 
-    { # An enterprise resource represents a binding between an organisation and their EMM.
+    { # An enterprise resource represents a binding between an organization and their EMM.
         #
         # To create an enterprise, an admin of the enterprise must first go through a Play for Work sign-up flow. At the end of this the admin will be presented with a token (a short opaque alphanumeric string). They must then present this to the EMM, who then supplies it to the enroll method. Until this is done the EMM will not have any access to the enterprise.
         #
@@ -213,7 +213,7 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # An enterprise resource represents a binding between an organisation and their EMM.
+{ # An enterprise resource represents a binding between an organization and their EMM.
       # 
       # To create an enterprise, an admin of the enterprise must first go through a Play for Work sign-up flow. At the end of this the admin will be presented with a token (a short opaque alphanumeric string). They must then present this to the EMM, who then supplies it to the enroll method. Until this is done the EMM will not have any access to the enterprise.
       # 
@@ -232,7 +232,7 @@
 Returns:
   An object of the form:
 
-    { # An enterprise resource represents a binding between an organisation and their EMM.
+    { # An enterprise resource represents a binding between an organization and their EMM.
         #
         # To create an enterprise, an admin of the enterprise must first go through a Play for Work sign-up flow. At the end of this the admin will be presented with a token (a short opaque alphanumeric string). They must then present this to the EMM, who then supplies it to the enroll method. Until this is done the EMM will not have any access to the enterprise.
         #
@@ -261,7 +261,7 @@
     { # The matching enterprise resources.
     "kind": "androidenterprise#enterprisesListResponse", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#enterprisesListResponse".
     "enterprise": [ # An enterprise.
-      { # An enterprise resource represents a binding between an organisation and their EMM.
+      { # An enterprise resource represents a binding between an organization and their EMM.
             #
             # To create an enterprise, an admin of the enterprise must first go through a Play for Work sign-up flow. At the end of this the admin will be presented with a token (a short opaque alphanumeric string). They must then present this to the EMM, who then supplies it to the enroll method. Until this is done the EMM will not have any access to the enterprise.
             #
diff --git a/docs/dyn/androidenterprise_v1.entitlements.html b/docs/dyn/androidenterprise_v1.entitlements.html
index 3db74dc..47fe56b 100644
--- a/docs/dyn/androidenterprise_v1.entitlements.html
+++ b/docs/dyn/androidenterprise_v1.entitlements.html
@@ -97,7 +97,7 @@
 Args:
   enterpriseId: string, The ID of the enterprise. (required)
   userId: string, The ID of the user. (required)
-  entitlementId: string, The ID of the entitlement, e.g. "app:com.google.android.gm". (required)
+  entitlementId: string, The ID of the entitlement (a product ID), e.g. "app:com.google.android.gm". (required)
 </pre>
 </div>
 
@@ -108,7 +108,7 @@
 Args:
   enterpriseId: string, The ID of the enterprise. (required)
   userId: string, The ID of the user. (required)
-  entitlementId: string, The ID of the entitlement, e.g. "app:com.google.android.gm". (required)
+  entitlementId: string, The ID of the entitlement (a product ID), e.g. "app:com.google.android.gm". (required)
 
 Returns:
   An object of the form:
@@ -166,7 +166,7 @@
 Args:
   enterpriseId: string, The ID of the enterprise. (required)
   userId: string, The ID of the user. (required)
-  entitlementId: string, The ID of the entitlement, e.g. "app:com.google.android.gm". (required)
+  entitlementId: string, The ID of the entitlement (a product ID), e.g. "app:com.google.android.gm". (required)
   body: object, The request body. (required)
     The object takes the form of:
 
@@ -211,7 +211,7 @@
 Args:
   enterpriseId: string, The ID of the enterprise. (required)
   userId: string, The ID of the user. (required)
-  entitlementId: string, The ID of the entitlement, e.g. "app:com.google.android.gm". (required)
+  entitlementId: string, The ID of the entitlement (a product ID), e.g. "app:com.google.android.gm". (required)
   body: object, The request body. (required)
     The object takes the form of:
 
diff --git a/docs/dyn/androidenterprise_v1.grouplicenseusers.html b/docs/dyn/androidenterprise_v1.grouplicenseusers.html
index d803c9f..7f19d6c 100644
--- a/docs/dyn/androidenterprise_v1.grouplicenseusers.html
+++ b/docs/dyn/androidenterprise_v1.grouplicenseusers.html
@@ -98,7 +98,7 @@
             #
             # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
           "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
-          "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com". Will always be set for Google managed users and not set for EMM managed users.
+          "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
           "id": "A String", # The unique ID for the user.
         },
     ],
diff --git a/docs/dyn/androidenterprise_v1.products.html b/docs/dyn/androidenterprise_v1.products.html
index 6b50b19..a7ac162 100644
--- a/docs/dyn/androidenterprise_v1.products.html
+++ b/docs/dyn/androidenterprise_v1.products.html
@@ -76,7 +76,7 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#approve">approve(enterpriseId, productId, body)</a></code></p>
-<p class="firstline">Approves the specified product (and the relevant app permissions, if any).</p>
+<p class="firstline">Approves the specified product and the relevant app permissions, if any. The maximum number of products that you can approve per enterprise customer is 1,000.</p>
 <p class="toc_element">
   <code><a href="#generateApprovalUrl">generateApprovalUrl(enterpriseId, productId, languageCode=None)</a></code></p>
 <p class="firstline">Generates a URL that can be rendered in an iframe to display the permissions (if any) of a product. An enterprise admin must view these permissions and accept them on behalf of their organization in order to approve that product.</p>
@@ -90,12 +90,17 @@
   <code><a href="#getPermissions">getPermissions(enterpriseId, productId)</a></code></p>
 <p class="firstline">Retrieves the Android app permissions required by this app.</p>
 <p class="toc_element">
+  <code><a href="#list">list(enterpriseId, language=None, maxResults=None, token=None, query=None, approved=None)</a></code></p>
+<p class="firstline">Finds approved products that match a query.</p>
+<p class="toc_element">
   <code><a href="#updatePermissions">updatePermissions(enterpriseId, productId, body)</a></code></p>
 <p class="firstline">This method has been deprecated. To programmatically approve applications, you must use the iframe mechanism via the  generateApprovalUrl and  approve methods of the Products resource. For more information, see the  Play EMM API usage requirements.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="approve">approve(enterpriseId, productId, body)</code>
-  <pre>Approves the specified product (and the relevant app permissions, if any).
+  <pre>Approves the specified product and the relevant app permissions, if any. The maximum number of products that you can approve per enterprise customer is 1,000.
+
+To learn how to use Google Play for Work to design and create a store layout to display approved products to your users, see Store Layout Design.
 
 Args:
   enterpriseId: string, The ID of the enterprise. (required)
@@ -147,6 +152,7 @@
     { # A product represents an app in the Google Play Store that is available to at least some users in the enterprise. (Some apps are restricted to a single enterprise, and no information about them is made available outside that enterprise.)
       #
       # The information provided for each product (localized name, icon, link to the full Google Play details page) is intended to allow a basic representation of the product within an EMM user interface.
+    "smallIconUrl": "A String", # A link to a smaller image that can be used as an icon for the product. This image is suitable for use at up to 128px x 128px.
     "kind": "androidenterprise#product", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#product".
     "distributionChannel": "A String", # How and to whom the package is made available. The value publicGoogleHosted means that the package is available through the Play Store and not restricted to a specific enterprise. The value privateGoogleHosted means that the package is a private app (restricted to an enterprise) but hosted by Google. The value privateSelfHosted means that the package is a private app (restricted to an enterprise) and is privately hosted.
     "title": "A String", # The name of the product.
@@ -158,7 +164,7 @@
       },
     ],
     "productPricing": "A String", # Whether this product is free, free with in-app purchases, or paid.
-    "iconUrl": "A String", # A link to an image that can be used as an icon for the product.
+    "iconUrl": "A String", # A link to an image that can be used as an icon for the product. This image is suitable for use at up to 512px x 512px.
     "authorName": "A String", # The name of the author of the product (e.g. the app developer).
     "requiresContainerApp": True or False, # Whether this app can only be installed on devices using the Android for Work container app.
     "detailsUrl": "A String", # A link to the (consumer) Google Play details page for the product.
@@ -232,6 +238,58 @@
 </div>
 
 <div class="method">
+    <code class="details" id="list">list(enterpriseId, language=None, maxResults=None, token=None, query=None, approved=None)</code>
+  <pre>Finds approved products that match a query.
+
+Args:
+  enterpriseId: string, The ID of the enterprise. (required)
+  language: string, The BCP47 tag for the user's preferred language (e.g. "en-US", "de"). Results are returned in the language best matching the preferred language.
+  maxResults: integer, Specifies the maximum number of products that can be returned per request. If not specified, uses a default value of 100, which is also the maximum retrievable within a single response.
+  token: string, A pagination token is contained in a requestÂ’s response when there are more products. The token can be used in a subsequent request to obtain more products, and so forth. This parameter cannot be used in the initial request.
+  query: string, The search query as typed in the Google Play Store search box. If omitted, all approved apps will be returned (using the pagination parameters).
+  approved: boolean, Specifies whether to search among all products (false) or among only products that have been approved (true). Only "true" is supported, and should be specified.
+
+Returns:
+  An object of the form:
+
+    { # The matching products.
+    "product": [ # Information about a product (e.g. an app) in the Google Play Store, for display to an enterprise admin.
+      { # A product represents an app in the Google Play Store that is available to at least some users in the enterprise. (Some apps are restricted to a single enterprise, and no information about them is made available outside that enterprise.)
+          #
+          # The information provided for each product (localized name, icon, link to the full Google Play details page) is intended to allow a basic representation of the product within an EMM user interface.
+        "smallIconUrl": "A String", # A link to a smaller image that can be used as an icon for the product. This image is suitable for use at up to 128px x 128px.
+        "kind": "androidenterprise#product", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#product".
+        "distributionChannel": "A String", # How and to whom the package is made available. The value publicGoogleHosted means that the package is available through the Play Store and not restricted to a specific enterprise. The value privateGoogleHosted means that the package is a private app (restricted to an enterprise) but hosted by Google. The value privateSelfHosted means that the package is a private app (restricted to an enterprise) and is privately hosted.
+        "title": "A String", # The name of the product.
+        "workDetailsUrl": "A String", # A link to the Google Play for Work details page for the product, for use by an Enterprise administrator.
+        "appVersion": [ # App versions currently available for this product. The returned list contains only public versions. Alpha and beta versions are not included.
+          { # This represents a single version of the app.
+            "versionCode": 42, # Unique increasing identifier for the app version.
+            "versionString": "A String", # The string used in the Play Store by the app developer to identify the version. The string is not necessarily unique or localized (for example, the string could be "1.4").
+          },
+        ],
+        "productPricing": "A String", # Whether this product is free, free with in-app purchases, or paid.
+        "iconUrl": "A String", # A link to an image that can be used as an icon for the product. This image is suitable for use at up to 512px x 512px.
+        "authorName": "A String", # The name of the author of the product (e.g. the app developer).
+        "requiresContainerApp": True or False, # Whether this app can only be installed on devices using the Android for Work container app.
+        "detailsUrl": "A String", # A link to the (consumer) Google Play details page for the product.
+        "productId": "A String", # A string of the form app:<package name>. For example, app:com.google.android.gm represents the Gmail app.
+      },
+    ],
+    "kind": "androidenterprise#productsListResponse", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#productsListResponse".
+    "tokenPagination": { # Pagination information for token pagination.
+      "nextPageToken": "A String",
+      "previousPageToken": "A String",
+    },
+    "pageInfo": { # General pagination information.
+      "totalResults": 42,
+      "startIndex": 42,
+      "resultPerPage": 42,
+    },
+  }</pre>
+</div>
+
+<div class="method">
     <code class="details" id="updatePermissions">updatePermissions(enterpriseId, productId, body)</code>
   <pre>This method has been deprecated. To programmatically approve applications, you must use the iframe mechanism via the  generateApprovalUrl and  approve methods of the Products resource. For more information, see the  Play EMM API usage requirements.
 
diff --git a/docs/dyn/androidenterprise_v1.storelayoutclusters.html b/docs/dyn/androidenterprise_v1.storelayoutclusters.html
index b175361..85b4a9a 100644
--- a/docs/dyn/androidenterprise_v1.storelayoutclusters.html
+++ b/docs/dyn/androidenterprise_v1.storelayoutclusters.html
@@ -120,7 +120,7 @@
       "kind": "androidenterprise#storeCluster", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#storeCluster".
       "orderInPage": "A String", # String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined.
           #
-          # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 20 characters.
+          # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
       "productId": [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
         "A String",
       ],
@@ -148,7 +148,7 @@
     "kind": "androidenterprise#storeCluster", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#storeCluster".
     "orderInPage": "A String", # String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined.
         # 
-        # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 20 characters.
+        # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
     "productId": [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
       "A String",
     ],
@@ -169,7 +169,7 @@
       "kind": "androidenterprise#storeCluster", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#storeCluster".
       "orderInPage": "A String", # String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined.
           #
-          # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 20 characters.
+          # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
       "productId": [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
         "A String",
       ],
@@ -200,7 +200,7 @@
           "kind": "androidenterprise#storeCluster", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#storeCluster".
           "orderInPage": "A String", # String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined.
               #
-              # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 20 characters.
+              # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
           "productId": [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
             "A String",
           ],
@@ -232,7 +232,7 @@
     "kind": "androidenterprise#storeCluster", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#storeCluster".
     "orderInPage": "A String", # String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined.
         # 
-        # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 20 characters.
+        # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
     "productId": [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
       "A String",
     ],
@@ -253,7 +253,7 @@
       "kind": "androidenterprise#storeCluster", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#storeCluster".
       "orderInPage": "A String", # String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined.
           #
-          # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 20 characters.
+          # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
       "productId": [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
         "A String",
       ],
@@ -282,7 +282,7 @@
     "kind": "androidenterprise#storeCluster", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#storeCluster".
     "orderInPage": "A String", # String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined.
         # 
-        # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 20 characters.
+        # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
     "productId": [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
       "A String",
     ],
@@ -303,7 +303,7 @@
       "kind": "androidenterprise#storeCluster", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#storeCluster".
       "orderInPage": "A String", # String (US-ASCII only) used to determine order of this cluster within the parent page's elements. Page elements are sorted in lexicographic order of this field. Duplicated values are allowed, but ordering between elements with duplicate order is undefined.
           #
-          # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 20 characters.
+          # The value of this field is never visible to a user, it is used solely for the purpose of defining an ordering. Maximum length is 256 characters.
       "productId": [ # List of products in the order they are displayed in the cluster. There should not be duplicates within a cluster.
         "A String",
       ],
diff --git a/docs/dyn/androidenterprise_v1.users.html b/docs/dyn/androidenterprise_v1.users.html
index ed911d5..45fafda 100644
--- a/docs/dyn/androidenterprise_v1.users.html
+++ b/docs/dyn/androidenterprise_v1.users.html
@@ -130,7 +130,7 @@
         #
         # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
       "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
-      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com". Will always be set for Google managed users and not set for EMM managed users.
+      "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
       "id": "A String", # The unique ID for the user.
     }</pre>
 </div>
@@ -174,7 +174,7 @@
             #
             # The ID for a user is an opaque string. It can be retrieved using the list method queried by the user's primary email address.
           "kind": "androidenterprise#user", # Identifies what kind of resource this is. Value: the fixed string "androidenterprise#user".
-          "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com". Will always be set for Google managed users and not set for EMM managed users.
+          "primaryEmail": "A String", # The user's primary email, e.g. "jsmith@example.com".
           "id": "A String", # The unique ID for the user.
         },
     ],
diff --git a/docs/dyn/androidpublisher_v2.html b/docs/dyn/androidpublisher_v2.html
index 6b8a165..85fad87 100644
--- a/docs/dyn/androidpublisher_v2.html
+++ b/docs/dyn/androidpublisher_v2.html
@@ -95,6 +95,11 @@
 <p class="firstline">Returns the purchases Resource.</p>
 
 <p class="toc_element">
+  <code><a href="androidpublisher_v2.reviews.html">reviews()</a></code>
+</p>
+<p class="firstline">Returns the reviews Resource.</p>
+
+<p class="toc_element">
   <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
 <p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
 <h3>Method Details</h3>
diff --git a/docs/dyn/androidpublisher_v2.purchases.subscriptions.html b/docs/dyn/androidpublisher_v2.purchases.subscriptions.html
index f77d1ce..e4610c5 100644
--- a/docs/dyn/androidpublisher_v2.purchases.subscriptions.html
+++ b/docs/dyn/androidpublisher_v2.purchases.subscriptions.html
@@ -141,10 +141,20 @@
   An object of the form:
 
     { # A SubscriptionPurchase resource indicates the status of a user's subscription purchase.
-    "expiryTimeMillis": "A String", # Time at which the subscription will expire, in milliseconds since Epoch.
     "kind": "androidpublisher#subscriptionPurchase", # This kind represents a subscriptionPurchase object in the androidpublisher service.
+    "countryCode": "A String", # ISO 3166-1 alpha-2 billing country/region code of the user at the time the subscription was granted.
+    "developerPayload": "A String", # A developer-specified string that contains supplemental information about an order.
     "autoRenewing": True or False, # Whether the subscription will automatically be renewed when it reaches its current expiry time.
+    "paymentState": 42, # The payment state of the subscription. Possible values are:
+        # - Payment pending
+        # - Payment received
+    "priceCurrencyCode": "A String", # ISO 4217 currency code for the subscription price. For example, if the price is specified in British pounds sterling, price_currency_code is "GBP".
+    "expiryTimeMillis": "A String", # Time at which the subscription will expire, in milliseconds since Epoch.
+    "cancelReason": 42, # The cancel reason of the subscription, if the subscription is not auto renewing. Possible values are:
+        # - User cancelled the subscription
+        # - Subscription was cancelled by the system, for example because of a billing problem
     "startTimeMillis": "A String", # Time at which the subscription was granted, in milliseconds since Epoch.
+    "priceAmountMicros": "A String", # Price of the subscription, not including tax. Price is expressed in micro-units, where 1,000,000 micro-units equal one unit of the currency. For example, if the subscription price is €1.99, price_amount_micros is 1990000.
   }</pre>
 </div>
 
diff --git a/docs/dyn/androidpublisher_v2.reviews.html b/docs/dyn/androidpublisher_v2.reviews.html
new file mode 100644
index 0000000..0e8d71b
--- /dev/null
+++ b/docs/dyn/androidpublisher_v2.reviews.html
@@ -0,0 +1,213 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="androidpublisher_v2.html">Google Play Developer API</a> . <a href="androidpublisher_v2.reviews.html">reviews</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(packageName, reviewId)</a></code></p>
+<p class="firstline">Returns a single review.</p>
+<p class="toc_element">
+  <code><a href="#list">list(packageName, token=None, maxResults=None, startIndex=None)</a></code></p>
+<p class="firstline">Returns a list of reviews.</p>
+<p class="toc_element">
+  <code><a href="#reply">reply(packageName, reviewId, body)</a></code></p>
+<p class="firstline">Reply to a single review, or update an existing reply.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(packageName, reviewId)</code>
+  <pre>Returns a single review.
+
+Args:
+  packageName: string, Unique identifier for the Android app for which we want reviews; for example, "com.spiffygame". (required)
+  reviewId: string, A parameter (required)
+
+Returns:
+  An object of the form:
+
+    {
+    "authorName": "A String", # The name of the user who wrote the review.
+    "reviewId": "A String", # Unique identifier for this review.
+    "comments": [ # A repeated field containing comments for the review.
+      {
+        "developerComment": { # A comment from a developer.
+          "lastModified": { # The last time at which this comment was updated.
+            "nanos": 42,
+            "seconds": "A String",
+          },
+          "text": "A String", # The content of the comment, i.e. reply body.
+        },
+        "userComment": { # A comment from a user.
+          "appVersionCode": 42, # Integer version code of the app as installed at the time the review was written. May be absent.
+          "reviewerLanguage": "A String", # Language code for the reviewer. This is taken from the device settings so is not guaranteed to match the language the review is written in. May be absent.
+          "lastModified": { # The last time at which this comment was updated.
+            "nanos": 42,
+            "seconds": "A String",
+          },
+          "starRating": 42, # The star rating associated with the review, from 1 to 5.
+          "text": "A String", # The content of the comment, i.e. review body. In some cases users have been able to write a review with separate title and body; in those cases the title and body are concatenated and separated by a tab character.
+          "device": "A String", # Codename for the reviewer's device, e.g. klte, flounder. May be absent.
+          "androidOsVersion": 42, # Integer Android SDK version of the user's device at the time the review was written, e.g. 23 is Marshmallow. May be absent.
+          "appVersionName": "A String", # String version name of the app as installed at the time the review was written. May be absent.
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(packageName, token=None, maxResults=None, startIndex=None)</code>
+  <pre>Returns a list of reviews.
+
+Args:
+  packageName: string, Unique identifier for the Android app for which we want reviews; for example, "com.spiffygame". (required)
+  token: string, A parameter
+  maxResults: integer, A parameter
+  startIndex: integer, A parameter
+
+Returns:
+  An object of the form:
+
+    {
+    "reviews": [
+      {
+        "authorName": "A String", # The name of the user who wrote the review.
+        "reviewId": "A String", # Unique identifier for this review.
+        "comments": [ # A repeated field containing comments for the review.
+          {
+            "developerComment": { # A comment from a developer.
+              "lastModified": { # The last time at which this comment was updated.
+                "nanos": 42,
+                "seconds": "A String",
+              },
+              "text": "A String", # The content of the comment, i.e. reply body.
+            },
+            "userComment": { # A comment from a user.
+              "appVersionCode": 42, # Integer version code of the app as installed at the time the review was written. May be absent.
+              "reviewerLanguage": "A String", # Language code for the reviewer. This is taken from the device settings so is not guaranteed to match the language the review is written in. May be absent.
+              "lastModified": { # The last time at which this comment was updated.
+                "nanos": 42,
+                "seconds": "A String",
+              },
+              "starRating": 42, # The star rating associated with the review, from 1 to 5.
+              "text": "A String", # The content of the comment, i.e. review body. In some cases users have been able to write a review with separate title and body; in those cases the title and body are concatenated and separated by a tab character.
+              "device": "A String", # Codename for the reviewer's device, e.g. klte, flounder. May be absent.
+              "androidOsVersion": 42, # Integer Android SDK version of the user's device at the time the review was written, e.g. 23 is Marshmallow. May be absent.
+              "appVersionName": "A String", # String version name of the app as installed at the time the review was written. May be absent.
+            },
+          },
+        ],
+      },
+    ],
+    "tokenPagination": {
+      "nextPageToken": "A String",
+      "previousPageToken": "A String",
+    },
+    "pageInfo": {
+      "totalResults": 42,
+      "startIndex": 42,
+      "resultPerPage": 42,
+    },
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="reply">reply(packageName, reviewId, body)</code>
+  <pre>Reply to a single review, or update an existing reply.
+
+Args:
+  packageName: string, Unique identifier for the Android app for which we want reviews; for example, "com.spiffygame". (required)
+  reviewId: string, A parameter (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{
+    "replyText": "A String", # The text to set as the reply. Replies of more than approximately 350 characters will be rejected. HTML tags will be stripped.
+  }
+
+
+Returns:
+  An object of the form:
+
+    {
+    "result": {
+      "replyText": "A String", # The reply text that was applied.
+      "lastEdited": { # The time at which the reply took effect.
+        "nanos": 42,
+        "seconds": "A String",
+      },
+    },
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/appengine_v1beta5.apps.html b/docs/dyn/appengine_v1beta5.apps.html
index 61839b7..4445bfe 100644
--- a/docs/dyn/appengine_v1beta5.apps.html
+++ b/docs/dyn/appengine_v1beta5.apps.html
@@ -101,18 +101,21 @@
   An object of the form:
 
     { # An Application contains the top-level configuration of an App Engine application.
+    "defaultHostname": "A String", # The hostname used to reach the application, as resolved by App Engine. @OutputOnly
     "name": "A String", # The full path to the application in the API. Example: "apps/myapp". @OutputOnly
     "codeBucket": "A String", # A Google Cloud Storage bucket which can be used for storing files associated with an application. This bucket is associated with the application and can be used by the gcloud deployment commands. @OutputOnly
     "defaultBucket": "A String", # A Google Cloud Storage bucket which can be used by the application to store content. @OutputOnly
-    "dispatchRules": [ # HTTP path dispatch rules for requests to the app that do not explicitly target a service or version. The rules are order-dependent.
+    "dispatchRules": [ # HTTP path dispatch rules for requests to the app that do not explicitly target a service or version. The rules are order-dependent. @OutputOnly
       { # Rules to match an HTTP request and dispatch that request to a service.
         "path": "A String", # The pathname within the host. This must start with a '/'. A single '*' (glob) can be included at the end of the path. The sum of the lengths of the domain and path may not exceed 100 characters.
         "domain": "A String", # The domain name to match on. Supports '*' (glob) wildcarding on the left-hand side of a '.'. If empty, all domains will be matched (the same as '*').
         "service": "A String", # The resource id of a Service in this application that should service the matched request. The Service must already exist. Example: "default".
       },
     ],
-    "location": "A String", # The location from which the application will be run. Choices are "us" for United States and "eu" for European Union. Application instances will run out of data centers in the chosen location and all of the application's End User Content will be stored at rest in the chosen location. The default is "us".
-    "id": "A String", # The relative name/path of the application. Example: "myapp". @OutputOnly
+    "defaultCookieExpiration": "A String", # Determines the cookie expiration policy for the application. @OutputOnly
+    "location": "A String", # The location from which the application will be run. Application instances will run out of data centers in the chosen location and all of the application's End User Content will be stored at rest. The default is "us-central". Choices are: "us-central" - Central US "europe-west" - Western Europe "us-east1" - Eastern US
+    "authDomain": "A String", # If set, only users from the specified Google Apps authentication domain may access the application. If not set, any Google Account may access the application.
+    "id": "A String", # The relative name/path of the application. Example: "myapp".
   }</pre>
 </div>
 
diff --git a/docs/dyn/appengine_v1beta5.apps.operations.html b/docs/dyn/appengine_v1beta5.apps.operations.html
index d03b6de..5dca89f 100644
--- a/docs/dyn/appengine_v1beta5.apps.operations.html
+++ b/docs/dyn/appengine_v1beta5.apps.operations.html
@@ -110,7 +110,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
@@ -147,7 +147,7 @@
           ],
         },
         "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-        "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+        "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
         "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
           "a_key": "", # Properties of the object. Contains field @ype with type URL.
         },
diff --git a/docs/dyn/appengine_v1beta5.apps.services.html b/docs/dyn/appengine_v1beta5.apps.services.html
index 705e8b7..2aa5b2c 100644
--- a/docs/dyn/appengine_v1beta5.apps.services.html
+++ b/docs/dyn/appengine_v1beta5.apps.services.html
@@ -121,7 +121,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
@@ -238,7 +238,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
diff --git a/docs/dyn/appengine_v1beta5.apps.services.versions.html b/docs/dyn/appengine_v1beta5.apps.services.versions.html
index 9585a72..5011f62 100644
--- a/docs/dyn/appengine_v1beta5.apps.services.versions.html
+++ b/docs/dyn/appengine_v1beta5.apps.services.versions.html
@@ -75,6 +75,11 @@
 <h1><a href="appengine_v1beta5.html">Google App Engine Admin API</a> . <a href="appengine_v1beta5.apps.html">apps</a> . <a href="appengine_v1beta5.apps.services.html">services</a> . <a href="appengine_v1beta5.apps.services.versions.html">versions</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
+  <code><a href="appengine_v1beta5.apps.services.versions.instances.html">instances()</a></code>
+</p>
+<p class="firstline">Returns the instances Resource.</p>
+
+<p class="toc_element">
   <code><a href="#create">create(appsId, servicesId, body, x__xgafv=None)</a></code></p>
 <p class="firstline">Deploys new code and resource files to a version.</p>
 <p class="toc_element">
@@ -89,6 +94,9 @@
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(appsId, servicesId, versionsId, body, mask=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an existing version. Note: UNIMPLEMENTED.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="create">create(appsId, servicesId, body, x__xgafv=None)</code>
@@ -266,7 +274,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
@@ -300,7 +308,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
@@ -651,4 +659,189 @@
     </pre>
 </div>
 
+<div class="method">
+    <code class="details" id="patch">patch(appsId, servicesId, versionsId, body, mask=None, x__xgafv=None)</code>
+  <pre>Updates an existing version. Note: UNIMPLEMENTED.
+
+Args:
+  appsId: string, Part of `name`. Name of the resource to update. For example: "apps/myapp/services/default/versions/1". (required)
+  servicesId: string, Part of `name`. See documentation of `appsId`. (required)
+  versionsId: string, Part of `name`. See documentation of `appsId`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A Version is a specific set of source code and configuration files deployed to a service.
+    "basicScaling": { # A service with basic scaling will create an instance when the application receives a request. The instance will be turned down when the app becomes idle. Basic scaling is ideal for work that is intermittent or driven by user activity. # A service with basic scaling will create an instance when the application receives a request. The instance will be turned down when the app becomes idle. Basic scaling is ideal for work that is intermittent or driven by user activity.
+      "idleTimeout": "A String", # The instance will be shut down this amount of time after receiving its last request.
+      "maxInstances": 42, # The maximum number of instances for App Engine to create for this version.
+    },
+    "betaSettings": { # Beta settings supplied to the application via metadata.
+      "a_key": "A String",
+    },
+    "vm": True or False, # Whether to deploy this app in a VM container.
+    "instanceClass": "A String", # The instance class to use to run this app. Valid values for AutomaticScaling are `[F1, F2, F4, F4_1G]`. Valid values for ManualScaling and BasicScaling are `[B1, B2, B4, B8, B4_1G]`. Default: "F1" for AutomaticScaling, "B1" for ManualScaling and BasicScaling
+    "errorHandlers": [ # Custom static error pages instead of these generic error pages, (limit 10 KB/page) Only returned in `GET` requests if `view=FULL` is set. May only be set on create requests; once created, is immutable.
+      { # A custom static error page to be served when an error occurs.
+        "errorCode": "A String", # The error condition this handler applies to.
+        "mimeType": "A String", # MIME type of file. If unspecified, "text/html" is assumed.
+        "staticFile": "A String", # Static file content to be served for this error.
+      },
+    ],
+    "id": "A String", # The relative name/path of the Version within the service. Example: "v1". Version specifiers can contain lowercase letters, digits, and hyphens. It cannot begin with the prefix `ah-` and the names `default` and `latest` are reserved and cannot be used.
+    "apiConfig": { # API Serving configuration for Cloud Endpoints. # Serving configuration for Google Cloud Endpoints. Only returned in `GET` requests if `view=FULL` is set. May only be set on create requests; once created, is immutable.
+      "url": "A String", # URL to serve the endpoint at.
+      "securityLevel": "A String", # Configures whether security (HTTPS) should be enforced for this URL.
+      "authFailAction": "A String", # For users not logged in, how to handle access to resources with required login. Defaults to "redirect".
+      "login": "A String", # What level of login is required to access this resource. Default is "optional".
+      "script": "A String", # Specifies the path to the script from the application root directory.
+    },
+    "threadsafe": True or False, # If true, multiple requests can be dispatched to the app at once.
+    "healthCheck": { # Configure health checking for the VM instances. Unhealthy VM instances will be killed and replaced with new instances. # Configure health checking for the VM instances. Unhealthy VM instances will be stopped and replaced with new instances. Only returned in `GET` requests if `view=FULL` is set. May only be set on create requests; once created, is immutable.
+      "restartThreshold": 42, # The number of consecutive failed health checks before an instance is restarted.
+      "checkInterval": "A String", # The interval between health checks.
+      "unhealthyThreshold": 42, # The number of consecutive failed health checks before removing traffic.
+      "healthyThreshold": 42, # The number of consecutive successful health checks before receiving traffic.
+      "host": "A String", # The host header to send when performing an HTTP health check (e.g. myapp.appspot.com)
+      "timeout": "A String", # The amount of time before the health check is considered failed.
+      "disableHealthCheck": True or False, # Whether to explicitly disable health checks for this instance.
+    },
+    "defaultExpiration": "A String", # The length of time a static file served by a static file handler ought to be cached by web proxies and browsers, if the handler does not specify its own expiration. Only returned in `GET` requests if `view=FULL` is set. May only be set on create requests; once created, is immutable.
+    "libraries": [ # Configuration for Python runtime third-party libraries required by the application. Only returned in `GET` requests if `view=FULL` is set. May only be set on create requests; once created, is immutable.
+      { # A Python runtime third-party library required by the application.
+        "version": "A String", # The version of the library to select, or "latest".
+        "name": "A String", # The name of the library, e.g. "PIL" or "django".
+      },
+    ],
+    "deployer": "A String", # The email address of the user who created this version. @OutputOnly
+    "env": "A String", # The App Engine execution environment to use for this version. Default: "1"
+    "diskUsageBytes": "A String", # Total size of version files hosted on App Engine disk in bytes. @OutputOnly
+    "automaticScaling": { # Automatic scaling is the scaling policy that App Engine has used since its inception. It is based on request rate, response latencies, and other application metrics. # Automatic scaling is the scaling policy that App Engine has used since its inception. It is based on request rate, response latencies, and other application metrics.
+      "minPendingLatency": "A String", # The minimum amount of time that App Engine should allow a request to wait in the pending queue before starting a new instance to handle it.
+      "networkUtilization": { # Target scaling by network usage (for VM runtimes only). # Target scaling by network usage.
+        "targetReceivedBytesPerSec": 42, # Target bytes per second received.
+        "targetSentBytesPerSec": 42, # Target bytes per second sent.
+        "targetReceivedPacketsPerSec": 42, # Target packets per second received.
+        "targetSentPacketsPerSec": 42, # Target packets per second sent.
+      },
+      "diskUtilization": { # Target scaling by disk usage (for VM runtimes only). # Target scaling by disk usage.
+        "targetWriteOpsPerSec": 42, # Target ops per second written.
+        "targetReadBytesPerSec": 42, # Target bytes per second read.
+        "targetReadOpsPerSec": 42, # Target ops per second read.
+        "targetWriteBytesPerSec": 42, # Target bytes per second written.
+      },
+      "maxPendingLatency": "A String", # The maximum amount of time that App Engine should allow a request to wait in the pending queue before starting a new instance to handle it.
+      "maxIdleInstances": 42, # The maximum number of idle instances that App Engine should maintain for this version.
+      "minIdleInstances": 42, # The minimum number of idle instances that App Engine should maintain for this version. Only applies to the default version of a service, since other versions are not expected to receive significant traffic.
+      "requestUtilization": { # Target scaling by request utilization (for VM runtimes only). # Target scaling by request utilization.
+        "targetConcurrentRequests": 42, # Target number of concurrent requests.
+        "targetRequestCountPerSec": 42, # Target requests per second.
+      },
+      "coolDownPeriod": "A String", # The amount of time that the [Autoscaler](https://cloud.google.com/compute/docs/autoscaler/) should wait between changes to the number of virtual machines. Applies only to the VM runtime.
+      "maxTotalInstances": 42, # Max number of instances that App Engine should start to handle requests.
+      "maxConcurrentRequests": 42, # The number of concurrent requests an automatic scaling instance can accept before the scheduler spawns a new instance. Default value is chosen based on the runtime.
+      "minTotalInstances": 42, # Minimum number of instances that App Engine should maintain.
+      "cpuUtilization": { # Target scaling by CPU usage. # Target scaling by CPU usage.
+        "targetUtilization": 3.14, # Target (0-1) CPU utilization ratio to maintain when scaling.
+        "aggregationWindowLength": "A String", # The period of time over which CPU utilization is calculated.
+      },
+    },
+    "envVariables": { # Environment variables made available to the application. Only returned in `GET` requests if `view=FULL` is set. May only be set on create requests; once created, is immutable.
+      "a_key": "A String",
+    },
+    "resources": { # Used to specify how many machine resources an app version needs. # Used to specify how many machine resources an app version needs (for VM runtimes only).
+      "diskGb": 3.14, # How much disk size, in GB, an app version needs.
+      "cpu": 3.14, # How many CPU cores an app version needs.
+      "memoryGb": 3.14, # How much memory, in GB, an app version needs.
+    },
+    "manualScaling": { # A service with manual scaling runs continuously, allowing you to perform complex initialization and rely on the state of its memory over time. # A service with manual scaling runs continuously, allowing you to perform complex initialization and rely on the state of its memory over time.
+      "instances": 42, # The number of instances to assign to the service at the start. This number can later be altered by using the [Modules API](https://cloud.google.com/appengine/docs/python/modules/functions) `set_num_instances()` function.
+    },
+    "inboundServices": [ # Before an application can receive email or XMPP messages, the application must be configured to enable the service.
+      "A String",
+    ],
+    "deployment": { # Code and application artifacts used to deploy a version to App Engine. # Code and application artifacts that make up this version. Only returned in `GET` requests if `view=FULL` is set. May only be set on create requests; once created, is immutable.
+      "files": { # A manifest of files stored in Google Cloud Storage which should be included as part of this application. All files must be readable using the credentials supplied with this call.
+        "a_key": { # A single source file which is part of the application to be deployed.
+          "mimeType": "A String", # The MIME type of the file; if unspecified, the value from Google Cloud Storage will be used.
+          "sourceUrl": "A String", # The URL source to use to fetch this file. Must be a URL to a resource in Google Cloud Storage in the form 'http(s)://storage.googleapis.com/\/\'.
+          "sha1Sum": "A String", # The SHA1 (160 bits) hash of the file in hex.
+        },
+      },
+      "sourceReferences": [ # The origin of the source code for this deployment. There can be more than one source reference per Version if source code is distributed among multiple repositories.
+        { # A reference to a particular snapshot of the source tree used to build and deploy the application.
+          "revisionId": "A String", # The canonical (and persistent) identifier of the deployed revision, i.e. any kind of aliases including tags or branch names are not allowed. Example (git): "2198322f89e0bb2e25021667c2ed489d1fd34e6b"
+          "repository": "A String", # Optional. A URI string identifying the repository. Example: "https://source.developers.google.com/p/app-123/r/default"
+        },
+      ],
+      "container": { # A Docker (container) image which should be used to start the application. # If supplied, a docker (container) image which should be used to start the application. Only applicable to the 'vm' runtime.
+        "image": "A String", # Reference to a hosted container image. Must be a URI to a resource in a Docker repository. Must be fully qualified, including tag or digest. e.g. gcr.io/my-project/image:tag or gcr.io/my-project/image@digest
+      },
+    },
+    "network": { # Used to specify extra network settings (for VM runtimes only). # Used to specify extra network settings (for VM runtimes only).
+      "instanceTag": "A String", # A tag to apply to the VM instance during creation.
+      "forwardedPorts": [ # A list of ports (or port pairs) to forward from the VM into the app container.
+        "A String",
+      ],
+      "name": "A String", # The Google Compute Engine network where the VMs will be created. If not specified, or empty, the network named "default" will be used. (The short name should be specified, not the resource path.)
+    },
+    "nobuildFilesRegex": "A String", # Go only. Files that match this pattern will not be built into the app. May only be set on create requests.
+    "name": "A String", # The full path to the Version resource in the API. Example: "apps/myapp/services/default/versions/v1". @OutputOnly
+    "handlers": [ # An ordered list of URL Matching patterns that should be applied to incoming requests. The first matching URL consumes the request, and subsequent handlers are not attempted. Only returned in `GET` requests if `view=FULL` is set. May only be set on create requests; once created, is immutable.
+      { # A URL pattern and description of how it should be handled. App Engine can handle URLs by executing application code, or by serving static files uploaded with the code, such as images, CSS or JavaScript.
+        "securityLevel": "A String", # Configures whether security (HTTPS) should be enforced for this URL.
+        "authFailAction": "A String", # For users not logged in, how to handle access to resources with required login. Defaults to "redirect".
+        "urlRegex": "A String", # A URL prefix. This value uses regular expression syntax (and so regexp special characters must be escaped), but it should not contain groupings. All URLs that begin with this prefix are handled by this handler, using the portion of the URL after the prefix as part of the file path. This is always required.
+        "script": { # Executes a script to handle the request that matches the URL pattern. # Executes a script to handle the request that matches the URL pattern.
+          "scriptPath": "A String", # Specifies the path to the script from the application root directory.
+        },
+        "staticFiles": { # Files served directly to the user for a given URL, such as images, CSS stylesheets, or JavaScript source files. Static file handlers describe which files in the application directory are static files, and which URLs serve them. # Returns the contents of a file, such as an image, as the response.
+          "mimeType": "A String", # If specified, all files served by this handler will be served using the specified MIME type. If not specified, the MIME type for a file will be derived from the file's filename extension.
+          "applicationReadable": True or False, # By default, files declared in static file handlers are uploaded as static data and are only served to end users, they cannot be read by an application. If this field is set to true, the files are also uploaded as code data so your application can read them. Both uploads are charged against your code and static data storage resource quotas.
+          "expiration": "A String", # The length of time a static file served by this handler ought to be cached by web proxies and browsers.
+          "requireMatchingFile": True or False, # If true, this UrlMap entry does not match the request unless the file referenced by the handler also exists. If no such file exists, processing will continue with the next UrlMap that matches the requested URL.
+          "uploadPathRegex": "A String", # A regular expression that matches the file paths for all files that will be referenced by this handler.
+          "path": "A String", # The path to the static files matched by the URL pattern, from the application root directory. The path can refer to text matched in groupings in the URL pattern.
+          "httpHeaders": { # HTTP headers to use for all responses from these URLs.
+            "a_key": "A String",
+          },
+        },
+        "apiEndpoint": { # Use Google Cloud Endpoints to handle requests. # Use API Endpoints to handle requests.
+          "scriptPath": "A String", # Specifies the path to the script from the application root directory.
+        },
+        "login": "A String", # What level of login is required to access this resource.
+        "redirectHttpResponseCode": "A String", # `30x` code to use when performing redirects for the `secure` field. A `302` is used by default.
+      },
+    ],
+    "creationTime": "A String", # Creation time of this version. This will be between the start and end times of the operation that creates this version. @OutputOnly
+    "servingStatus": "A String", # The current serving status of this version. Only `SERVING` versions will have instances created or billed for. If this field is unset when a version is created, `SERVING` status will be assumed. It is an error to explicitly set this field to `SERVING_STATUS_UNSPECIFIED`.
+    "runtime": "A String", # The desired runtime. Values can include python27, java7, go, etc.
+  }
+
+  mask: string, Standard field mask for the set of fields to be updated.
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a network API call.
+    "response": { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+    "error": { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model is designed to be: - Simple to use and understand for most users - Flexible enough to meet unexpected needs # Overview The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` which can be used for common error conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments. Example uses of this error model include: - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting purpose. - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response. - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message. - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons. # The error result of the operation in case of failure.
+      "message": "A String", # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
+      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+      "details": [ # A list of messages that carry the error details. There will be a common set of message types for APIs to use.
+        {
+          "a_key": "", # Properties of the object. Contains field @ype with type URL.
+        },
+      ],
+    },
+    "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
+    "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+  }</pre>
+</div>
+
 </body></html>
\ No newline at end of file
diff --git a/docs/dyn/appengine_v1beta5.apps.services.versions.instances.html b/docs/dyn/appengine_v1beta5.apps.services.versions.instances.html
new file mode 100644
index 0000000..87d2deb
--- /dev/null
+++ b/docs/dyn/appengine_v1beta5.apps.services.versions.instances.html
@@ -0,0 +1,137 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="appengine_v1beta5.html">Google App Engine Admin API</a> . <a href="appengine_v1beta5.apps.html">apps</a> . <a href="appengine_v1beta5.apps.services.html">services</a> . <a href="appengine_v1beta5.apps.services.versions.html">versions</a> . <a href="appengine_v1beta5.apps.services.versions.instances.html">instances</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(appsId, servicesId, versionsId, pageSize=None, x__xgafv=None, pageToken=None)</a></code></p>
+<p class="firstline">Lists the instances of a version.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(appsId, servicesId, versionsId, pageSize=None, x__xgafv=None, pageToken=None)</code>
+  <pre>Lists the instances of a version.
+
+Args:
+  appsId: string, Part of `name`. Name of the resource requested. For example: "apps/myapp/services/default/versions/v1". (required)
+  servicesId: string, Part of `name`. See documentation of `appsId`. (required)
+  versionsId: string, Part of `name`. See documentation of `appsId`. (required)
+  pageSize: integer, Maximum results to return per page.
+  x__xgafv: string, V1 error format.
+  pageToken: string, Continuation token for fetching the next page of results.
+
+Returns:
+  An object of the form:
+
+    { # Response message for `Instances.ListInstances`.
+    "nextPageToken": "A String", # Continuation token for fetching the next page of results.
+    "instances": [ # The instances belonging to the requested version.
+      { # Instances are the computing units that App Engine uses to automatically scale an application.
+        "errors": 42, # Number of errors since the instance was started. @OutputOnly
+        "name": "A String", # The full path to the Instance resource in the API. Example: "apps/myapp/services/default/versions/v1/instances/instance-1" @OutputOnly
+        "startTimestamp": "A String", # Time when instance was started. @OutputOnly
+        "appEngineRelease": "A String", # The App Engine release the instance is running on. @OutputOnly
+        "vmId": "A String", # For VMEngines instances, the GCE VM ID of the instance. @OutputOnly
+        "memoryUsage": "A String", # Memory usage (in bytes). @OutputOnly
+        "id": "A String", # The relative name/path of the instance within the version. Example: "instance-1" @OutputOnly
+        "vmUnlocked": True or False, # For VMEngines instances, whether the instance has been unlocked. @OutputOnly
+        "averageLatency": 42, # Latency in milliseconds (averaged over the last minute). @OutputOnly
+        "qps": 3.14, # QPS for this instance (averaged over the last minute). @OutputOnly
+        "requests": 42, # Number of requests (since the clone was started). @OutputOnly
+        "vmName": "A String", # For VMEngines instances, the name of GCE VM where the instance lives. @OutputOnly
+        "availability": "A String", # Availability of instance. @OutputOnly
+        "vmZoneName": "A String", # For VMEngines instances, the zone where the GCE VM is located. @OutputOnly
+        "vmStatus": "A String", # For VMEngines instances, the status of GCE VM where the instance lives. @OutputOnly
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/appsactivity_v1.activities.html b/docs/dyn/appsactivity_v1.activities.html
index dda5212..4fceeae 100644
--- a/docs/dyn/appsactivity_v1.activities.html
+++ b/docs/dyn/appsactivity_v1.activities.html
@@ -146,7 +146,9 @@
                     "photo": { # Photo information for a user. # The profile photo of the user. Not present if the user has no profile photo.
                       "url": "A String", # The URL of the photo.
                     },
+                    "permissionId": "A String", # The permission ID associated with this user. Equivalent to the Drive API's permission ID for this user, returned as part of the Drive Permissions resource.
                     "name": "A String", # The displayable name of the user.
+                    "isDeleted": True or False, # A boolean which indicates whether the specified User was deleted. If true, name, photo and permission_id will be omitted.
                   },
                   "type": "A String", # Indicates how widely permissions are granted.
                 },
@@ -161,7 +163,9 @@
                     "photo": { # Photo information for a user. # The profile photo of the user. Not present if the user has no profile photo.
                       "url": "A String", # The URL of the photo.
                     },
+                    "permissionId": "A String", # The permission ID associated with this user. Equivalent to the Drive API's permission ID for this user, returned as part of the Drive Permissions resource.
                     "name": "A String", # The displayable name of the user.
+                    "isDeleted": True or False, # A boolean which indicates whether the specified User was deleted. If true, name, photo and permission_id will be omitted.
                   },
                   "type": "A String", # Indicates how widely permissions are granted.
                 },
@@ -172,7 +176,9 @@
             "photo": { # Photo information for a user. # The profile photo of the user. Not present if the user has no profile photo.
               "url": "A String", # The URL of the photo.
             },
+            "permissionId": "A String", # The permission ID associated with this user. Equivalent to the Drive API's permission ID for this user, returned as part of the Drive Permissions resource.
             "name": "A String", # The displayable name of the user.
+            "isDeleted": True or False, # A boolean which indicates whether the specified User was deleted. If true, name, photo and permission_id will be omitted.
           },
           "eventTimeMillis": "A String", # The time at which the event occurred formatted as Unix time in milliseconds.
           "primaryEventType": "A String", # The main type of event that occurred.
@@ -220,7 +226,9 @@
                       "photo": { # Photo information for a user. # The profile photo of the user. Not present if the user has no profile photo.
                         "url": "A String", # The URL of the photo.
                       },
+                      "permissionId": "A String", # The permission ID associated with this user. Equivalent to the Drive API's permission ID for this user, returned as part of the Drive Permissions resource.
                       "name": "A String", # The displayable name of the user.
+                      "isDeleted": True or False, # A boolean which indicates whether the specified User was deleted. If true, name, photo and permission_id will be omitted.
                     },
                     "type": "A String", # Indicates how widely permissions are granted.
                   },
@@ -235,7 +243,9 @@
                       "photo": { # Photo information for a user. # The profile photo of the user. Not present if the user has no profile photo.
                         "url": "A String", # The URL of the photo.
                       },
+                      "permissionId": "A String", # The permission ID associated with this user. Equivalent to the Drive API's permission ID for this user, returned as part of the Drive Permissions resource.
                       "name": "A String", # The displayable name of the user.
+                      "isDeleted": True or False, # A boolean which indicates whether the specified User was deleted. If true, name, photo and permission_id will be omitted.
                     },
                     "type": "A String", # Indicates how widely permissions are granted.
                   },
@@ -246,7 +256,9 @@
               "photo": { # Photo information for a user. # The profile photo of the user. Not present if the user has no profile photo.
                 "url": "A String", # The URL of the photo.
               },
+              "permissionId": "A String", # The permission ID associated with this user. Equivalent to the Drive API's permission ID for this user, returned as part of the Drive Permissions resource.
               "name": "A String", # The displayable name of the user.
+              "isDeleted": True or False, # A boolean which indicates whether the specified User was deleted. If true, name, photo and permission_id will be omitted.
             },
             "eventTimeMillis": "A String", # The time at which the event occurred formatted as Unix time in milliseconds.
             "primaryEventType": "A String", # The main type of event that occurred.
diff --git a/docs/dyn/autoscaler_v1beta2.autoscalers.html b/docs/dyn/autoscaler_v1beta2.autoscalers.html
index eca7190..f568a12 100644
--- a/docs/dyn/autoscaler_v1beta2.autoscalers.html
+++ b/docs/dyn/autoscaler_v1beta2.autoscalers.html
@@ -114,13 +114,14 @@
     "creationTimestamp": "A String",
     "id": "A String",
     "zone": "A String",
+    "insertTime": "A String",
     "operationType": "A String",
     "httpErrorMessage": "A String",
     "progress": 42,
     "httpErrorStatusCode": 42,
     "statusMessage": "A String",
     "status": "A String",
-    "insertTime": "A String",
+    "description": "A String",
     "warnings": [
       {
         "message": "A String",
@@ -135,7 +136,7 @@
     ],
     "user": "A String",
     "startTime": "A String",
-    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#Operation for Operation resources.
+    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String",
     "region": "A String",
     "error": {
@@ -181,7 +182,7 @@
             "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
           },
         ],
-        "cpuUtilization": { # CPU utilization policy. # Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
+        "cpuUtilization": { # CPU utilization policy. # Configuration parameters of CPU based autoscaling policy.
           "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
         },
         "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to.
@@ -220,7 +221,7 @@
           "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
         },
       ],
-      "cpuUtilization": { # CPU utilization policy. # Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
+      "cpuUtilization": { # CPU utilization policy. # Configuration parameters of CPU based autoscaling policy.
         "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
       },
       "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to.
@@ -242,13 +243,14 @@
     "creationTimestamp": "A String",
     "id": "A String",
     "zone": "A String",
+    "insertTime": "A String",
     "operationType": "A String",
     "httpErrorMessage": "A String",
     "progress": 42,
     "httpErrorStatusCode": 42,
     "statusMessage": "A String",
     "status": "A String",
-    "insertTime": "A String",
+    "description": "A String",
     "warnings": [
       {
         "message": "A String",
@@ -263,7 +265,7 @@
     ],
     "user": "A String",
     "startTime": "A String",
-    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#Operation for Operation resources.
+    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String",
     "region": "A String",
     "error": {
@@ -314,7 +316,7 @@
                 "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
               },
             ],
-            "cpuUtilization": { # CPU utilization policy. # Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
+            "cpuUtilization": { # CPU utilization policy. # Configuration parameters of CPU based autoscaling policy.
               "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
             },
             "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to.
@@ -371,7 +373,7 @@
           "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
         },
       ],
-      "cpuUtilization": { # CPU utilization policy. # Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
+      "cpuUtilization": { # CPU utilization policy. # Configuration parameters of CPU based autoscaling policy.
         "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
       },
       "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to.
@@ -393,13 +395,14 @@
     "creationTimestamp": "A String",
     "id": "A String",
     "zone": "A String",
+    "insertTime": "A String",
     "operationType": "A String",
     "httpErrorMessage": "A String",
     "progress": 42,
     "httpErrorStatusCode": 42,
     "statusMessage": "A String",
     "status": "A String",
-    "insertTime": "A String",
+    "description": "A String",
     "warnings": [
       {
         "message": "A String",
@@ -414,7 +417,7 @@
     ],
     "user": "A String",
     "startTime": "A String",
-    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#Operation for Operation resources.
+    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String",
     "region": "A String",
     "error": {
@@ -459,7 +462,7 @@
           "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
         },
       ],
-      "cpuUtilization": { # CPU utilization policy. # Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
+      "cpuUtilization": { # CPU utilization policy. # Configuration parameters of CPU based autoscaling policy.
         "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
       },
       "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to.
@@ -481,13 +484,14 @@
     "creationTimestamp": "A String",
     "id": "A String",
     "zone": "A String",
+    "insertTime": "A String",
     "operationType": "A String",
     "httpErrorMessage": "A String",
     "progress": 42,
     "httpErrorStatusCode": 42,
     "statusMessage": "A String",
     "status": "A String",
-    "insertTime": "A String",
+    "description": "A String",
     "warnings": [
       {
         "message": "A String",
@@ -502,7 +506,7 @@
     ],
     "user": "A String",
     "startTime": "A String",
-    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#Operation for Operation resources.
+    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String",
     "region": "A String",
     "error": {
diff --git a/docs/dyn/autoscaler_v1beta2.zoneOperations.html b/docs/dyn/autoscaler_v1beta2.zoneOperations.html
index c9ccefd..a96a39e 100644
--- a/docs/dyn/autoscaler_v1beta2.zoneOperations.html
+++ b/docs/dyn/autoscaler_v1beta2.zoneOperations.html
@@ -116,13 +116,14 @@
     "creationTimestamp": "A String",
     "id": "A String",
     "zone": "A String",
+    "insertTime": "A String",
     "operationType": "A String",
     "httpErrorMessage": "A String",
     "progress": 42,
     "httpErrorStatusCode": 42,
     "statusMessage": "A String",
     "status": "A String",
-    "insertTime": "A String",
+    "description": "A String",
     "warnings": [
       {
         "message": "A String",
@@ -137,7 +138,7 @@
     ],
     "user": "A String",
     "startTime": "A String",
-    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#Operation for Operation resources.
+    "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String",
     "region": "A String",
     "error": {
@@ -178,13 +179,14 @@
         "creationTimestamp": "A String",
         "id": "A String",
         "zone": "A String",
+        "insertTime": "A String",
         "operationType": "A String",
         "httpErrorMessage": "A String",
         "progress": 42,
         "httpErrorStatusCode": 42,
         "statusMessage": "A String",
         "status": "A String",
-        "insertTime": "A String",
+        "description": "A String",
         "warnings": [
           {
             "message": "A String",
@@ -199,7 +201,7 @@
         ],
         "user": "A String",
         "startTime": "A String",
-        "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#Operation for Operation resources.
+        "kind": "autoscaler#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
         "name": "A String",
         "region": "A String",
         "error": {
diff --git a/docs/dyn/autoscaler_v1beta2.zones.html b/docs/dyn/autoscaler_v1beta2.zones.html
index afef385..6198a78 100644
--- a/docs/dyn/autoscaler_v1beta2.zones.html
+++ b/docs/dyn/autoscaler_v1beta2.zones.html
@@ -75,19 +75,19 @@
 <h1><a href="autoscaler_v1beta2.html">Google Compute Engine Autoscaler API</a> . <a href="autoscaler_v1beta2.zones.html">zones</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#list">list(project, maxResults=None, pageToken=None, filter=None)</a></code></p>
+  <code><a href="#list">list(maxResults=None, project=None, pageToken=None, filter=None)</a></code></p>
 <p class="firstline"></p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(project, maxResults=None, pageToken=None, filter=None)</code>
+    <code class="details" id="list">list(maxResults=None, project=None, pageToken=None, filter=None)</code>
   <pre>
 
 Args:
-  project: string, A parameter (required)
   maxResults: integer, A parameter
+  project: string, A parameter
   pageToken: string, A parameter
   filter: string, A parameter
 
@@ -99,16 +99,8 @@
     "items": [
       {
         "status": "A String",
-        "kind": "autoscaler#zone", # [Output Only] Type of the resource. Always kind#zone for zones.
+        "kind": "autoscaler#zone", # [Output Only] Type of the resource. Always compute#zone for zones.
         "description": "A String",
-        "maintenanceWindows": [
-          {
-            "endTime": "A String",
-            "beginTime": "A String",
-            "name": "A String",
-            "description": "A String",
-          },
-        ],
         "deprecated": {
           "deleted": "A String",
           "deprecated": "A String",
@@ -119,13 +111,13 @@
         "region": "A String",
         "creationTimestamp": "A String",
         "id": "A String",
-        "selfLink": "A String", # [Output Only] Server defined URL for the resource.
+        "selfLink": "A String",
         "name": "A String",
       },
     ],
     "kind": "autoscaler#zoneList", # Type of resource.
     "id": "A String",
-    "selfLink": "A String", # Server defined URL for this resource (output only).
+    "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
   }</pre>
 </div>
 
diff --git a/docs/dyn/bigquery_v2.datasets.html b/docs/dyn/bigquery_v2.datasets.html
index 3a2c83c..50f850e 100644
--- a/docs/dyn/bigquery_v2.datasets.html
+++ b/docs/dyn/bigquery_v2.datasets.html
@@ -140,7 +140,7 @@
           },
         },
       ],
-      "defaultTableExpirationMs": "A String", # [Experimental] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
+      "defaultTableExpirationMs": "A String", # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
       "etag": "A String", # [Output-only] A hash of the resource.
       "location": "A String", # [Experimental] The geographic location where the dataset should reside. Possible values include EU and US. The default value is US.
       "friendlyName": "A String", # [Optional] A descriptive name for the dataset.
@@ -181,7 +181,7 @@
         },
       },
     ],
-    "defaultTableExpirationMs": "A String", # [Experimental] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
+    "defaultTableExpirationMs": "A String", # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
     "etag": "A String", # [Output-only] A hash of the resource.
     "location": "A String", # [Experimental] The geographic location where the dataset should reside. Possible values include EU and US. The default value is US.
     "friendlyName": "A String", # [Optional] A descriptive name for the dataset.
@@ -216,7 +216,7 @@
           },
         },
       ],
-      "defaultTableExpirationMs": "A String", # [Experimental] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
+      "defaultTableExpirationMs": "A String", # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
       "etag": "A String", # [Output-only] A hash of the resource.
       "location": "A String", # [Experimental] The geographic location where the dataset should reside. Possible values include EU and US. The default value is US.
       "friendlyName": "A String", # [Optional] A descriptive name for the dataset.
@@ -303,7 +303,7 @@
         },
       },
     ],
-    "defaultTableExpirationMs": "A String", # [Experimental] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
+    "defaultTableExpirationMs": "A String", # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
     "etag": "A String", # [Output-only] A hash of the resource.
     "location": "A String", # [Experimental] The geographic location where the dataset should reside. Possible values include EU and US. The default value is US.
     "friendlyName": "A String", # [Optional] A descriptive name for the dataset.
@@ -338,7 +338,7 @@
           },
         },
       ],
-      "defaultTableExpirationMs": "A String", # [Experimental] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
+      "defaultTableExpirationMs": "A String", # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
       "etag": "A String", # [Output-only] A hash of the resource.
       "location": "A String", # [Experimental] The geographic location where the dataset should reside. Possible values include EU and US. The default value is US.
       "friendlyName": "A String", # [Optional] A descriptive name for the dataset.
@@ -380,7 +380,7 @@
         },
       },
     ],
-    "defaultTableExpirationMs": "A String", # [Experimental] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
+    "defaultTableExpirationMs": "A String", # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
     "etag": "A String", # [Output-only] A hash of the resource.
     "location": "A String", # [Experimental] The geographic location where the dataset should reside. Possible values include EU and US. The default value is US.
     "friendlyName": "A String", # [Optional] A descriptive name for the dataset.
@@ -415,7 +415,7 @@
           },
         },
       ],
-      "defaultTableExpirationMs": "A String", # [Experimental] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
+      "defaultTableExpirationMs": "A String", # [Optional] The default lifetime of all tables in the dataset, in milliseconds. The minimum value is 3600000 milliseconds (one hour). Once this property is set, all newly-created tables in the dataset will have an expirationTime property set to the creation time plus the value in this property, and changing the value will only affect new tables, not existing ones. When the expirationTime for a given table is reached, that table will be deleted automatically. If a table's expirationTime is modified or removed before the table expires, or if you provide an explicit expirationTime when creating a table, that value takes precedence over the default expiration time indicated by this property.
       "etag": "A String", # [Output-only] A hash of the resource.
       "location": "A String", # [Experimental] The geographic location where the dataset should reside. Possible values include EU and US. The default value is US.
       "friendlyName": "A String", # [Optional] A descriptive name for the dataset.
diff --git a/docs/dyn/bigquery_v2.jobs.html b/docs/dyn/bigquery_v2.jobs.html
index 0341827..431a220 100644
--- a/docs/dyn/bigquery_v2.jobs.html
+++ b/docs/dyn/bigquery_v2.jobs.html
@@ -173,6 +173,19 @@
                 "datasetId": "A String", # [Required] The ID of the dataset containing this table.
               },
             ],
+            "schema": { # [Output-only, Experimental] The schema of the results. Present only for successful dry run of non-legacy SQL queries.
+              "fields": [ # Describes the fields in a table.
+                {
+                  "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
+                    # Object with schema name: TableFieldSchema
+                  ],
+                  "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                  "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
+                  "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
+                  "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+                },
+              ],
+            },
           },
           "endTime": "A String", # [Output-only] End time of this job, in milliseconds since the epoch. This field will be present whenever a job is in the DONE state.
           "extract": { # [Output-only] Statistics for an extract job.
@@ -189,9 +202,10 @@
         "user_email": "A String", # [Output-only] Email address of the user who ran the job.
         "configuration": { # [Required] Describes the job configuration.
           "load": { # [Pick one] Configures a load job.
+            "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro, specify "AVRO". The default value is CSV.
             "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
             "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. The separator can be any ISO-8859-1 single-byte character. To use a character in the range 128-255, you must encode the character as UTF8. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
-            "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default value is CSV.
+            "autodetect": True or False, # [Experimental] Indicates if we should automatically infer the options and schema for CSV and JSON sources.
             "destinationTable": { # [Required] The destination table to load the data into.
               "projectId": "A String", # [Required] The ID of the project containing this table.
               "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -219,7 +233,7 @@
                   "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                     # Object with schema name: TableFieldSchema
                   ],
-                  "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                  "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
                   "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
                   "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
                   "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -272,7 +286,7 @@
               "projectId": "A String", # [Optional] The ID of the project containing this dataset.
               "datasetId": "A String", # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
             },
-            "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's updated SQL dialect with improved standards compliance. When using BigQuery's updated SQL, the values of allowLargeResults and flattenResults are ignored. Queries with useLegacySql set to false will be run as if allowLargeResults is true and flattenResults is false.
+            "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's standard SQL: https://cloud.google.com/bigquery/sql-reference/ When useLegacySql is set to false, the values of allowLargeResults and flattenResults are ignored; query will be run as if allowLargeResults is true and flattenResults is false.
             "destinationTable": { # [Optional] Describes the table where the query results should be stored. If not present, a new table will be created to store the results.
               "projectId": "A String", # [Required] The ID of the project containing this table.
               "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -286,28 +300,53 @@
             "preserveNulls": True or False, # [Deprecated] This property is deprecated.
             "tableDefinitions": { # [Optional] If querying an external data source outside of BigQuery, describes the data format, location and other properties of the data source. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
               "a_key": {
-                "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+                "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
                 "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
                   "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
                   "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-                  "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+                  "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
                   "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
                   "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
                   "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
                 },
-                "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-                "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-                "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-                "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+                "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+                "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+                "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+                "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
                   "A String",
                 ],
-                "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+                "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+                  "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+                  "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+                    {
+                      "familyId": "A String", # Identifier of the column family.
+                      "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+                      "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+                      "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+                        {
+                          "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                          "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                          "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                          "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                          "qualifierString": "A String",
+                          "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+                        },
+                      ],
+                      "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+                    },
+                  ],
+                },
+                "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+                "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+                  "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+                },
+                "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
                   "fields": [ # Describes the fields in a table.
                     {
                       "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                         # Object with schema name: TableFieldSchema
                       ],
-                      "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                      "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
                       "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
                       "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
                       "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -407,6 +446,19 @@
               "datasetId": "A String", # [Required] The ID of the dataset containing this table.
             },
           ],
+          "schema": { # [Output-only, Experimental] The schema of the results. Present only for successful dry run of non-legacy SQL queries.
+            "fields": [ # Describes the fields in a table.
+              {
+                "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
+                  # Object with schema name: TableFieldSchema
+                ],
+                "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
+                "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
+                "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+              },
+            ],
+          },
         },
         "endTime": "A String", # [Output-only] End time of this job, in milliseconds since the epoch. This field will be present whenever a job is in the DONE state.
         "extract": { # [Output-only] Statistics for an extract job.
@@ -423,9 +475,10 @@
       "user_email": "A String", # [Output-only] Email address of the user who ran the job.
       "configuration": { # [Required] Describes the job configuration.
         "load": { # [Pick one] Configures a load job.
+          "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro, specify "AVRO". The default value is CSV.
           "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
           "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. The separator can be any ISO-8859-1 single-byte character. To use a character in the range 128-255, you must encode the character as UTF8. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
-          "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default value is CSV.
+          "autodetect": True or False, # [Experimental] Indicates if we should automatically infer the options and schema for CSV and JSON sources.
           "destinationTable": { # [Required] The destination table to load the data into.
             "projectId": "A String", # [Required] The ID of the project containing this table.
             "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -453,7 +506,7 @@
                 "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                   # Object with schema name: TableFieldSchema
                 ],
-                "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
                 "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
                 "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
                 "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -506,7 +559,7 @@
             "projectId": "A String", # [Optional] The ID of the project containing this dataset.
             "datasetId": "A String", # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
           },
-          "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's updated SQL dialect with improved standards compliance. When using BigQuery's updated SQL, the values of allowLargeResults and flattenResults are ignored. Queries with useLegacySql set to false will be run as if allowLargeResults is true and flattenResults is false.
+          "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's standard SQL: https://cloud.google.com/bigquery/sql-reference/ When useLegacySql is set to false, the values of allowLargeResults and flattenResults are ignored; query will be run as if allowLargeResults is true and flattenResults is false.
           "destinationTable": { # [Optional] Describes the table where the query results should be stored. If not present, a new table will be created to store the results.
             "projectId": "A String", # [Required] The ID of the project containing this table.
             "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -520,28 +573,53 @@
           "preserveNulls": True or False, # [Deprecated] This property is deprecated.
           "tableDefinitions": { # [Optional] If querying an external data source outside of BigQuery, describes the data format, location and other properties of the data source. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
             "a_key": {
-              "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+              "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
               "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
                 "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
                 "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-                "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+                "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
                 "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
                 "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
                 "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
               },
-              "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-              "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-              "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-              "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+              "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+              "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+              "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+              "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
                 "A String",
               ],
-              "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+              "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+                "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+                "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+                  {
+                    "familyId": "A String", # Identifier of the column family.
+                    "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+                    "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+                    "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+                      {
+                        "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                        "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                        "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                        "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                        "qualifierString": "A String",
+                        "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+                      },
+                    ],
+                    "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+                  },
+                ],
+              },
+              "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+              "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+                "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+              },
+              "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
                 "fields": [ # Describes the fields in a table.
                   {
                     "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                       # Object with schema name: TableFieldSchema
                     ],
-                    "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                    "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
                     "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
                     "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
                     "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -613,7 +691,7 @@
           "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+          "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
           "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
           "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
           "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -697,6 +775,19 @@
             "datasetId": "A String", # [Required] The ID of the dataset containing this table.
           },
         ],
+        "schema": { # [Output-only, Experimental] The schema of the results. Present only for successful dry run of non-legacy SQL queries.
+          "fields": [ # Describes the fields in a table.
+            {
+              "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
+                # Object with schema name: TableFieldSchema
+              ],
+              "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+              "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
+              "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
+              "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+            },
+          ],
+        },
       },
       "endTime": "A String", # [Output-only] End time of this job, in milliseconds since the epoch. This field will be present whenever a job is in the DONE state.
       "extract": { # [Output-only] Statistics for an extract job.
@@ -713,9 +804,10 @@
     "user_email": "A String", # [Output-only] Email address of the user who ran the job.
     "configuration": { # [Required] Describes the job configuration.
       "load": { # [Pick one] Configures a load job.
+        "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro, specify "AVRO". The default value is CSV.
         "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
         "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. The separator can be any ISO-8859-1 single-byte character. To use a character in the range 128-255, you must encode the character as UTF8. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
-        "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default value is CSV.
+        "autodetect": True or False, # [Experimental] Indicates if we should automatically infer the options and schema for CSV and JSON sources.
         "destinationTable": { # [Required] The destination table to load the data into.
           "projectId": "A String", # [Required] The ID of the project containing this table.
           "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -743,7 +835,7 @@
               "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                 # Object with schema name: TableFieldSchema
               ],
-              "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+              "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
               "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
               "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
               "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -796,7 +888,7 @@
           "projectId": "A String", # [Optional] The ID of the project containing this dataset.
           "datasetId": "A String", # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
         },
-        "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's updated SQL dialect with improved standards compliance. When using BigQuery's updated SQL, the values of allowLargeResults and flattenResults are ignored. Queries with useLegacySql set to false will be run as if allowLargeResults is true and flattenResults is false.
+        "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's standard SQL: https://cloud.google.com/bigquery/sql-reference/ When useLegacySql is set to false, the values of allowLargeResults and flattenResults are ignored; query will be run as if allowLargeResults is true and flattenResults is false.
         "destinationTable": { # [Optional] Describes the table where the query results should be stored. If not present, a new table will be created to store the results.
           "projectId": "A String", # [Required] The ID of the project containing this table.
           "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -810,28 +902,53 @@
         "preserveNulls": True or False, # [Deprecated] This property is deprecated.
         "tableDefinitions": { # [Optional] If querying an external data source outside of BigQuery, describes the data format, location and other properties of the data source. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
           "a_key": {
-            "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+            "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
             "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
               "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
               "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-              "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+              "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
               "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
               "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
               "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
             },
-            "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-            "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-            "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-            "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+            "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+            "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+            "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+            "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
               "A String",
             ],
-            "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+            "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+              "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+              "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+                {
+                  "familyId": "A String", # Identifier of the column family.
+                  "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+                  "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+                  "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+                    {
+                      "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                      "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                      "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                      "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                      "qualifierString": "A String",
+                      "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+                    },
+                  ],
+                  "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+                },
+              ],
+            },
+            "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+            "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+              "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+            },
+            "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
               "fields": [ # Describes the fields in a table.
                 {
                   "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                     # Object with schema name: TableFieldSchema
                   ],
-                  "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                  "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
                   "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
                   "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
                   "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -922,6 +1039,19 @@
               "datasetId": "A String", # [Required] The ID of the dataset containing this table.
             },
           ],
+          "schema": { # [Output-only, Experimental] The schema of the results. Present only for successful dry run of non-legacy SQL queries.
+            "fields": [ # Describes the fields in a table.
+              {
+                "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
+                  # Object with schema name: TableFieldSchema
+                ],
+                "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
+                "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
+                "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+              },
+            ],
+          },
         },
         "endTime": "A String", # [Output-only] End time of this job, in milliseconds since the epoch. This field will be present whenever a job is in the DONE state.
         "extract": { # [Output-only] Statistics for an extract job.
@@ -938,9 +1068,10 @@
       "user_email": "A String", # [Output-only] Email address of the user who ran the job.
       "configuration": { # [Required] Describes the job configuration.
         "load": { # [Pick one] Configures a load job.
+          "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro, specify "AVRO". The default value is CSV.
           "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
           "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. The separator can be any ISO-8859-1 single-byte character. To use a character in the range 128-255, you must encode the character as UTF8. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
-          "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default value is CSV.
+          "autodetect": True or False, # [Experimental] Indicates if we should automatically infer the options and schema for CSV and JSON sources.
           "destinationTable": { # [Required] The destination table to load the data into.
             "projectId": "A String", # [Required] The ID of the project containing this table.
             "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -968,7 +1099,7 @@
                 "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                   # Object with schema name: TableFieldSchema
                 ],
-                "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
                 "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
                 "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
                 "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -1021,7 +1152,7 @@
             "projectId": "A String", # [Optional] The ID of the project containing this dataset.
             "datasetId": "A String", # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
           },
-          "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's updated SQL dialect with improved standards compliance. When using BigQuery's updated SQL, the values of allowLargeResults and flattenResults are ignored. Queries with useLegacySql set to false will be run as if allowLargeResults is true and flattenResults is false.
+          "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's standard SQL: https://cloud.google.com/bigquery/sql-reference/ When useLegacySql is set to false, the values of allowLargeResults and flattenResults are ignored; query will be run as if allowLargeResults is true and flattenResults is false.
           "destinationTable": { # [Optional] Describes the table where the query results should be stored. If not present, a new table will be created to store the results.
             "projectId": "A String", # [Required] The ID of the project containing this table.
             "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -1035,28 +1166,53 @@
           "preserveNulls": True or False, # [Deprecated] This property is deprecated.
           "tableDefinitions": { # [Optional] If querying an external data source outside of BigQuery, describes the data format, location and other properties of the data source. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
             "a_key": {
-              "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+              "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
               "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
                 "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
                 "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-                "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+                "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
                 "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
                 "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
                 "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
               },
-              "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-              "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-              "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-              "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+              "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+              "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+              "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+              "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
                 "A String",
               ],
-              "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+              "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+                "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+                "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+                  {
+                    "familyId": "A String", # Identifier of the column family.
+                    "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+                    "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+                    "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+                      {
+                        "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                        "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                        "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                        "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                        "qualifierString": "A String",
+                        "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+                      },
+                    ],
+                    "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+                  },
+                ],
+              },
+              "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+              "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+                "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+              },
+              "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
                 "fields": [ # Describes the fields in a table.
                   {
                     "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                       # Object with schema name: TableFieldSchema
                     ],
-                    "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                    "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
                     "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
                     "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
                     "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -1170,6 +1326,19 @@
                 "datasetId": "A String", # [Required] The ID of the dataset containing this table.
               },
             ],
+            "schema": { # [Output-only, Experimental] The schema of the results. Present only for successful dry run of non-legacy SQL queries.
+              "fields": [ # Describes the fields in a table.
+                {
+                  "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
+                    # Object with schema name: TableFieldSchema
+                  ],
+                  "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                  "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
+                  "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
+                  "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
+                },
+              ],
+            },
           },
           "endTime": "A String", # [Output-only] End time of this job, in milliseconds since the epoch. This field will be present whenever a job is in the DONE state.
           "extract": { # [Output-only] Statistics for an extract job.
@@ -1186,9 +1355,10 @@
         "user_email": "A String", # [Full-projection-only] Email address of the user who ran the job.
         "configuration": { # [Full-projection-only] Specifies the job configuration.
           "load": { # [Pick one] Configures a load job.
+            "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro, specify "AVRO". The default value is CSV.
             "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
             "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. The separator can be any ISO-8859-1 single-byte character. To use a character in the range 128-255, you must encode the character as UTF8. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
-            "sourceFormat": "A String", # [Optional] The format of the data files. For CSV files, specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default value is CSV.
+            "autodetect": True or False, # [Experimental] Indicates if we should automatically infer the options and schema for CSV and JSON sources.
             "destinationTable": { # [Required] The destination table to load the data into.
               "projectId": "A String", # [Required] The ID of the project containing this table.
               "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -1216,7 +1386,7 @@
                   "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                     # Object with schema name: TableFieldSchema
                   ],
-                  "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                  "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
                   "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
                   "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
                   "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -1269,7 +1439,7 @@
               "projectId": "A String", # [Optional] The ID of the project containing this dataset.
               "datasetId": "A String", # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
             },
-            "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's updated SQL dialect with improved standards compliance. When using BigQuery's updated SQL, the values of allowLargeResults and flattenResults are ignored. Queries with useLegacySql set to false will be run as if allowLargeResults is true and flattenResults is false.
+            "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's standard SQL: https://cloud.google.com/bigquery/sql-reference/ When useLegacySql is set to false, the values of allowLargeResults and flattenResults are ignored; query will be run as if allowLargeResults is true and flattenResults is false.
             "destinationTable": { # [Optional] Describes the table where the query results should be stored. If not present, a new table will be created to store the results.
               "projectId": "A String", # [Required] The ID of the project containing this table.
               "tableId": "A String", # [Required] The ID of the table. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
@@ -1283,28 +1453,53 @@
             "preserveNulls": True or False, # [Deprecated] This property is deprecated.
             "tableDefinitions": { # [Optional] If querying an external data source outside of BigQuery, describes the data format, location and other properties of the data source. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
               "a_key": {
-                "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+                "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
                 "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
                   "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
                   "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-                  "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+                  "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
                   "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
                   "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
                   "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
                 },
-                "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-                "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-                "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-                "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+                "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+                "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+                "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+                "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
                   "A String",
                 ],
-                "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+                "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+                  "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+                  "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+                    {
+                      "familyId": "A String", # Identifier of the column family.
+                      "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+                      "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+                      "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+                        {
+                          "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                          "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                          "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                          "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                          "qualifierString": "A String",
+                          "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+                        },
+                      ],
+                      "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+                    },
+                  ],
+                },
+                "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+                "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+                  "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+                },
+                "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
                   "fields": [ # Describes the fields in a table.
                     {
                       "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                         # Object with schema name: TableFieldSchema
                       ],
-                      "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+                      "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
                       "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
                       "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
                       "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -1365,7 +1560,7 @@
       "projectId": "A String", # [Optional] The ID of the project containing this dataset.
       "datasetId": "A String", # [Required] A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters.
     },
-    "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's updated SQL dialect with improved standards compliance. When using BigQuery's updated SQL, the values of allowLargeResults and flattenResults are ignored. Queries with useLegacySql set to false will be run as if allowLargeResults is true and flattenResults is false.
+    "useLegacySql": True or False, # [Experimental] Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's standard SQL: https://cloud.google.com/bigquery/sql-reference/ When useLegacySql is set to false, the values of allowLargeResults and flattenResults are ignored; query will be run as if allowLargeResults is true and flattenResults is false.
     "maxResults": 42, # [Optional] The maximum number of rows of data to return per page of results. Setting this flag to a small value such as 1000 and then paging through results might improve reliability when the query result set is large. In addition to this limit, responses are also limited to 10 MB. By default, there is no maximum row count, and only the byte limit applies.
     "query": "A String", # [Required] A query string, following the BigQuery query syntax, of the query to execute. Example: "SELECT count(f1) FROM [myProjectId:myDatasetId.myTableId]".
     "preserveNulls": True or False, # [Deprecated] This property is deprecated.
@@ -1409,7 +1604,7 @@
           "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+          "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
           "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
           "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
           "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
diff --git a/docs/dyn/bigquery_v2.tables.html b/docs/dyn/bigquery_v2.tables.html
index bda0cd3..be88588 100644
--- a/docs/dyn/bigquery_v2.tables.html
+++ b/docs/dyn/bigquery_v2.tables.html
@@ -124,29 +124,63 @@
       "lastModifiedTime": "A String", # [Output-only] The time when this table was last modified, in milliseconds since the epoch.
       "description": "A String", # [Optional] A user-friendly description of this table.
       "creationTime": "A String", # [Output-only] The time when this table was created, in milliseconds since the epoch.
+      "view": { # [Optional] The view definition.
+        "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
+        "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
+          {
+            "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
+            "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
+          },
+        ],
+      },
       "externalDataConfiguration": { # [Optional] Describes the data format, location, and other properties of a table stored outside of BigQuery. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
-        "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+        "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
         "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
           "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
           "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-          "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+          "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
           "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
           "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
           "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
         },
-        "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-        "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-        "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-        "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+        "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+        "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+        "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+        "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
           "A String",
         ],
-        "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+        "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+          "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+          "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+            {
+              "familyId": "A String", # Identifier of the column family.
+              "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+              "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+              "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+                {
+                  "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                  "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                  "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                  "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                  "qualifierString": "A String",
+                  "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+                },
+              ],
+              "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+            },
+          ],
+        },
+        "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+        "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+          "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+        },
+        "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
           "fields": [ # Describes the fields in a table.
             {
               "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                 # Object with schema name: TableFieldSchema
               ],
-              "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+              "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
               "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
               "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
               "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -169,32 +203,28 @@
         "oldestEntryTime": "A String", # [Output-only] Contains the timestamp of the oldest entry in the streaming buffer, in milliseconds since the epoch, if the streaming buffer is available.
       },
       "friendlyName": "A String", # [Optional] A descriptive name for this table.
-      "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
-      "view": { # [Optional] The view definition.
-        "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
-        "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
-          {
-            "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
-            "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
-          },
-        ],
+      "timePartitioning": { # [Experimental] If specified, configures time-based partitioning for this table.
+        "type": "A String", # [Required] The only type supported is DAY, which will generate one partition per day based on data loading time.
+        "expirationMs": "A String", # [Optional] Number of milliseconds for which to keep the storage for a partition.
       },
-      "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
-      "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
-      "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+      "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
       "schema": { # [Optional] Describes the schema of this table.
         "fields": [ # Describes the fields in a table.
           {
             "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+            "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
             "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
             "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
             "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
           },
         ],
       },
+      "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
+      "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
+      "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+      "numLongTermBytes": "A String", # [Output-only] The number of bytes in the table that are considered "long-term storage".
     }</pre>
 </div>
 
@@ -213,29 +243,63 @@
     "lastModifiedTime": "A String", # [Output-only] The time when this table was last modified, in milliseconds since the epoch.
     "description": "A String", # [Optional] A user-friendly description of this table.
     "creationTime": "A String", # [Output-only] The time when this table was created, in milliseconds since the epoch.
+    "view": { # [Optional] The view definition.
+      "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
+      "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
+        {
+          "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
+          "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
+        },
+      ],
+    },
     "externalDataConfiguration": { # [Optional] Describes the data format, location, and other properties of a table stored outside of BigQuery. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
-      "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+      "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
       "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
         "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
         "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-        "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+        "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
         "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
         "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
         "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
       },
-      "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-      "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-      "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-      "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+      "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+      "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+      "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+      "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
         "A String",
       ],
-      "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+      "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+        "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+        "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+          {
+            "familyId": "A String", # Identifier of the column family.
+            "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+            "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+            "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+              {
+                "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                "qualifierString": "A String",
+                "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+              },
+            ],
+            "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+          },
+        ],
+      },
+      "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+      "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+        "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+      },
+      "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
         "fields": [ # Describes the fields in a table.
           {
             "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+            "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
             "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
             "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
             "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -258,32 +322,28 @@
       "oldestEntryTime": "A String", # [Output-only] Contains the timestamp of the oldest entry in the streaming buffer, in milliseconds since the epoch, if the streaming buffer is available.
     },
     "friendlyName": "A String", # [Optional] A descriptive name for this table.
-    "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
-    "view": { # [Optional] The view definition.
-      "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
-      "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
-        {
-          "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
-          "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
-        },
-      ],
+    "timePartitioning": { # [Experimental] If specified, configures time-based partitioning for this table.
+      "type": "A String", # [Required] The only type supported is DAY, which will generate one partition per day based on data loading time.
+      "expirationMs": "A String", # [Optional] Number of milliseconds for which to keep the storage for a partition.
     },
-    "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
-    "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
-    "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+    "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
     "schema": { # [Optional] Describes the schema of this table.
       "fields": [ # Describes the fields in a table.
         {
           "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+          "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
           "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
           "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
           "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
         },
       ],
     },
+    "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
+    "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
+    "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+    "numLongTermBytes": "A String", # [Output-only] The number of bytes in the table that are considered "long-term storage".
   }
 
 
@@ -295,29 +355,63 @@
       "lastModifiedTime": "A String", # [Output-only] The time when this table was last modified, in milliseconds since the epoch.
       "description": "A String", # [Optional] A user-friendly description of this table.
       "creationTime": "A String", # [Output-only] The time when this table was created, in milliseconds since the epoch.
+      "view": { # [Optional] The view definition.
+        "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
+        "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
+          {
+            "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
+            "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
+          },
+        ],
+      },
       "externalDataConfiguration": { # [Optional] Describes the data format, location, and other properties of a table stored outside of BigQuery. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
-        "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+        "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
         "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
           "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
           "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-          "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+          "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
           "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
           "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
           "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
         },
-        "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-        "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-        "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-        "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+        "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+        "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+        "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+        "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
           "A String",
         ],
-        "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+        "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+          "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+          "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+            {
+              "familyId": "A String", # Identifier of the column family.
+              "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+              "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+              "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+                {
+                  "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                  "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                  "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                  "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                  "qualifierString": "A String",
+                  "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+                },
+              ],
+              "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+            },
+          ],
+        },
+        "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+        "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+          "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+        },
+        "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
           "fields": [ # Describes the fields in a table.
             {
               "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                 # Object with schema name: TableFieldSchema
               ],
-              "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+              "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
               "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
               "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
               "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -340,32 +434,28 @@
         "oldestEntryTime": "A String", # [Output-only] Contains the timestamp of the oldest entry in the streaming buffer, in milliseconds since the epoch, if the streaming buffer is available.
       },
       "friendlyName": "A String", # [Optional] A descriptive name for this table.
-      "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
-      "view": { # [Optional] The view definition.
-        "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
-        "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
-          {
-            "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
-            "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
-          },
-        ],
+      "timePartitioning": { # [Experimental] If specified, configures time-based partitioning for this table.
+        "type": "A String", # [Required] The only type supported is DAY, which will generate one partition per day based on data loading time.
+        "expirationMs": "A String", # [Optional] Number of milliseconds for which to keep the storage for a partition.
       },
-      "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
-      "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
-      "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+      "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
       "schema": { # [Optional] Describes the schema of this table.
         "fields": [ # Describes the fields in a table.
           {
             "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+            "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
             "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
             "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
             "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
           },
         ],
       },
+      "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
+      "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
+      "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+      "numLongTermBytes": "A String", # [Output-only] The number of bytes in the table that are considered "long-term storage".
     }</pre>
 </div>
 
@@ -433,29 +523,63 @@
     "lastModifiedTime": "A String", # [Output-only] The time when this table was last modified, in milliseconds since the epoch.
     "description": "A String", # [Optional] A user-friendly description of this table.
     "creationTime": "A String", # [Output-only] The time when this table was created, in milliseconds since the epoch.
+    "view": { # [Optional] The view definition.
+      "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
+      "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
+        {
+          "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
+          "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
+        },
+      ],
+    },
     "externalDataConfiguration": { # [Optional] Describes the data format, location, and other properties of a table stored outside of BigQuery. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
-      "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+      "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
       "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
         "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
         "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-        "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+        "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
         "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
         "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
         "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
       },
-      "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-      "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-      "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-      "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+      "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+      "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+      "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+      "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
         "A String",
       ],
-      "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+      "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+        "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+        "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+          {
+            "familyId": "A String", # Identifier of the column family.
+            "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+            "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+            "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+              {
+                "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                "qualifierString": "A String",
+                "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+              },
+            ],
+            "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+          },
+        ],
+      },
+      "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+      "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+        "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+      },
+      "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
         "fields": [ # Describes the fields in a table.
           {
             "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+            "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
             "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
             "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
             "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -478,32 +602,28 @@
       "oldestEntryTime": "A String", # [Output-only] Contains the timestamp of the oldest entry in the streaming buffer, in milliseconds since the epoch, if the streaming buffer is available.
     },
     "friendlyName": "A String", # [Optional] A descriptive name for this table.
-    "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
-    "view": { # [Optional] The view definition.
-      "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
-      "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
-        {
-          "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
-          "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
-        },
-      ],
+    "timePartitioning": { # [Experimental] If specified, configures time-based partitioning for this table.
+      "type": "A String", # [Required] The only type supported is DAY, which will generate one partition per day based on data loading time.
+      "expirationMs": "A String", # [Optional] Number of milliseconds for which to keep the storage for a partition.
     },
-    "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
-    "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
-    "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+    "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
     "schema": { # [Optional] Describes the schema of this table.
       "fields": [ # Describes the fields in a table.
         {
           "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+          "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
           "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
           "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
           "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
         },
       ],
     },
+    "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
+    "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
+    "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+    "numLongTermBytes": "A String", # [Output-only] The number of bytes in the table that are considered "long-term storage".
   }
 
 
@@ -515,29 +635,63 @@
       "lastModifiedTime": "A String", # [Output-only] The time when this table was last modified, in milliseconds since the epoch.
       "description": "A String", # [Optional] A user-friendly description of this table.
       "creationTime": "A String", # [Output-only] The time when this table was created, in milliseconds since the epoch.
+      "view": { # [Optional] The view definition.
+        "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
+        "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
+          {
+            "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
+            "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
+          },
+        ],
+      },
       "externalDataConfiguration": { # [Optional] Describes the data format, location, and other properties of a table stored outside of BigQuery. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
-        "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+        "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
         "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
           "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
           "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-          "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+          "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
           "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
           "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
           "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
         },
-        "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-        "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-        "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-        "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+        "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+        "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+        "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+        "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
           "A String",
         ],
-        "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+        "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+          "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+          "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+            {
+              "familyId": "A String", # Identifier of the column family.
+              "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+              "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+              "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+                {
+                  "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                  "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                  "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                  "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                  "qualifierString": "A String",
+                  "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+                },
+              ],
+              "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+            },
+          ],
+        },
+        "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+        "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+          "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+        },
+        "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
           "fields": [ # Describes the fields in a table.
             {
               "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                 # Object with schema name: TableFieldSchema
               ],
-              "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+              "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
               "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
               "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
               "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -560,32 +714,28 @@
         "oldestEntryTime": "A String", # [Output-only] Contains the timestamp of the oldest entry in the streaming buffer, in milliseconds since the epoch, if the streaming buffer is available.
       },
       "friendlyName": "A String", # [Optional] A descriptive name for this table.
-      "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
-      "view": { # [Optional] The view definition.
-        "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
-        "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
-          {
-            "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
-            "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
-          },
-        ],
+      "timePartitioning": { # [Experimental] If specified, configures time-based partitioning for this table.
+        "type": "A String", # [Required] The only type supported is DAY, which will generate one partition per day based on data loading time.
+        "expirationMs": "A String", # [Optional] Number of milliseconds for which to keep the storage for a partition.
       },
-      "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
-      "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
-      "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+      "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
       "schema": { # [Optional] Describes the schema of this table.
         "fields": [ # Describes the fields in a table.
           {
             "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+            "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
             "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
             "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
             "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
           },
         ],
       },
+      "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
+      "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
+      "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+      "numLongTermBytes": "A String", # [Output-only] The number of bytes in the table that are considered "long-term storage".
     }</pre>
 </div>
 
@@ -605,29 +755,63 @@
     "lastModifiedTime": "A String", # [Output-only] The time when this table was last modified, in milliseconds since the epoch.
     "description": "A String", # [Optional] A user-friendly description of this table.
     "creationTime": "A String", # [Output-only] The time when this table was created, in milliseconds since the epoch.
+    "view": { # [Optional] The view definition.
+      "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
+      "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
+        {
+          "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
+          "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
+        },
+      ],
+    },
     "externalDataConfiguration": { # [Optional] Describes the data format, location, and other properties of a table stored outside of BigQuery. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
-      "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+      "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
       "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
         "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
         "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-        "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+        "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
         "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
         "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
         "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
       },
-      "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-      "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-      "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-      "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+      "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+      "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+      "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+      "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
         "A String",
       ],
-      "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+      "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+        "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+        "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+          {
+            "familyId": "A String", # Identifier of the column family.
+            "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+            "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+            "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+              {
+                "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                "qualifierString": "A String",
+                "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+              },
+            ],
+            "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+          },
+        ],
+      },
+      "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+      "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+        "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+      },
+      "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
         "fields": [ # Describes the fields in a table.
           {
             "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+            "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
             "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
             "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
             "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -650,32 +834,28 @@
       "oldestEntryTime": "A String", # [Output-only] Contains the timestamp of the oldest entry in the streaming buffer, in milliseconds since the epoch, if the streaming buffer is available.
     },
     "friendlyName": "A String", # [Optional] A descriptive name for this table.
-    "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
-    "view": { # [Optional] The view definition.
-      "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
-      "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
-        {
-          "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
-          "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
-        },
-      ],
+    "timePartitioning": { # [Experimental] If specified, configures time-based partitioning for this table.
+      "type": "A String", # [Required] The only type supported is DAY, which will generate one partition per day based on data loading time.
+      "expirationMs": "A String", # [Optional] Number of milliseconds for which to keep the storage for a partition.
     },
-    "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
-    "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
-    "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+    "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
     "schema": { # [Optional] Describes the schema of this table.
       "fields": [ # Describes the fields in a table.
         {
           "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
             # Object with schema name: TableFieldSchema
           ],
-          "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+          "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
           "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
           "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
           "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
         },
       ],
     },
+    "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
+    "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
+    "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+    "numLongTermBytes": "A String", # [Output-only] The number of bytes in the table that are considered "long-term storage".
   }
 
 
@@ -687,29 +867,63 @@
       "lastModifiedTime": "A String", # [Output-only] The time when this table was last modified, in milliseconds since the epoch.
       "description": "A String", # [Optional] A user-friendly description of this table.
       "creationTime": "A String", # [Output-only] The time when this table was created, in milliseconds since the epoch.
+      "view": { # [Optional] The view definition.
+        "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
+        "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
+          {
+            "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
+            "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
+          },
+        ],
+      },
       "externalDataConfiguration": { # [Optional] Describes the data format, location, and other properties of a table stored outside of BigQuery. By defining these properties, the data source can then be queried as if it were a standard BigQuery table.
-        "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Datastore backups.
+        "compression": "A String", # [Optional] The compression type of the data source. Possible values include GZIP and NONE. The default value is NONE. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
         "csvOptions": { # Additional properties to set if sourceFormat is set to CSV.
           "fieldDelimiter": "A String", # [Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence "\t" to specify a tab separator. The default value is a comma (',').
           "encoding": "A String", # [Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties.
-          "skipLeadingRows": 42, # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
+          "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a CSV file that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.
           "allowJaggedRows": True or False, # [Optional] Indicates if BigQuery should accept rows that are missing trailing optional columns. If true, BigQuery treats missing trailing columns as null values. If false, records with missing trailing columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false.
           "quote": """, # [Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true.
           "allowQuotedNewlines": True or False, # [Optional] Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false.
         },
-        "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP".
-        "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Datastore backups.
-        "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Datastore backups: This setting is ignored.
-        "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud Storage. Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources, plus an additional limit of 10 GB maximum size across all URIs. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
+        "autodetect": True or False, # [Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored.
+        "maxBadRecords": 42, # [Optional] The maximum number of bad records that BigQuery can ignore when reading data. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. This setting is ignored for Google Cloud Bigtable, Google Cloud Datastore backups and Avro formats.
+        "ignoreUnknownValues": True or False, # [Optional] Indicates if BigQuery should allow extra values that are not represented in the table schema. If true, the extra values are ignored. If false, records with extra columns are treated as bad records, and if there are too many bad records, an invalid error is returned in the job result. The default value is false. The sourceFormat property determines what BigQuery treats as an extra value: CSV: Trailing columns JSON: Named values that don't match any column names Google Cloud Bigtable: This setting is ignored. Google Cloud Datastore backups: This setting is ignored. Avro: This setting is ignored.
+        "sourceUris": [ # [Required] The fully-qualified URIs that point to your data in Google Cloud. For Google Cloud Storage URIs: Each URI can contain one '*' wildcard character and it must come after the 'bucket' name. Size limits related to load jobs apply to external data sources. For Google Cloud Bigtable URIs: Exactly one URI can be specified and it has be a fully specified and valid HTTPS URL for a Google Cloud Bigtable table. For Google Cloud Datastore backups, exactly one URI can be specified, and it must end with '.backup_info'. Also, the '*' wildcard character is not allowed.
           "A String",
         ],
-        "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Datastore backups.
+        "bigtableOptions": { # [Optional] Additional options if sourceFormat is set to BIGTABLE.
+          "ignoreUnspecifiedColumnFamilies": True or False, # [Optional] If field is true, then the column families that are not specified in columnFamilies list are not exposed in the table schema. Otherwise, they are read with BYTES type values. The default value is false.
+          "columnFamilies": [ # [Optional] List of column families to expose in the table schema along with their types. This list restricts the column families that can be referenced in queries and specifies their value types. You can use this list to do type conversions - see the 'type' field for more details. If you leave this list empty, all column families are present in the table schema and their values are read as BYTES. During a query only the column families referenced in that query are read from Bigtable.
+            {
+              "familyId": "A String", # Identifier of the column family.
+              "type": "A String", # [Optional] The type to convert the value in cells of this column family. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. This can be overridden for a specific column by listing that column in 'columns' and specifying a type for it.
+              "onlyReadLatest": True or False, # [Optional] If this is set only the latest version of value are exposed for all columns in this column family. This can be overridden for a specific column by listing that column in 'columns' and specifying a different setting for that column.
+              "columns": [ # [Optional] Lists of columns that should be exposed as individual fields as opposed to a list of (column name, value) pairs. All columns whose qualifier matches a qualifier in this list can be accessed as .. Other columns can be accessed as a list through .Column field.
+                {
+                  "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. 'encoding' can also be set at the column family level. However, the setting at this level takes precedence if 'encoding' is set at both levels.
+                  "qualifierEncoded": "A String", # [Required] Qualifier of the column. Columns in the parent column family that has this exact qualifier are exposed as . field. If the qualifier is valid UTF-8 string, it can be specified in the qualifier_string field. Otherwise, a base-64 encoded value must be set to qualifier_encoded. The column field name is the same as the column qualifier. However, if the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as field_name.
+                  "fieldName": "A String", # [Optional] If the qualifier is not a valid BigQuery field identifier i.e. does not match [a-zA-Z][a-zA-Z0-9_]*, a valid identifier must be provided as the column field name and is used as field name in queries.
+                  "onlyReadLatest": True or False, # [Optional] If this is set, only the latest version of value in this column are exposed. 'onlyReadLatest' can also be set at the column family level. However, the setting at this level takes precedence if 'onlyReadLatest' is set at both levels.
+                  "qualifierString": "A String",
+                  "type": "A String", # [Optional] The type to convert the value in cells of this column. The values are expected to be encoded using HBase Bytes.toBytes function when using the BINARY encoding value. Following BigQuery types are allowed (case-sensitive) - BYTES STRING INTEGER FLOAT BOOLEAN Defaut type is BYTES. 'type' can also be set at the column family level. However, the setting at this level takes precedence if 'type' is set at both levels.
+                },
+              ],
+              "encoding": "A String", # [Optional] The encoding of the values when the type is not STRING. Acceptable encoding values are: TEXT - indicates values are alphanumeric text strings. BINARY - indicates values are encoded using HBase Bytes.toBytes family of functions. This can be overridden for a specific column by listing that column in 'columns' and specifying an encoding for it.
+            },
+          ],
+        },
+        "sourceFormat": "A String", # [Required] The data format. For CSV files, specify "CSV". For Google sheets, specify "GOOGLE_SHEETS". For newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro files, specify "AVRO". For Google Cloud Datastore backups, specify "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify "BIGTABLE". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project.
+        "googleSheetsOptions": { # [Optional] Additional options if sourceFormat is set to GOOGLE_SHEETS.
+          "skipLeadingRows": "A String", # [Optional] The number of rows at the top of a sheet that BigQuery will skip when reading the data. The default value is 0. This property is useful if you have header rows that should be skipped. When autodetect is on, behavior is the following: * skipLeadingRows unspecified - Autodetect tries to detect headers in the first row. If they are not detected, the row is read as data. Otherwise data is read starting from the second row. * skipLeadingRows is 0 - Instructs autodetect that there are no headers and data should be read starting from the first row. * skipLeadingRows = N > 0 - Autodetect skips N-1 rows and tries to detect headers in row N. If headers are not detected, row N is just skipped. Otherwise row N is used to extract column names for the detected schema.
+        },
+        "schema": { # [Optional] The schema for the data. Schema is required for CSV and JSON formats. Schema is disallowed for Google Cloud Bigtable, Cloud Datastore backups, and Avro formats.
           "fields": [ # Describes the fields in a table.
             {
               "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
                 # Object with schema name: TableFieldSchema
               ],
-              "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+              "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
               "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
               "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
               "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
@@ -732,32 +946,28 @@
         "oldestEntryTime": "A String", # [Output-only] Contains the timestamp of the oldest entry in the streaming buffer, in milliseconds since the epoch, if the streaming buffer is available.
       },
       "friendlyName": "A String", # [Optional] A descriptive name for this table.
-      "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
-      "view": { # [Optional] The view definition.
-        "query": "A String", # [Required] A query that BigQuery executes when the view is referenced.
-        "userDefinedFunctionResources": [ # [Experimental] Describes user-defined function resources used in the query.
-          {
-            "resourceUri": "A String", # [Pick one] A code resource to load from a Google Cloud Storage URI (gs://bucket/path).
-            "inlineCode": "A String", # [Pick one] An inline resource that contains code for a user-defined function (UDF). Providing a inline code resource is equivalent to providing a URI for a file containing the same code.
-          },
-        ],
+      "timePartitioning": { # [Experimental] If specified, configures time-based partitioning for this table.
+        "type": "A String", # [Required] The only type supported is DAY, which will generate one partition per day based on data loading time.
+        "expirationMs": "A String", # [Optional] Number of milliseconds for which to keep the storage for a partition.
       },
-      "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
-      "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
-      "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+      "expirationTime": "A String", # [Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.
       "schema": { # [Optional] Describes the schema of this table.
         "fields": [ # Describes the fields in a table.
           {
             "fields": [ # [Optional] Describes the nested schema fields if the type property is set to RECORD.
               # Object with schema name: TableFieldSchema
             ],
-            "type": "A String", # [Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
+            "type": "A String", # [Required] The field data type. Possible values include STRING, BYTES, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema).
             "description": "A String", # [Optional] The field description. The maximum length is 16K characters.
             "name": "A String", # [Required] The field name. The name must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_), and must start with a letter or underscore. The maximum length is 128 characters.
             "mode": "A String", # [Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE.
           },
         ],
       },
+      "type": "A String", # [Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. EXTERNAL: A table that references data stored in an external storage system, such as Google Cloud Storage. The default value is TABLE.
+      "id": "A String", # [Output-only] An opaque ID uniquely identifying the table.
+      "selfLink": "A String", # [Output-only] A URL that can be used to access this resource again.
+      "numLongTermBytes": "A String", # [Output-only] The number of bytes in the table that are considered "long-term storage".
     }</pre>
 </div>
 
diff --git a/docs/dyn/books_v1.bookshelves.volumes.html b/docs/dyn/books_v1.bookshelves.volumes.html
index 7a61314..0cb201e 100644
--- a/docs/dyn/books_v1.bookshelves.volumes.html
+++ b/docs/dyn/books_v1.bookshelves.volumes.html
@@ -261,6 +261,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -272,7 +277,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -299,7 +305,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/books_v1.myconfig.html b/docs/dyn/books_v1.myconfig.html
index c03f8f0..53d4788 100644
--- a/docs/dyn/books_v1.myconfig.html
+++ b/docs/dyn/books_v1.myconfig.html
@@ -385,6 +385,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -396,7 +401,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -423,7 +429,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/books_v1.mylibrary.bookshelves.volumes.html b/docs/dyn/books_v1.mylibrary.bookshelves.volumes.html
index 8319124..9df4308 100644
--- a/docs/dyn/books_v1.mylibrary.bookshelves.volumes.html
+++ b/docs/dyn/books_v1.mylibrary.bookshelves.volumes.html
@@ -266,6 +266,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -277,7 +282,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -304,7 +310,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/books_v1.notification.html b/docs/dyn/books_v1.notification.html
index 6f7fc98..250a776 100644
--- a/docs/dyn/books_v1.notification.html
+++ b/docs/dyn/books_v1.notification.html
@@ -92,14 +92,20 @@
 
     {
     "body": "A String",
+    "doc_type": "A String",
     "kind": "books#notification", # Resource type.
-    "title": "A String",
-    "dont_show_notification": false,
-    "show_notification_settings_action": True or False,
     "iconUrl": "A String",
+    "dont_show_notification": True or False,
+    "title": "A String",
+    "show_notification_settings_action": True or False,
+    "crmExperimentIds": [ # The list of crm experiment ids.
+      "A String",
+    ],
+    "reason": "A String",
     "targetUrl": "A String",
     "notification_type": "A String",
     "pcampaign_id": "A String",
+    "doc_id": "A String",
   }</pre>
 </div>
 
diff --git a/docs/dyn/books_v1.onboarding.html b/docs/dyn/books_v1.onboarding.html
index 32daae4..a4e0f5b 100644
--- a/docs/dyn/books_v1.onboarding.html
+++ b/docs/dyn/books_v1.onboarding.html
@@ -291,6 +291,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -302,7 +307,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -329,7 +335,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/books_v1.personalizedstream.html b/docs/dyn/books_v1.personalizedstream.html
index 7121856..8556a26 100644
--- a/docs/dyn/books_v1.personalizedstream.html
+++ b/docs/dyn/books_v1.personalizedstream.html
@@ -274,6 +274,11 @@
                 "startUtcSec": "A String",
                 "endUtcSec": "A String",
               },
+              "familySharing": { # Information on the ability to share with the family.
+                "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+                "familyRole": "A String", # The role of the user in the family.
+                "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+              },
               "rentalState": "A String", # Whether this book is an active or an expired rental.
               "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
               "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -285,7 +290,8 @@
                 "pdfPosition": "A String", # Position in a PDF file.
                 "gbTextPosition": "A String", # Position in a volume for text-based content.
               },
-              "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+              "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+              "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
               "review": { # This user's review of this volume, if one exists.
                 "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
                 "kind": "books#review", # Resource type for a review.
@@ -312,7 +318,7 @@
                 "updated": "A String",
                 "allowedCharacterCount": 42,
               },
-              "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+              "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
               "isUploaded": True or False, # Whether or not this volume was user uploaded.
               "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
             },
diff --git a/docs/dyn/books_v1.series.membership.html b/docs/dyn/books_v1.series.membership.html
index a8a5afd..958116b 100644
--- a/docs/dyn/books_v1.series.membership.html
+++ b/docs/dyn/books_v1.series.membership.html
@@ -257,6 +257,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -268,7 +273,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -295,7 +301,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/books_v1.volumes.associated.html b/docs/dyn/books_v1.volumes.associated.html
index 4e64362..23e5cc7 100644
--- a/docs/dyn/books_v1.volumes.associated.html
+++ b/docs/dyn/books_v1.volumes.associated.html
@@ -267,6 +267,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -278,7 +283,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -305,7 +311,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/books_v1.volumes.html b/docs/dyn/books_v1.volumes.html
index 821ab63..0b27acc 100644
--- a/docs/dyn/books_v1.volumes.html
+++ b/docs/dyn/books_v1.volumes.html
@@ -285,6 +285,11 @@
         "startUtcSec": "A String",
         "endUtcSec": "A String",
       },
+      "familySharing": { # Information on the ability to share with the family.
+        "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+        "familyRole": "A String", # The role of the user in the family.
+        "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+      },
       "rentalState": "A String", # Whether this book is an active or an expired rental.
       "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
       "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -296,7 +301,8 @@
         "pdfPosition": "A String", # Position in a PDF file.
         "gbTextPosition": "A String", # Position in a volume for text-based content.
       },
-      "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+      "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+      "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
       "review": { # This user's review of this volume, if one exists.
         "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
         "kind": "books#review", # Resource type for a review.
@@ -323,7 +329,7 @@
         "updated": "A String",
         "allowedCharacterCount": 42,
       },
-      "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+      "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
       "isUploaded": True or False, # Whether or not this volume was user uploaded.
       "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
     },
@@ -541,6 +547,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -552,7 +563,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -579,7 +591,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/books_v1.volumes.mybooks.html b/docs/dyn/books_v1.volumes.mybooks.html
index 22f295e..6137a68 100644
--- a/docs/dyn/books_v1.volumes.mybooks.html
+++ b/docs/dyn/books_v1.volumes.mybooks.html
@@ -75,16 +75,17 @@
 <h1><a href="books_v1.html">Books API</a> . <a href="books_v1.volumes.html">volumes</a> . <a href="books_v1.volumes.mybooks.html">mybooks</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#list">list(source=None, locale=None, acquireMethod=None, maxResults=None, startIndex=None, processingState=None)</a></code></p>
+  <code><a href="#list">list(source=None, locale=None, country=None, acquireMethod=None, maxResults=None, startIndex=None, processingState=None)</a></code></p>
 <p class="firstline">Return a list of books in My Library.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(source=None, locale=None, acquireMethod=None, maxResults=None, startIndex=None, processingState=None)</code>
+    <code class="details" id="list">list(source=None, locale=None, country=None, acquireMethod=None, maxResults=None, startIndex=None, processingState=None)</code>
   <pre>Return a list of books in My Library.
 
 Args:
   source: string, String to identify the originator of this request.
   locale: string, ISO-639-1 language and ISO-3166-1 country code. Ex:'en_US'. Used for generating recommendations.
+  country: string, ISO-3166-1 code to override the IP-based location.
   acquireMethod: string, How the book was aquired (repeated)
     Allowed values
       PREORDERED - Preordered books (not yet available)
@@ -273,6 +274,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -284,7 +290,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -311,7 +318,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/books_v1.volumes.recommended.html b/docs/dyn/books_v1.volumes.recommended.html
index 8a96cca..f35e03c 100644
--- a/docs/dyn/books_v1.volumes.recommended.html
+++ b/docs/dyn/books_v1.volumes.recommended.html
@@ -264,6 +264,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -275,7 +280,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -302,7 +308,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/books_v1.volumes.useruploaded.html b/docs/dyn/books_v1.volumes.useruploaded.html
index a186699..745fc05 100644
--- a/docs/dyn/books_v1.volumes.useruploaded.html
+++ b/docs/dyn/books_v1.volumes.useruploaded.html
@@ -265,6 +265,11 @@
             "startUtcSec": "A String",
             "endUtcSec": "A String",
           },
+          "familySharing": { # Information on the ability to share with the family.
+            "isSharingDisabledByFop": True or False, # Whether or not sharing this volume is temporarily disabled due to issues with the Family Wallet.
+            "familyRole": "A String", # The role of the user in the family.
+            "isSharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          },
           "rentalState": "A String", # Whether this book is an active or an expired rental.
           "isPurchased": True or False, # Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)
           "readingPosition": { # The user's current reading position in the volume, if one is available. (In LITE projection.)
@@ -276,7 +281,8 @@
             "pdfPosition": "A String", # Position in a PDF file.
             "gbTextPosition": "A String", # Position in a volume for text-based content.
           },
-          "isFamilySharingAllowed": True or False, # Whether or not this volume can be shared with the family by the user. This includes sharing eligibility of both the volume and the user. If the value is true, the user can initiate a family sharing action.
+          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingAllowed": True or False, # Deprecated: Replaced by familySharing.
           "review": { # This user's review of this volume, if one exists.
             "rating": "A String", # Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED.
             "kind": "books#review", # Resource type for a review.
@@ -303,7 +309,7 @@
             "updated": "A String",
             "allowedCharacterCount": 42,
           },
-          "isPreordered": True or False, # Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)
+          "isFamilySharingDisabledByFop": True or False, # Deprecated: Replaced by familySharing.
           "isUploaded": True or False, # Whether or not this volume was user uploaded.
           "acquiredTime": "A String", # Timestamp when this volume was acquired by the user. (RFC 3339 UTC date-time format) Acquiring includes purchase, user upload, receiving family sharing, etc.
         },
diff --git a/docs/dyn/classroom_v1.courses.courseWork.html b/docs/dyn/classroom_v1.courses.courseWork.html
new file mode 100644
index 0000000..0ccee91
--- /dev/null
+++ b/docs/dyn/classroom_v1.courses.courseWork.html
@@ -0,0 +1,430 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="classroom_v1.html">Google Classroom API</a> . <a href="classroom_v1.courses.html">courses</a> . <a href="classroom_v1.courses.courseWork.html">courseWork</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="classroom_v1.courses.courseWork.studentSubmissions.html">studentSubmissions()</a></code>
+</p>
+<p class="firstline">Returns the studentSubmissions Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#create">create(courseId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates course work. The resulting course work (and corresponding student submissions) are associated with the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to make the request. Classroom API requests to modify course work and student submissions must be made with an OAuth client ID from the associated Developer Console project. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create course work in the requested course, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.</p>
+<p class="toc_element">
+  <code><a href="#get">get(courseId, id, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns course work. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work does not exist.</p>
+<p class="toc_element">
+  <code><a href="#list">list(courseId, orderBy=None, courseWorkStates=None, pageSize=None, x__xgafv=None, pageToken=None)</a></code></p>
+<p class="firstline">Returns a list of course work that the requester is permitted to view. Course students may only view `PUBLISHED` course work. Course teachers and domain administrators may view all course work. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(courseId, body, x__xgafv=None)</code>
+  <pre>Creates course work. The resulting course work (and corresponding student submissions) are associated with the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to make the request. Classroom API requests to modify course work and student submissions must be made with an OAuth client ID from the associated Developer Console project. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, create course work in the requested course, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Course work created by a teacher for students of the course.
+    "updateTime": "A String", # Timestamp of the most recent change to this course work. Read-only.
+    "submissionModificationMode": "A String", # Setting to determine when students are allowed to modify submissions. If unspecified, the default value is `MODIFIABLE_UNTIL_TURNED_IN`.
+    "description": "A String", # Optional description of this course work. If set, the description must be a valid UTF-8 string containing no more than 30,000 characters.
+    "title": "A String", # Title of this course work. The title must be a valid UTF-8 string containing between 1 and 3000 characters.
+    "courseId": "A String", # Identifier of the course. Read-only.
+    "assignment": { # Additional details for assignments. # Assignment details. This is populated only when `work_type` is `ASSIGNMENT`.
+      "studentWorkFolder": { # Representation of a Google Drive folder. # Drive folder where attachments from student submissions are placed. This is only populated for course teachers.
+        "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+        "id": "A String", # Drive API resource ID.
+        "title": "A String", # Title of the Drive folder. Read-only.
+      },
+    },
+    "alternateLink": "A String", # Absolute link to this course work in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only.
+    "creationTime": "A String", # Timestamp when this course work was created. Read-only.
+    "dueDate": { # Represents a whole calendar date, e.g. date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the Proleptic Gregorian Calendar. The day may be 0 to represent a year and month where the day is not significant, e.g. credit card expiration date. The year may be 0 to represent a month and day independent of year, e.g. anniversary date. Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`. # Optional date, in UTC, that submissions for this this course work are due. This must be specified if `due_time` is specified.
+      "month": 42, # Month of year. Must be from 1 to 12.
+      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a year/month where the day is not significant.
+      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.
+    },
+    "state": "A String", # Status of this course work.. If unspecified, the default state is `DRAFT`.
+    "materials": [ # Additional materials.
+      { # Material attached to course work. When creating attachments, only the Link field may be specified.
+        "link": { # URL item. # Link material.
+          "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+          "title": "A String", # Title of the target of the URL. Read-only.
+        },
+        "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
+          "driveFile": { # Representation of a Google Drive file. # Drive file details.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+            "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+            "id": "A String", # Drive API resource ID.
+            "title": "A String", # Title of the Drive item. Read-only.
+          },
+          "shareMode": "A String", # Mechanism by which students access the Drive item.
+        },
+        "youtubeVideo": { # YouTube video item. # YouTube video material.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+          "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+          "id": "A String", # YouTube API resource ID.
+          "title": "A String", # Title of the YouTube video. Read-only.
+        },
+        "form": { # Google Forms item. # Google Forms material.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+          "formUrl": "A String", # URL of the form.
+          "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+          "title": "A String", # Title of the Form. Read-only.
+        },
+      },
+    ],
+    "multipleChoiceQuestion": { # Additional details for multiple-choice questions. # Multiple choice question details. This is populated only when `work_type` is `MULTIPLE_CHOICE_QUESTION`.
+      "choices": [ # Possible choices.
+        "A String",
+      ],
+    },
+    "maxPoints": 3.14, # Maximum grade for this course work. If zero or unspecified, this assignment is considered ungraded. This must be an integer value.
+    "associatedWithDeveloper": True or False, # Whether this course work item is associated with the Developer Console project making the request. See google.classroom.Work.CreateCourseWork for more details. Read-only.
+    "id": "A String", # Classroom-assigned identifier of this course work, unique per course. Read-only.
+    "dueTime": { # Represents a time of day. The date and time zone are either not significant or are specified elsewhere. An API may chose to allow leap seconds. Related types are google.type.Date and `google.protobuf.Timestamp`. # Optional time of day, in UTC, that submissions for this this course work are due. This must be specified if `due_date` is specified.
+      "hours": 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose to allow the value "24:00:00" for scenarios like business closing time.
+      "seconds": 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may allow the value 60 if it allows leap-seconds.
+      "minutes": 42, # Minutes of hour of day. Must be from 0 to 59.
+      "nanos": 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
+    },
+    "workType": "A String", # Type of this course work. The type is set when the course work is created and cannot be changed. When creating course work, this must be `ASSIGNMENT`.
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Course work created by a teacher for students of the course.
+      "updateTime": "A String", # Timestamp of the most recent change to this course work. Read-only.
+      "submissionModificationMode": "A String", # Setting to determine when students are allowed to modify submissions. If unspecified, the default value is `MODIFIABLE_UNTIL_TURNED_IN`.
+      "description": "A String", # Optional description of this course work. If set, the description must be a valid UTF-8 string containing no more than 30,000 characters.
+      "title": "A String", # Title of this course work. The title must be a valid UTF-8 string containing between 1 and 3000 characters.
+      "courseId": "A String", # Identifier of the course. Read-only.
+      "assignment": { # Additional details for assignments. # Assignment details. This is populated only when `work_type` is `ASSIGNMENT`.
+        "studentWorkFolder": { # Representation of a Google Drive folder. # Drive folder where attachments from student submissions are placed. This is only populated for course teachers.
+          "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+          "id": "A String", # Drive API resource ID.
+          "title": "A String", # Title of the Drive folder. Read-only.
+        },
+      },
+      "alternateLink": "A String", # Absolute link to this course work in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only.
+      "creationTime": "A String", # Timestamp when this course work was created. Read-only.
+      "dueDate": { # Represents a whole calendar date, e.g. date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the Proleptic Gregorian Calendar. The day may be 0 to represent a year and month where the day is not significant, e.g. credit card expiration date. The year may be 0 to represent a month and day independent of year, e.g. anniversary date. Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`. # Optional date, in UTC, that submissions for this this course work are due. This must be specified if `due_time` is specified.
+        "month": 42, # Month of year. Must be from 1 to 12.
+        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a year/month where the day is not significant.
+        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.
+      },
+      "state": "A String", # Status of this course work.. If unspecified, the default state is `DRAFT`.
+      "materials": [ # Additional materials.
+        { # Material attached to course work. When creating attachments, only the Link field may be specified.
+          "link": { # URL item. # Link material.
+            "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+            "title": "A String", # Title of the target of the URL. Read-only.
+          },
+          "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
+            "driveFile": { # Representation of a Google Drive file. # Drive file details.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+              "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+              "id": "A String", # Drive API resource ID.
+              "title": "A String", # Title of the Drive item. Read-only.
+            },
+            "shareMode": "A String", # Mechanism by which students access the Drive item.
+          },
+          "youtubeVideo": { # YouTube video item. # YouTube video material.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+            "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+            "id": "A String", # YouTube API resource ID.
+            "title": "A String", # Title of the YouTube video. Read-only.
+          },
+          "form": { # Google Forms item. # Google Forms material.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+            "formUrl": "A String", # URL of the form.
+            "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+            "title": "A String", # Title of the Form. Read-only.
+          },
+        },
+      ],
+      "multipleChoiceQuestion": { # Additional details for multiple-choice questions. # Multiple choice question details. This is populated only when `work_type` is `MULTIPLE_CHOICE_QUESTION`.
+        "choices": [ # Possible choices.
+          "A String",
+        ],
+      },
+      "maxPoints": 3.14, # Maximum grade for this course work. If zero or unspecified, this assignment is considered ungraded. This must be an integer value.
+      "associatedWithDeveloper": True or False, # Whether this course work item is associated with the Developer Console project making the request. See google.classroom.Work.CreateCourseWork for more details. Read-only.
+      "id": "A String", # Classroom-assigned identifier of this course work, unique per course. Read-only.
+      "dueTime": { # Represents a time of day. The date and time zone are either not significant or are specified elsewhere. An API may chose to allow leap seconds. Related types are google.type.Date and `google.protobuf.Timestamp`. # Optional time of day, in UTC, that submissions for this this course work are due. This must be specified if `due_date` is specified.
+        "hours": 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose to allow the value "24:00:00" for scenarios like business closing time.
+        "seconds": 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may allow the value 60 if it allows leap-seconds.
+        "minutes": 42, # Minutes of hour of day. Must be from 0 to 59.
+        "nanos": 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
+      },
+      "workType": "A String", # Type of this course work. The type is set when the course work is created and cannot be changed. When creating course work, this must be `ASSIGNMENT`.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(courseId, id, x__xgafv=None)</code>
+  <pre>Returns course work. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course or course work does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  id: string, Identifier of the course work. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Course work created by a teacher for students of the course.
+      "updateTime": "A String", # Timestamp of the most recent change to this course work. Read-only.
+      "submissionModificationMode": "A String", # Setting to determine when students are allowed to modify submissions. If unspecified, the default value is `MODIFIABLE_UNTIL_TURNED_IN`.
+      "description": "A String", # Optional description of this course work. If set, the description must be a valid UTF-8 string containing no more than 30,000 characters.
+      "title": "A String", # Title of this course work. The title must be a valid UTF-8 string containing between 1 and 3000 characters.
+      "courseId": "A String", # Identifier of the course. Read-only.
+      "assignment": { # Additional details for assignments. # Assignment details. This is populated only when `work_type` is `ASSIGNMENT`.
+        "studentWorkFolder": { # Representation of a Google Drive folder. # Drive folder where attachments from student submissions are placed. This is only populated for course teachers.
+          "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+          "id": "A String", # Drive API resource ID.
+          "title": "A String", # Title of the Drive folder. Read-only.
+        },
+      },
+      "alternateLink": "A String", # Absolute link to this course work in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only.
+      "creationTime": "A String", # Timestamp when this course work was created. Read-only.
+      "dueDate": { # Represents a whole calendar date, e.g. date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the Proleptic Gregorian Calendar. The day may be 0 to represent a year and month where the day is not significant, e.g. credit card expiration date. The year may be 0 to represent a month and day independent of year, e.g. anniversary date. Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`. # Optional date, in UTC, that submissions for this this course work are due. This must be specified if `due_time` is specified.
+        "month": 42, # Month of year. Must be from 1 to 12.
+        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a year/month where the day is not significant.
+        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.
+      },
+      "state": "A String", # Status of this course work.. If unspecified, the default state is `DRAFT`.
+      "materials": [ # Additional materials.
+        { # Material attached to course work. When creating attachments, only the Link field may be specified.
+          "link": { # URL item. # Link material.
+            "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+            "title": "A String", # Title of the target of the URL. Read-only.
+          },
+          "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
+            "driveFile": { # Representation of a Google Drive file. # Drive file details.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+              "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+              "id": "A String", # Drive API resource ID.
+              "title": "A String", # Title of the Drive item. Read-only.
+            },
+            "shareMode": "A String", # Mechanism by which students access the Drive item.
+          },
+          "youtubeVideo": { # YouTube video item. # YouTube video material.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+            "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+            "id": "A String", # YouTube API resource ID.
+            "title": "A String", # Title of the YouTube video. Read-only.
+          },
+          "form": { # Google Forms item. # Google Forms material.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+            "formUrl": "A String", # URL of the form.
+            "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+            "title": "A String", # Title of the Form. Read-only.
+          },
+        },
+      ],
+      "multipleChoiceQuestion": { # Additional details for multiple-choice questions. # Multiple choice question details. This is populated only when `work_type` is `MULTIPLE_CHOICE_QUESTION`.
+        "choices": [ # Possible choices.
+          "A String",
+        ],
+      },
+      "maxPoints": 3.14, # Maximum grade for this course work. If zero or unspecified, this assignment is considered ungraded. This must be an integer value.
+      "associatedWithDeveloper": True or False, # Whether this course work item is associated with the Developer Console project making the request. See google.classroom.Work.CreateCourseWork for more details. Read-only.
+      "id": "A String", # Classroom-assigned identifier of this course work, unique per course. Read-only.
+      "dueTime": { # Represents a time of day. The date and time zone are either not significant or are specified elsewhere. An API may chose to allow leap seconds. Related types are google.type.Date and `google.protobuf.Timestamp`. # Optional time of day, in UTC, that submissions for this this course work are due. This must be specified if `due_date` is specified.
+        "hours": 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose to allow the value "24:00:00" for scenarios like business closing time.
+        "seconds": 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may allow the value 60 if it allows leap-seconds.
+        "minutes": 42, # Minutes of hour of day. Must be from 0 to 59.
+        "nanos": 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
+      },
+      "workType": "A String", # Type of this course work. The type is set when the course work is created and cannot be changed. When creating course work, this must be `ASSIGNMENT`.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(courseId, orderBy=None, courseWorkStates=None, pageSize=None, x__xgafv=None, pageToken=None)</code>
+  <pre>Returns a list of course work that the requester is permitted to view. Course students may only view `PUBLISHED` course work. Course teachers and domain administrators may view all course work. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  orderBy: string, Optional sort ordering for results. A comma-separated list of fields with an optional sort direction keyword. Supported fields are `updateTime` and `dueDate`. Supported direction keywords are `asc` and `desc`. If not specified, `updateTime desc` is the default behavior. Examples: `dueDate asc,updateTime desc`, `updateTime,dueDate desc`
+  courseWorkStates: string, Restriction on the work status to return. Only courseWork that matches is returned. If unspecified, items with a work status of `PUBLISHED` is returned. (repeated)
+  pageSize: integer, Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.
+  x__xgafv: string, V1 error format.
+  pageToken: string, nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.
+
+Returns:
+  An object of the form:
+
+    { # Response when listing course work.
+    "nextPageToken": "A String", # Token identifying the next page of results to return. If empty, no further results are available.
+    "courseWork": [ # Course work items that match the request.
+      { # Course work created by a teacher for students of the course.
+          "updateTime": "A String", # Timestamp of the most recent change to this course work. Read-only.
+          "submissionModificationMode": "A String", # Setting to determine when students are allowed to modify submissions. If unspecified, the default value is `MODIFIABLE_UNTIL_TURNED_IN`.
+          "description": "A String", # Optional description of this course work. If set, the description must be a valid UTF-8 string containing no more than 30,000 characters.
+          "title": "A String", # Title of this course work. The title must be a valid UTF-8 string containing between 1 and 3000 characters.
+          "courseId": "A String", # Identifier of the course. Read-only.
+          "assignment": { # Additional details for assignments. # Assignment details. This is populated only when `work_type` is `ASSIGNMENT`.
+            "studentWorkFolder": { # Representation of a Google Drive folder. # Drive folder where attachments from student submissions are placed. This is only populated for course teachers.
+              "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+              "id": "A String", # Drive API resource ID.
+              "title": "A String", # Title of the Drive folder. Read-only.
+            },
+          },
+          "alternateLink": "A String", # Absolute link to this course work in the Classroom web UI. This is only populated if `state` is `PUBLISHED`. Read-only.
+          "creationTime": "A String", # Timestamp when this course work was created. Read-only.
+          "dueDate": { # Represents a whole calendar date, e.g. date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the Proleptic Gregorian Calendar. The day may be 0 to represent a year and month where the day is not significant, e.g. credit card expiration date. The year may be 0 to represent a month and day independent of year, e.g. anniversary date. Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`. # Optional date, in UTC, that submissions for this this course work are due. This must be specified if `due_time` is specified.
+            "month": 42, # Month of year. Must be from 1 to 12.
+            "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a year/month where the day is not significant.
+            "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.
+          },
+          "state": "A String", # Status of this course work.. If unspecified, the default state is `DRAFT`.
+          "materials": [ # Additional materials.
+            { # Material attached to course work. When creating attachments, only the Link field may be specified.
+              "link": { # URL item. # Link material.
+                "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+                "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+                "title": "A String", # Title of the target of the URL. Read-only.
+              },
+              "driveFile": { # Drive file that is used as material for course work. # Google Drive file material.
+                "driveFile": { # Representation of a Google Drive file. # Drive file details.
+                  "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+                  "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+                  "id": "A String", # Drive API resource ID.
+                  "title": "A String", # Title of the Drive item. Read-only.
+                },
+                "shareMode": "A String", # Mechanism by which students access the Drive item.
+              },
+              "youtubeVideo": { # YouTube video item. # YouTube video material.
+                "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+                "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+                "id": "A String", # YouTube API resource ID.
+                "title": "A String", # Title of the YouTube video. Read-only.
+              },
+              "form": { # Google Forms item. # Google Forms material.
+                "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+                "formUrl": "A String", # URL of the form.
+                "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+                "title": "A String", # Title of the Form. Read-only.
+              },
+            },
+          ],
+          "multipleChoiceQuestion": { # Additional details for multiple-choice questions. # Multiple choice question details. This is populated only when `work_type` is `MULTIPLE_CHOICE_QUESTION`.
+            "choices": [ # Possible choices.
+              "A String",
+            ],
+          },
+          "maxPoints": 3.14, # Maximum grade for this course work. If zero or unspecified, this assignment is considered ungraded. This must be an integer value.
+          "associatedWithDeveloper": True or False, # Whether this course work item is associated with the Developer Console project making the request. See google.classroom.Work.CreateCourseWork for more details. Read-only.
+          "id": "A String", # Classroom-assigned identifier of this course work, unique per course. Read-only.
+          "dueTime": { # Represents a time of day. The date and time zone are either not significant or are specified elsewhere. An API may chose to allow leap seconds. Related types are google.type.Date and `google.protobuf.Timestamp`. # Optional time of day, in UTC, that submissions for this this course work are due. This must be specified if `due_date` is specified.
+            "hours": 42, # Hours of day in 24 hour format. Should be from 0 to 23. An API may choose to allow the value "24:00:00" for scenarios like business closing time.
+            "seconds": 42, # Seconds of minutes of the time. Must normally be from 0 to 59. An API may allow the value 60 if it allows leap-seconds.
+            "minutes": 42, # Minutes of hour of day. Must be from 0 to 59.
+            "nanos": 42, # Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.
+          },
+          "workType": "A String", # Type of this course work. The type is set when the course work is created and cannot be changed. When creating course work, this must be `ASSIGNMENT`.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/classroom_v1.courses.courseWork.studentSubmissions.html b/docs/dyn/classroom_v1.courses.courseWork.studentSubmissions.html
new file mode 100644
index 0000000..d13c3de
--- /dev/null
+++ b/docs/dyn/classroom_v1.courses.courseWork.studentSubmissions.html
@@ -0,0 +1,542 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="classroom_v1.html">Google Classroom API</a> . <a href="classroom_v1.courses.html">courses</a> . <a href="classroom_v1.courses.courseWork.html">courseWork</a> . <a href="classroom_v1.courses.courseWork.studentSubmissions.html">studentSubmissions</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(courseId, courseWorkId, id, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns a student submission. * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, course work, or student submission or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.</p>
+<p class="toc_element">
+  <code><a href="#list">list(courseId, courseWorkId, pageSize=None, userId=None, states=None, x__xgafv=None, pageToken=None, late=None)</a></code></p>
+<p class="firstline">Returns a list of student submissions that the requester is permitted to view, factoring in the OAuth scopes of the request. `-` may be specified as the `course_work_id` to include student submissions for multiple course work items. Course students may only view their own work. Course teachers and domain administrators may view all student submissions. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#modifyAttachments">modifyAttachments(courseId, courseWorkId, id, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Modifies attachments of student submission. Attachments may only be added to student submissions whose type is `ASSIGNMENT`. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, if the user is not permitted to modify attachments on the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(courseId, courseWorkId, id, body, updateMask=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates one or more fields of a student submission. See google.classroom.v1.StudentSubmission for details of which fields may be updated and who may change them. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work, if the user is not permitted to make the requested modification to the student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.</p>
+<p class="toc_element">
+  <code><a href="#reclaim">reclaim(courseId, courseWorkId, id, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Reclaims a student submission on behalf of the student that owns it. Reclaiming a student submission transfers ownership of attached Drive files to the student and update the submission state. Only the student that ownes the requested student submission may call this method, and only for a student submission that has been turned in. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, unsubmit the requested student submission, or for access errors. * `FAILED_PRECONDITION` if the student submission has not been turned in. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.</p>
+<p class="toc_element">
+  <code><a href="#return_">return_(courseId, courseWorkId, id, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns a student submission. Returning a student submission transfers ownership of attached Drive files to the student and may also update the submission state. Unlike the Classroom application, returning a student submission does not set assignedGrade to the draftGrade value. Only a teacher of the course that contains the requested student submission may call this method. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, return the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.</p>
+<p class="toc_element">
+  <code><a href="#turnIn">turnIn(courseId, courseWorkId, id, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Turns in a student submission. Turning in a student submission transfers ownership of attached Drive files to the teacher and may also update the submission state. This may only be called by the student that owns the specified student submission. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, turn in the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(courseId, courseWorkId, id, x__xgafv=None)</code>
+  <pre>Returns a student submission. * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course, course work, or student submission or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  courseWorkId: string, Identifier of the course work. (required)
+  id: string, Identifier of the student submission. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Student submission for course work. StudentSubmission items are generated when a CourseWork item is created. StudentSubmissions that have never been accessed (i.e. with `state` = NEW) may not have a creation time or update time.
+    "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set. This must be an integer value. This is only visible to and modifiable by course teachers.
+    "updateTime": "A String", # Last update time of this submission. This may be unset if the student has not accessed this item. Read-only.
+    "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI. Read-only.
+    "courseId": "A String", # Identifier of the course. Read-only.
+    "userId": "A String", # Identifier for the student that owns this submission. Read-only.
+    "creationTime": "A String", # Creation time of this submission.. This may be unset if the student has not accessed this item. Read-only.
+    "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
+      "answer": "A String", # Student response to a short-answer question.
+    },
+    "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console project making the request. See google.classroom.Work.CreateCourseWork for more details. Read-only.
+    "late": True or False, # Whether this submission is late. Read-only.
+    "state": "A String", # State of this submission. Read-only.
+    "courseWorkId": "A String", # Identifier for the course work this corresponds to. Read-only.
+    "courseWorkType": "A String", # Type of course work this submission is for. Read-only.
+    "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MUTIPLE_CHOICE_QUESTION.
+      "answer": "A String", # Student's select choice.
+    },
+    "assignedGrade": 3.14, # Optional grade. If unset, no grade was set. This must be an integer value. This may be modified only by course teachers.
+    "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT .
+      "attachments": [ # Attachments added by the student. Drive files that correspond to materials with a share mode of SUBMISSION_COPY may not exist yet if the student has not accessed the assignment in Classroom. Some attachment metadata is only populated if the requesting user has permission to access it. Identifier and alternate_link fields are available, but others (e.g. title) may not be.
+        { # Attachment added to student assignment work. When creating attachments, only the Link field may be specified.
+          "link": { # URL item. # Link attachment.
+            "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+            "title": "A String", # Title of the target of the URL. Read-only.
+          },
+          "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+            "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+            "id": "A String", # Drive API resource ID.
+            "title": "A String", # Title of the Drive item. Read-only.
+          },
+          "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+            "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+            "id": "A String", # YouTube API resource ID.
+            "title": "A String", # Title of the YouTube video. Read-only.
+          },
+          "form": { # Google Forms item. # Google Forms attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+            "formUrl": "A String", # URL of the form.
+            "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+            "title": "A String", # Title of the Form. Read-only.
+          },
+        },
+      ],
+    },
+    "id": "A String", # Classroom-assigned Identifier for the student submission. This is unique among submissions for the relevant course work. Read-only.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(courseId, courseWorkId, pageSize=None, userId=None, states=None, x__xgafv=None, pageToken=None, late=None)</code>
+  <pre>Returns a list of student submissions that the requester is permitted to view, factoring in the OAuth scopes of the request. `-` may be specified as the `course_work_id` to include student submissions for multiple course work items. Course students may only view their own work. Course teachers and domain administrators may view all student submissions. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  courseWorkId: string, Identifer of the student work to request. If `user_id` is specified, this may be set to the string literal `"-"` to request student work for all course work in the specified course. (required)
+  pageSize: integer, Maximum number of items to return. Zero or unspecified indicates that the server may assign a maximum. The server may return fewer than the specified number of results.
+  userId: string, Optional argument to restrict returned student work to those owned by the student with the specified identifier. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user
+  states: string, Requested submission states. If specified, returned student submissions match one of the specified submission states. (repeated)
+  x__xgafv: string, V1 error format.
+  pageToken: string, nextPageToken value returned from a previous list call, indicating that the subsequent page of results should be returned. The list request must be otherwise identical to the one that resulted in this token.
+  late: string, Requested lateness value. If specified, returned student submissions are restricted by the requested value. If unspecified, submissions are returned regardless of `late` value.
+
+Returns:
+  An object of the form:
+
+    { # Response when listing student submissions.
+    "nextPageToken": "A String", # Token identifying the next page of results to return. If empty, no further results are available.
+    "studentSubmissions": [ # Student work that matches the request.
+      { # Student submission for course work. StudentSubmission items are generated when a CourseWork item is created. StudentSubmissions that have never been accessed (i.e. with `state` = NEW) may not have a creation time or update time.
+        "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set. This must be an integer value. This is only visible to and modifiable by course teachers.
+        "updateTime": "A String", # Last update time of this submission. This may be unset if the student has not accessed this item. Read-only.
+        "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI. Read-only.
+        "courseId": "A String", # Identifier of the course. Read-only.
+        "userId": "A String", # Identifier for the student that owns this submission. Read-only.
+        "creationTime": "A String", # Creation time of this submission.. This may be unset if the student has not accessed this item. Read-only.
+        "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
+          "answer": "A String", # Student response to a short-answer question.
+        },
+        "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console project making the request. See google.classroom.Work.CreateCourseWork for more details. Read-only.
+        "late": True or False, # Whether this submission is late. Read-only.
+        "state": "A String", # State of this submission. Read-only.
+        "courseWorkId": "A String", # Identifier for the course work this corresponds to. Read-only.
+        "courseWorkType": "A String", # Type of course work this submission is for. Read-only.
+        "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MUTIPLE_CHOICE_QUESTION.
+          "answer": "A String", # Student's select choice.
+        },
+        "assignedGrade": 3.14, # Optional grade. If unset, no grade was set. This must be an integer value. This may be modified only by course teachers.
+        "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT .
+          "attachments": [ # Attachments added by the student. Drive files that correspond to materials with a share mode of SUBMISSION_COPY may not exist yet if the student has not accessed the assignment in Classroom. Some attachment metadata is only populated if the requesting user has permission to access it. Identifier and alternate_link fields are available, but others (e.g. title) may not be.
+            { # Attachment added to student assignment work. When creating attachments, only the Link field may be specified.
+              "link": { # URL item. # Link attachment.
+                "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+                "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+                "title": "A String", # Title of the target of the URL. Read-only.
+              },
+              "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+                "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+                "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+                "id": "A String", # Drive API resource ID.
+                "title": "A String", # Title of the Drive item. Read-only.
+              },
+              "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+                "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+                "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+                "id": "A String", # YouTube API resource ID.
+                "title": "A String", # Title of the YouTube video. Read-only.
+              },
+              "form": { # Google Forms item. # Google Forms attachment.
+                "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+                "formUrl": "A String", # URL of the form.
+                "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+                "title": "A String", # Title of the Form. Read-only.
+              },
+            },
+          ],
+        },
+        "id": "A String", # Classroom-assigned Identifier for the student submission. This is unique among submissions for the relevant course work. Read-only.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="modifyAttachments">modifyAttachments(courseId, courseWorkId, id, body, x__xgafv=None)</code>
+  <pre>Modifies attachments of student submission. Attachments may only be added to student submissions whose type is `ASSIGNMENT`. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, if the user is not permitted to modify attachments on the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  courseWorkId: string, Identifier of the course work. (required)
+  id: string, Identifier of the student submission. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request to modify the attachments of a student submission.
+    "addAttachments": [ # Attachments to add. This may only contain link attachments.
+      { # Attachment added to student assignment work. When creating attachments, only the Link field may be specified.
+        "link": { # URL item. # Link attachment.
+          "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+          "title": "A String", # Title of the target of the URL. Read-only.
+        },
+        "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+          "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+          "id": "A String", # Drive API resource ID.
+          "title": "A String", # Title of the Drive item. Read-only.
+        },
+        "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+          "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+          "id": "A String", # YouTube API resource ID.
+          "title": "A String", # Title of the YouTube video. Read-only.
+        },
+        "form": { # Google Forms item. # Google Forms attachment.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+          "formUrl": "A String", # URL of the form.
+          "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+          "title": "A String", # Title of the Form. Read-only.
+        },
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Student submission for course work. StudentSubmission items are generated when a CourseWork item is created. StudentSubmissions that have never been accessed (i.e. with `state` = NEW) may not have a creation time or update time.
+    "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set. This must be an integer value. This is only visible to and modifiable by course teachers.
+    "updateTime": "A String", # Last update time of this submission. This may be unset if the student has not accessed this item. Read-only.
+    "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI. Read-only.
+    "courseId": "A String", # Identifier of the course. Read-only.
+    "userId": "A String", # Identifier for the student that owns this submission. Read-only.
+    "creationTime": "A String", # Creation time of this submission.. This may be unset if the student has not accessed this item. Read-only.
+    "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
+      "answer": "A String", # Student response to a short-answer question.
+    },
+    "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console project making the request. See google.classroom.Work.CreateCourseWork for more details. Read-only.
+    "late": True or False, # Whether this submission is late. Read-only.
+    "state": "A String", # State of this submission. Read-only.
+    "courseWorkId": "A String", # Identifier for the course work this corresponds to. Read-only.
+    "courseWorkType": "A String", # Type of course work this submission is for. Read-only.
+    "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MUTIPLE_CHOICE_QUESTION.
+      "answer": "A String", # Student's select choice.
+    },
+    "assignedGrade": 3.14, # Optional grade. If unset, no grade was set. This must be an integer value. This may be modified only by course teachers.
+    "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT .
+      "attachments": [ # Attachments added by the student. Drive files that correspond to materials with a share mode of SUBMISSION_COPY may not exist yet if the student has not accessed the assignment in Classroom. Some attachment metadata is only populated if the requesting user has permission to access it. Identifier and alternate_link fields are available, but others (e.g. title) may not be.
+        { # Attachment added to student assignment work. When creating attachments, only the Link field may be specified.
+          "link": { # URL item. # Link attachment.
+            "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+            "title": "A String", # Title of the target of the URL. Read-only.
+          },
+          "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+            "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+            "id": "A String", # Drive API resource ID.
+            "title": "A String", # Title of the Drive item. Read-only.
+          },
+          "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+            "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+            "id": "A String", # YouTube API resource ID.
+            "title": "A String", # Title of the YouTube video. Read-only.
+          },
+          "form": { # Google Forms item. # Google Forms attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+            "formUrl": "A String", # URL of the form.
+            "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+            "title": "A String", # Title of the Form. Read-only.
+          },
+        },
+      ],
+    },
+    "id": "A String", # Classroom-assigned Identifier for the student submission. This is unique among submissions for the relevant course work. Read-only.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(courseId, courseWorkId, id, body, updateMask=None, x__xgafv=None)</code>
+  <pre>Updates one or more fields of a student submission. See google.classroom.v1.StudentSubmission for details of which fields may be updated and who may change them. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting developer project did not create the corresponding course work, if the user is not permitted to make the requested modification to the student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  courseWorkId: string, Identifier of the course work. (required)
+  id: string, Identifier of the student submission. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Student submission for course work. StudentSubmission items are generated when a CourseWork item is created. StudentSubmissions that have never been accessed (i.e. with `state` = NEW) may not have a creation time or update time.
+  "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set. This must be an integer value. This is only visible to and modifiable by course teachers.
+  "updateTime": "A String", # Last update time of this submission. This may be unset if the student has not accessed this item. Read-only.
+  "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI. Read-only.
+  "courseId": "A String", # Identifier of the course. Read-only.
+  "userId": "A String", # Identifier for the student that owns this submission. Read-only.
+  "creationTime": "A String", # Creation time of this submission.. This may be unset if the student has not accessed this item. Read-only.
+  "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
+    "answer": "A String", # Student response to a short-answer question.
+  },
+  "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console project making the request. See google.classroom.Work.CreateCourseWork for more details. Read-only.
+  "late": True or False, # Whether this submission is late. Read-only.
+  "state": "A String", # State of this submission. Read-only.
+  "courseWorkId": "A String", # Identifier for the course work this corresponds to. Read-only.
+  "courseWorkType": "A String", # Type of course work this submission is for. Read-only.
+  "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MUTIPLE_CHOICE_QUESTION.
+    "answer": "A String", # Student's select choice.
+  },
+  "assignedGrade": 3.14, # Optional grade. If unset, no grade was set. This must be an integer value. This may be modified only by course teachers.
+  "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT .
+    "attachments": [ # Attachments added by the student. Drive files that correspond to materials with a share mode of SUBMISSION_COPY may not exist yet if the student has not accessed the assignment in Classroom. Some attachment metadata is only populated if the requesting user has permission to access it. Identifier and alternate_link fields are available, but others (e.g. title) may not be.
+      { # Attachment added to student assignment work. When creating attachments, only the Link field may be specified.
+        "link": { # URL item. # Link attachment.
+          "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+          "title": "A String", # Title of the target of the URL. Read-only.
+        },
+        "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+          "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+          "id": "A String", # Drive API resource ID.
+          "title": "A String", # Title of the Drive item. Read-only.
+        },
+        "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+          "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+          "id": "A String", # YouTube API resource ID.
+          "title": "A String", # Title of the YouTube video. Read-only.
+        },
+        "form": { # Google Forms item. # Google Forms attachment.
+          "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+          "formUrl": "A String", # URL of the form.
+          "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+          "title": "A String", # Title of the Form. Read-only.
+        },
+      },
+    ],
+  },
+  "id": "A String", # Classroom-assigned Identifier for the student submission. This is unique among submissions for the relevant course work. Read-only.
+}
+
+  updateMask: string, Mask that identifies which fields on the student submission to update. This field is required to do an update. The update fails if invalid fields are specified. The following fields may be specified by teachers: * `draft_grade` * `assigned_grade`
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Student submission for course work. StudentSubmission items are generated when a CourseWork item is created. StudentSubmissions that have never been accessed (i.e. with `state` = NEW) may not have a creation time or update time.
+    "draftGrade": 3.14, # Optional pending grade. If unset, no grade was set. This must be an integer value. This is only visible to and modifiable by course teachers.
+    "updateTime": "A String", # Last update time of this submission. This may be unset if the student has not accessed this item. Read-only.
+    "alternateLink": "A String", # Absolute link to the submission in the Classroom web UI. Read-only.
+    "courseId": "A String", # Identifier of the course. Read-only.
+    "userId": "A String", # Identifier for the student that owns this submission. Read-only.
+    "creationTime": "A String", # Creation time of this submission.. This may be unset if the student has not accessed this item. Read-only.
+    "shortAnswerSubmission": { # Student work for a short answer question. # Submission content when course_work_type is SHORT_ANSWER_QUESTION.
+      "answer": "A String", # Student response to a short-answer question.
+    },
+    "associatedWithDeveloper": True or False, # Whether this student submission is associated with the Developer Console project making the request. See google.classroom.Work.CreateCourseWork for more details. Read-only.
+    "late": True or False, # Whether this submission is late. Read-only.
+    "state": "A String", # State of this submission. Read-only.
+    "courseWorkId": "A String", # Identifier for the course work this corresponds to. Read-only.
+    "courseWorkType": "A String", # Type of course work this submission is for. Read-only.
+    "multipleChoiceSubmission": { # Student work for a multiple-choice question. # Submission content when course_work_type is MUTIPLE_CHOICE_QUESTION.
+      "answer": "A String", # Student's select choice.
+    },
+    "assignedGrade": 3.14, # Optional grade. If unset, no grade was set. This must be an integer value. This may be modified only by course teachers.
+    "assignmentSubmission": { # Student work for an assignment. # Submission content when course_work_type is ASSIGNMENT .
+      "attachments": [ # Attachments added by the student. Drive files that correspond to materials with a share mode of SUBMISSION_COPY may not exist yet if the student has not accessed the assignment in Classroom. Some attachment metadata is only populated if the requesting user has permission to access it. Identifier and alternate_link fields are available, but others (e.g. title) may not be.
+        { # Attachment added to student assignment work. When creating attachments, only the Link field may be specified.
+          "link": { # URL item. # Link attachment.
+            "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+            "title": "A String", # Title of the target of the URL. Read-only.
+          },
+          "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+            "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+            "id": "A String", # Drive API resource ID.
+            "title": "A String", # Title of the Drive item. Read-only.
+          },
+          "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+            "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+            "id": "A String", # YouTube API resource ID.
+            "title": "A String", # Title of the YouTube video. Read-only.
+          },
+          "form": { # Google Forms item. # Google Forms attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+            "formUrl": "A String", # URL of the form.
+            "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+            "title": "A String", # Title of the Form. Read-only.
+          },
+        },
+      ],
+    },
+    "id": "A String", # Classroom-assigned Identifier for the student submission. This is unique among submissions for the relevant course work. Read-only.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="reclaim">reclaim(courseId, courseWorkId, id, body, x__xgafv=None)</code>
+  <pre>Reclaims a student submission on behalf of the student that owns it. Reclaiming a student submission transfers ownership of attached Drive files to the student and update the submission state. Only the student that ownes the requested student submission may call this method, and only for a student submission that has been turned in. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, unsubmit the requested student submission, or for access errors. * `FAILED_PRECONDITION` if the student submission has not been turned in. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  courseWorkId: string, Identifier of the course work. (required)
+  id: string, Identifier of the student submission. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request to reclaim a student submission.
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="return_">return_(courseId, courseWorkId, id, body, x__xgafv=None)</code>
+  <pre>Returns a student submission. Returning a student submission transfers ownership of attached Drive files to the student and may also update the submission state. Unlike the Classroom application, returning a student submission does not set assignedGrade to the draftGrade value. Only a teacher of the course that contains the requested student submission may call this method. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, return the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  courseWorkId: string, Identifier of the course work. (required)
+  id: string, Identifier of the student submission. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request to return a student submission.
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="turnIn">turnIn(courseId, courseWorkId, id, body, x__xgafv=None)</code>
+  <pre>Turns in a student submission. Turning in a student submission transfers ownership of attached Drive files to the teacher and may also update the submission state. This may only be called by the student that owns the specified student submission. This request must be made by the Developer Console project of the [OAuth client ID](https://support.google.com/cloud/answer/6158849) used to create the corresponding course work item. This method returns the following error codes: * `PERMISSION_DENIED` if the requesting user is not permitted to access the requested course or course work, turn in the requested student submission, or for access errors. * `INVALID_ARGUMENT` if the request is malformed. * `NOT_FOUND` if the requested course, course work, or student submission does not exist.
+
+Args:
+  courseId: string, Identifier of the course. This identifier can be either the Classroom-assigned identifier or an alias. (required)
+  courseWorkId: string, Identifier of the course work. (required)
+  id: string, Identifier of the student submission. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request to turn in a student submission.
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/classroom_v1.courses.html b/docs/dyn/classroom_v1.courses.html
index 0c0451f..08c3d1b 100644
--- a/docs/dyn/classroom_v1.courses.html
+++ b/docs/dyn/classroom_v1.courses.html
@@ -80,6 +80,11 @@
 <p class="firstline">Returns the aliases Resource.</p>
 
 <p class="toc_element">
+  <code><a href="classroom_v1.courses.courseWork.html">courseWork()</a></code>
+</p>
+<p class="firstline">Returns the courseWork Resource.</p>
+
+<p class="toc_element">
   <code><a href="classroom_v1.courses.students.html">students()</a></code>
 </p>
 <p class="firstline">Returns the students Resource.</p>
@@ -120,16 +125,55 @@
     The object takes the form of:
 
 { # A Course in Classroom.
-  "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask will result in an error. Read-only.
+  "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.
   "description": "A String", # Optional description. For example, "We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.
   "alternateLink": "A String", # Absolute link to this course in the Classroom web UI. Read-only.
-  "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask will result in an error. Read-only.
+  "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.
   "section": "A String", # Section of the course. For example, "Period 2". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.
-  "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask will result in an error. Read-only.
+  "teacherFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only.
+    "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+    "id": "A String", # Drive API resource ID.
+    "title": "A String", # Title of the Drive folder. Read-only.
+  },
+  "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.
   "name": "A String", # Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.
+  "teacherGroupEmail": "A String", # The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only.
+  "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course. Read-only.
+    { # A set of materials that appears on the "About" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.
+      "materials": [ # Materials attached to this set.
+        { # A material attached to a course as part of a material set.
+          "link": { # URL item. # Link atatchment.
+            "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+            "title": "A String", # Title of the target of the URL. Read-only.
+          },
+          "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+            "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+            "id": "A String", # Drive API resource ID.
+            "title": "A String", # Title of the Drive item. Read-only.
+          },
+          "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+            "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+            "id": "A String", # YouTube API resource ID.
+            "title": "A String", # Title of the YouTube video. Read-only.
+          },
+          "form": { # Google Forms item. # Google Forms attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+            "formUrl": "A String", # URL of the form.
+            "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+            "title": "A String", # Title of the Form. Read-only.
+          },
+        },
+      ],
+      "title": "A String", # Title for this set.
+    },
+  ],
   "courseState": "A String", # State of the course. If unspecified, the default state is `PROVISIONED`.
-  "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error.
-  "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error.
+  "courseGroupEmail": "A String", # The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.
+  "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask results in an `INVALID_ARGUMENT` error.
+  "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.
   "descriptionHeading": "A String", # Optional heading for the description. For example, "Welcome to 10th Grade Biology." If set, this field must be a valid UTF-8 string and no longer than 3600 characters.
   "room": "A String", # Optional room location. For example, "301". If set, this field must be a valid UTF-8 string and no longer than 650 characters.
 }
@@ -140,16 +184,55 @@
   An object of the form:
 
     { # A Course in Classroom.
-    "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask will result in an error. Read-only.
+    "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.
     "description": "A String", # Optional description. For example, "We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.
     "alternateLink": "A String", # Absolute link to this course in the Classroom web UI. Read-only.
-    "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask will result in an error. Read-only.
+    "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.
     "section": "A String", # Section of the course. For example, "Period 2". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.
-    "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask will result in an error. Read-only.
+    "teacherFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only.
+      "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+      "id": "A String", # Drive API resource ID.
+      "title": "A String", # Title of the Drive folder. Read-only.
+    },
+    "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.
     "name": "A String", # Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.
+    "teacherGroupEmail": "A String", # The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only.
+    "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course. Read-only.
+      { # A set of materials that appears on the "About" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.
+        "materials": [ # Materials attached to this set.
+          { # A material attached to a course as part of a material set.
+            "link": { # URL item. # Link atatchment.
+              "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+              "title": "A String", # Title of the target of the URL. Read-only.
+            },
+            "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+              "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+              "id": "A String", # Drive API resource ID.
+              "title": "A String", # Title of the Drive item. Read-only.
+            },
+            "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+              "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+              "id": "A String", # YouTube API resource ID.
+              "title": "A String", # Title of the YouTube video. Read-only.
+            },
+            "form": { # Google Forms item. # Google Forms attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+              "formUrl": "A String", # URL of the form.
+              "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+              "title": "A String", # Title of the Form. Read-only.
+            },
+          },
+        ],
+        "title": "A String", # Title for this set.
+      },
+    ],
     "courseState": "A String", # State of the course. If unspecified, the default state is `PROVISIONED`.
-    "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error.
-    "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error.
+    "courseGroupEmail": "A String", # The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.
+    "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask results in an `INVALID_ARGUMENT` error.
+    "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.
     "descriptionHeading": "A String", # Optional heading for the description. For example, "Welcome to 10th Grade Biology." If set, this field must be a valid UTF-8 string and no longer than 3600 characters.
     "room": "A String", # Optional room location. For example, "301". If set, this field must be a valid UTF-8 string and no longer than 650 characters.
   }</pre>
@@ -182,16 +265,55 @@
   An object of the form:
 
     { # A Course in Classroom.
-    "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask will result in an error. Read-only.
+    "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.
     "description": "A String", # Optional description. For example, "We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.
     "alternateLink": "A String", # Absolute link to this course in the Classroom web UI. Read-only.
-    "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask will result in an error. Read-only.
+    "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.
     "section": "A String", # Section of the course. For example, "Period 2". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.
-    "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask will result in an error. Read-only.
+    "teacherFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only.
+      "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+      "id": "A String", # Drive API resource ID.
+      "title": "A String", # Title of the Drive folder. Read-only.
+    },
+    "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.
     "name": "A String", # Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.
+    "teacherGroupEmail": "A String", # The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only.
+    "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course. Read-only.
+      { # A set of materials that appears on the "About" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.
+        "materials": [ # Materials attached to this set.
+          { # A material attached to a course as part of a material set.
+            "link": { # URL item. # Link atatchment.
+              "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+              "title": "A String", # Title of the target of the URL. Read-only.
+            },
+            "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+              "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+              "id": "A String", # Drive API resource ID.
+              "title": "A String", # Title of the Drive item. Read-only.
+            },
+            "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+              "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+              "id": "A String", # YouTube API resource ID.
+              "title": "A String", # Title of the YouTube video. Read-only.
+            },
+            "form": { # Google Forms item. # Google Forms attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+              "formUrl": "A String", # URL of the form.
+              "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+              "title": "A String", # Title of the Form. Read-only.
+            },
+          },
+        ],
+        "title": "A String", # Title for this set.
+      },
+    ],
     "courseState": "A String", # State of the course. If unspecified, the default state is `PROVISIONED`.
-    "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error.
-    "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error.
+    "courseGroupEmail": "A String", # The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.
+    "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask results in an `INVALID_ARGUMENT` error.
+    "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.
     "descriptionHeading": "A String", # Optional heading for the description. For example, "Welcome to 10th Grade Biology." If set, this field must be a valid UTF-8 string and no longer than 3600 characters.
     "room": "A String", # Optional room location. For example, "301". If set, this field must be a valid UTF-8 string and no longer than 650 characters.
   }</pre>
@@ -215,16 +337,55 @@
     "nextPageToken": "A String", # Token identifying the next page of results to return. If empty, no further results are available.
     "courses": [ # Courses that match the list request.
       { # A Course in Classroom.
-        "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask will result in an error. Read-only.
+        "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.
         "description": "A String", # Optional description. For example, "We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.
         "alternateLink": "A String", # Absolute link to this course in the Classroom web UI. Read-only.
-        "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask will result in an error. Read-only.
+        "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.
         "section": "A String", # Section of the course. For example, "Period 2". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.
-        "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask will result in an error. Read-only.
+        "teacherFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only.
+          "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+          "id": "A String", # Drive API resource ID.
+          "title": "A String", # Title of the Drive folder. Read-only.
+        },
+        "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.
         "name": "A String", # Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.
+        "teacherGroupEmail": "A String", # The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only.
+        "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course. Read-only.
+          { # A set of materials that appears on the "About" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.
+            "materials": [ # Materials attached to this set.
+              { # A material attached to a course as part of a material set.
+                "link": { # URL item. # Link atatchment.
+                  "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+                  "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+                  "title": "A String", # Title of the target of the URL. Read-only.
+                },
+                "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+                  "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+                  "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+                  "id": "A String", # Drive API resource ID.
+                  "title": "A String", # Title of the Drive item. Read-only.
+                },
+                "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+                  "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+                  "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+                  "id": "A String", # YouTube API resource ID.
+                  "title": "A String", # Title of the YouTube video. Read-only.
+                },
+                "form": { # Google Forms item. # Google Forms attachment.
+                  "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+                  "formUrl": "A String", # URL of the form.
+                  "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+                  "title": "A String", # Title of the Form. Read-only.
+                },
+              },
+            ],
+            "title": "A String", # Title for this set.
+          },
+        ],
         "courseState": "A String", # State of the course. If unspecified, the default state is `PROVISIONED`.
-        "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error.
-        "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error.
+        "courseGroupEmail": "A String", # The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.
+        "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask results in an `INVALID_ARGUMENT` error.
+        "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.
         "descriptionHeading": "A String", # Optional heading for the description. For example, "Welcome to 10th Grade Biology." If set, this field must be a valid UTF-8 string and no longer than 3600 characters.
         "room": "A String", # Optional room location. For example, "301". If set, this field must be a valid UTF-8 string and no longer than 650 characters.
       },
@@ -256,16 +417,55 @@
     The object takes the form of:
 
 { # A Course in Classroom.
-  "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask will result in an error. Read-only.
+  "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.
   "description": "A String", # Optional description. For example, "We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.
   "alternateLink": "A String", # Absolute link to this course in the Classroom web UI. Read-only.
-  "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask will result in an error. Read-only.
+  "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.
   "section": "A String", # Section of the course. For example, "Period 2". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.
-  "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask will result in an error. Read-only.
+  "teacherFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only.
+    "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+    "id": "A String", # Drive API resource ID.
+    "title": "A String", # Title of the Drive folder. Read-only.
+  },
+  "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.
   "name": "A String", # Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.
+  "teacherGroupEmail": "A String", # The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only.
+  "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course. Read-only.
+    { # A set of materials that appears on the "About" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.
+      "materials": [ # Materials attached to this set.
+        { # A material attached to a course as part of a material set.
+          "link": { # URL item. # Link atatchment.
+            "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+            "title": "A String", # Title of the target of the URL. Read-only.
+          },
+          "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+            "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+            "id": "A String", # Drive API resource ID.
+            "title": "A String", # Title of the Drive item. Read-only.
+          },
+          "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+            "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+            "id": "A String", # YouTube API resource ID.
+            "title": "A String", # Title of the YouTube video. Read-only.
+          },
+          "form": { # Google Forms item. # Google Forms attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+            "formUrl": "A String", # URL of the form.
+            "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+            "title": "A String", # Title of the Form. Read-only.
+          },
+        },
+      ],
+      "title": "A String", # Title for this set.
+    },
+  ],
   "courseState": "A String", # State of the course. If unspecified, the default state is `PROVISIONED`.
-  "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error.
-  "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error.
+  "courseGroupEmail": "A String", # The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.
+  "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask results in an `INVALID_ARGUMENT` error.
+  "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.
   "descriptionHeading": "A String", # Optional heading for the description. For example, "Welcome to 10th Grade Biology." If set, this field must be a valid UTF-8 string and no longer than 3600 characters.
   "room": "A String", # Optional room location. For example, "301". If set, this field must be a valid UTF-8 string and no longer than 650 characters.
 }
@@ -277,16 +477,55 @@
   An object of the form:
 
     { # A Course in Classroom.
-    "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask will result in an error. Read-only.
+    "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.
     "description": "A String", # Optional description. For example, "We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.
     "alternateLink": "A String", # Absolute link to this course in the Classroom web UI. Read-only.
-    "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask will result in an error. Read-only.
+    "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.
     "section": "A String", # Section of the course. For example, "Period 2". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.
-    "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask will result in an error. Read-only.
+    "teacherFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only.
+      "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+      "id": "A String", # Drive API resource ID.
+      "title": "A String", # Title of the Drive folder. Read-only.
+    },
+    "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.
     "name": "A String", # Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.
+    "teacherGroupEmail": "A String", # The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only.
+    "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course. Read-only.
+      { # A set of materials that appears on the "About" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.
+        "materials": [ # Materials attached to this set.
+          { # A material attached to a course as part of a material set.
+            "link": { # URL item. # Link atatchment.
+              "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+              "title": "A String", # Title of the target of the URL. Read-only.
+            },
+            "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+              "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+              "id": "A String", # Drive API resource ID.
+              "title": "A String", # Title of the Drive item. Read-only.
+            },
+            "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+              "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+              "id": "A String", # YouTube API resource ID.
+              "title": "A String", # Title of the YouTube video. Read-only.
+            },
+            "form": { # Google Forms item. # Google Forms attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+              "formUrl": "A String", # URL of the form.
+              "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+              "title": "A String", # Title of the Form. Read-only.
+            },
+          },
+        ],
+        "title": "A String", # Title for this set.
+      },
+    ],
     "courseState": "A String", # State of the course. If unspecified, the default state is `PROVISIONED`.
-    "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error.
-    "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error.
+    "courseGroupEmail": "A String", # The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.
+    "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask results in an `INVALID_ARGUMENT` error.
+    "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.
     "descriptionHeading": "A String", # Optional heading for the description. For example, "Welcome to 10th Grade Biology." If set, this field must be a valid UTF-8 string and no longer than 3600 characters.
     "room": "A String", # Optional room location. For example, "301". If set, this field must be a valid UTF-8 string and no longer than 650 characters.
   }</pre>
@@ -302,16 +541,55 @@
     The object takes the form of:
 
 { # A Course in Classroom.
-  "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask will result in an error. Read-only.
+  "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.
   "description": "A String", # Optional description. For example, "We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.
   "alternateLink": "A String", # Absolute link to this course in the Classroom web UI. Read-only.
-  "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask will result in an error. Read-only.
+  "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.
   "section": "A String", # Section of the course. For example, "Period 2". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.
-  "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask will result in an error. Read-only.
+  "teacherFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only.
+    "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+    "id": "A String", # Drive API resource ID.
+    "title": "A String", # Title of the Drive folder. Read-only.
+  },
+  "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.
   "name": "A String", # Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.
+  "teacherGroupEmail": "A String", # The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only.
+  "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course. Read-only.
+    { # A set of materials that appears on the "About" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.
+      "materials": [ # Materials attached to this set.
+        { # A material attached to a course as part of a material set.
+          "link": { # URL item. # Link atatchment.
+            "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+            "title": "A String", # Title of the target of the URL. Read-only.
+          },
+          "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+            "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+            "id": "A String", # Drive API resource ID.
+            "title": "A String", # Title of the Drive item. Read-only.
+          },
+          "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+            "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+            "id": "A String", # YouTube API resource ID.
+            "title": "A String", # Title of the YouTube video. Read-only.
+          },
+          "form": { # Google Forms item. # Google Forms attachment.
+            "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+            "formUrl": "A String", # URL of the form.
+            "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+            "title": "A String", # Title of the Form. Read-only.
+          },
+        },
+      ],
+      "title": "A String", # Title for this set.
+    },
+  ],
   "courseState": "A String", # State of the course. If unspecified, the default state is `PROVISIONED`.
-  "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error.
-  "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error.
+  "courseGroupEmail": "A String", # The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.
+  "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask results in an `INVALID_ARGUMENT` error.
+  "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.
   "descriptionHeading": "A String", # Optional heading for the description. For example, "Welcome to 10th Grade Biology." If set, this field must be a valid UTF-8 string and no longer than 3600 characters.
   "room": "A String", # Optional room location. For example, "301". If set, this field must be a valid UTF-8 string and no longer than 650 characters.
 }
@@ -322,16 +600,55 @@
   An object of the form:
 
     { # A Course in Classroom.
-    "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask will result in an error. Read-only.
+    "updateTime": "A String", # Time of the most recent update to this course. Specifying this field in a course update mask results in an error. Read-only.
     "description": "A String", # Optional description. For example, "We'll be learning about the structure of living creatures from a combination of textbooks, guest lectures, and lab work. Expect to be excited!" If set, this field must be a valid UTF-8 string and no longer than 30,000 characters.
     "alternateLink": "A String", # Absolute link to this course in the Classroom web UI. Read-only.
-    "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask will result in an error. Read-only.
+    "enrollmentCode": "A String", # Enrollment code to use when joining this course. Specifying this field in a course update mask results in an error. Read-only.
     "section": "A String", # Section of the course. For example, "Period 2". If set, this field must be a valid UTF-8 string and no longer than 2800 characters.
-    "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask will result in an error. Read-only.
+    "teacherFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder that is shared with all teachers of the course. This field will only be set for teachers of the course and domain administrators. Read-only.
+      "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+      "id": "A String", # Drive API resource ID.
+      "title": "A String", # Title of the Drive folder. Read-only.
+    },
+    "creationTime": "A String", # Creation time of the course. Specifying this field in a course update mask results in an error. Read-only.
     "name": "A String", # Name of the course. For example, "10th Grade Biology". The name is required. It must be between 1 and 750 characters and a valid UTF-8 string.
+    "teacherGroupEmail": "A String", # The email address of a Google group containing all teachers of the course. This group does not accept email and can only be used for permissions. Read-only.
+    "courseMaterialSets": [ # Sets of materials that appear on the "about" page of this course. Read-only.
+      { # A set of materials that appears on the "About" page of the course. These materials might include a syllabus, schedule, or other background information relating to the course as a whole.
+        "materials": [ # Materials attached to this set.
+          { # A material attached to a course as part of a material set.
+            "link": { # URL item. # Link atatchment.
+              "url": "A String", # URL to link to. This must be a valid UTF-8 string containing between 1 and 2024 characters.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the target URL. Read-only.
+              "title": "A String", # Title of the target of the URL. Read-only.
+            },
+            "driveFile": { # Representation of a Google Drive file. # Google Drive file attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Drive item. Read-only.
+              "alternateLink": "A String", # URL that can be used to access the Drive item. Read-only.
+              "id": "A String", # Drive API resource ID.
+              "title": "A String", # Title of the Drive item. Read-only.
+            },
+            "youTubeVideo": { # YouTube video item. # Youtube video attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the YouTube video. Read-only.
+              "alternateLink": "A String", # URL that can be used to view the YouTube video. Read-only.
+              "id": "A String", # YouTube API resource ID.
+              "title": "A String", # Title of the YouTube video. Read-only.
+            },
+            "form": { # Google Forms item. # Google Forms attachment.
+              "thumbnailUrl": "A String", # URL of a thumbnail image of the Form. Read-only.
+              "formUrl": "A String", # URL of the form.
+              "responseUrl": "A String", # URL of the form responses document. Only set if respsonses have been recorded and only when the requesting user is an editor of the form. Read-only.
+              "title": "A String", # Title of the Form. Read-only.
+            },
+          },
+        ],
+        "title": "A String", # Title for this set.
+      },
+    ],
     "courseState": "A String", # State of the course. If unspecified, the default state is `PROVISIONED`.
-    "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask will result in an `INVALID_ARGUMENT` error.
-    "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask will result in an error.
+    "courseGroupEmail": "A String", # The email address of a Google group containing all members of the course. This group does not accept email and can only be used for permissions. Read-only.
+    "ownerId": "A String", # The identifier of the owner of a course. When specified as a parameter of a create course request, this field is required. The identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user This must be set in a create request. Specifying this field in a course update mask results in an `INVALID_ARGUMENT` error.
+    "id": "A String", # Identifier for this course assigned by Classroom. When creating a course, you may optionally set this identifier to an alias string in the request to create a corresponding alias. The `id` is still assigned by Classroom and cannot be updated after the course is created. Specifying this field in a course update mask results in an error.
     "descriptionHeading": "A String", # Optional heading for the description. For example, "Welcome to 10th Grade Biology." If set, this field must be a valid UTF-8 string and no longer than 3600 characters.
     "room": "A String", # Optional room location. For example, "301". If set, this field must be a valid UTF-8 string and no longer than 650 characters.
   }</pre>
diff --git a/docs/dyn/classroom_v1.courses.students.html b/docs/dyn/classroom_v1.courses.students.html
index 4c346d0..21978e3 100644
--- a/docs/dyn/classroom_v1.courses.students.html
+++ b/docs/dyn/classroom_v1.courses.students.html
@@ -116,6 +116,11 @@
         "familyName": "A String", # The user's last name. Read-only.
       },
     },
+    "studentWorkFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder for this student's work in this course. Only visible to the student and domain administrators. Read-only.
+      "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+      "id": "A String", # Drive API resource ID.
+      "title": "A String", # Title of the Drive folder. Read-only.
+    },
     "userId": "A String", # Identifier of the user. When specified as a parameter of a request, this identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user
   }
 
@@ -142,6 +147,11 @@
           "familyName": "A String", # The user's last name. Read-only.
         },
       },
+      "studentWorkFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder for this student's work in this course. Only visible to the student and domain administrators. Read-only.
+        "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+        "id": "A String", # Drive API resource ID.
+        "title": "A String", # Title of the Drive folder. Read-only.
+      },
       "userId": "A String", # Identifier of the user. When specified as a parameter of a request, this identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user
     }</pre>
 </div>
@@ -191,6 +201,11 @@
           "familyName": "A String", # The user's last name. Read-only.
         },
       },
+      "studentWorkFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder for this student's work in this course. Only visible to the student and domain administrators. Read-only.
+        "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+        "id": "A String", # Drive API resource ID.
+        "title": "A String", # Title of the Drive folder. Read-only.
+      },
       "userId": "A String", # Identifier of the user. When specified as a parameter of a request, this identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user
     }</pre>
 </div>
@@ -227,6 +242,11 @@
               "familyName": "A String", # The user's last name. Read-only.
             },
           },
+          "studentWorkFolder": { # Representation of a Google Drive folder. # Information about a Drive Folder for this student's work in this course. Only visible to the student and domain administrators. Read-only.
+            "alternateLink": "A String", # URL that can be used to access the Drive folder. Read-only.
+            "id": "A String", # Drive API resource ID.
+            "title": "A String", # Title of the Drive folder. Read-only.
+          },
           "userId": "A String", # Identifier of the user. When specified as a parameter of a request, this identifier can be one of the following: * the numeric identifier for the user * the email address of the user * the string literal `"me"`, indicating the requesting user
         },
     ],
diff --git a/docs/dyn/cloudbuild_v1.html b/docs/dyn/cloudbuild_v1.html
new file mode 100644
index 0000000..f71c4d6
--- /dev/null
+++ b/docs/dyn/cloudbuild_v1.html
@@ -0,0 +1,108 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="cloudbuild_v1.html">Google Cloud Container Builder API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="cloudbuild_v1.operations.html">operations()</a></code>
+</p>
+<p class="firstline">Returns the operations Resource.</p>
+
+<p class="toc_element">
+  <code><a href="cloudbuild_v1.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/cloudbuild_v1.operations.html b/docs/dyn/cloudbuild_v1.operations.html
new file mode 100644
index 0000000..03d086a
--- /dev/null
+++ b/docs/dyn/cloudbuild_v1.operations.html
@@ -0,0 +1,323 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="cloudbuild_v1.html">Google Cloud Container Builder API</a> . <a href="cloudbuild_v1.operations.html">operations</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets the latest state of a long-running operation.  Clients can use this</p>
+<p class="toc_element">
+  <code><a href="#list">list(name, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists operations that match the specified filter in the request. If the</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets the latest state of a long-running operation.  Clients can use this
+method to poll the operation result at intervals as recommended by the API
+service.
+
+Args:
+  name: string, The name of the operation resource. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a
+      # network API call.
+    "metadata": { # Service-specific metadata associated with the operation.  It typically
+        # contains progress information and common metadata such as create time.
+        # Some services might not provide such metadata.  Any method that returns a
+        # long-running operation should document the metadata type, if any.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+    "done": True or False, # If the value is `false`, it means the operation is still in progress.
+        # If true, the operation is completed, and either `error` or `response` is
+        # available.
+    "response": { # The normal response of the operation in case of success.  If the original
+        # method returns no data on success, such as `Delete`, the response is
+        # `google.protobuf.Empty`.  If the original method is standard
+        # `Get`/`Create`/`Update`, the response should be the resource.  For other
+        # methods, the response should have the type `XxxResponse`, where `Xxx`
+        # is the original method name.  For example, if the original method name
+        # is `TakeSnapshot()`, the inferred response type is
+        # `TakeSnapshotResponse`.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+    "name": "A String", # The server-assigned name, which is only unique within the same service that
+        # originally returns it. If you use the default HTTP mapping, the
+        # `name` should have the format of `operations/some/unique/name`.
+    "error": { # The `Status` type defines a logical error model that is suitable for different # The error result of the operation in case of failure.
+        # programming environments, including REST APIs and RPC APIs. It is used by
+        # [gRPC](https://github.com/grpc). The error model is designed to be:
+        #
+        # - Simple to use and understand for most users
+        # - Flexible enough to meet unexpected needs
+        #
+        # # Overview
+        #
+        # The `Status` message contains three pieces of data: error code, error message,
+        # and error details. The error code should be an enum value of
+        # google.rpc.Code, but it may accept additional error codes if needed.  The
+        # error message should be a developer-facing English message that helps
+        # developers *understand* and *resolve* the error. If a localized user-facing
+        # error message is needed, put the localized message in the error details or
+        # localize it in the client. The optional error details may contain arbitrary
+        # information about the error. There is a predefined set of error detail types
+        # in the package `google.rpc` which can be used for common error conditions.
+        #
+        # # Language mapping
+        #
+        # The `Status` message is the logical representation of the error model, but it
+        # is not necessarily the actual wire format. When the `Status` message is
+        # exposed in different client libraries and different wire protocols, it can be
+        # mapped differently. For example, it will likely be mapped to some exceptions
+        # in Java, but more likely mapped to some error codes in C.
+        #
+        # # Other uses
+        #
+        # The error model and the `Status` message can be used in a variety of
+        # environments, either with or without APIs, to provide a
+        # consistent developer experience across different environments.
+        #
+        # Example uses of this error model include:
+        #
+        # - Partial errors. If a service needs to return partial errors to the client,
+        #     it may embed the `Status` in the normal response to indicate the partial
+        #     errors.
+        #
+        # - Workflow errors. A typical workflow has multiple steps. Each step may
+        #     have a `Status` message for error reporting purpose.
+        #
+        # - Batch operations. If a client uses batch request and batch response, the
+        #     `Status` message should be used directly inside batch response, one for
+        #     each error sub-response.
+        #
+        # - Asynchronous operations. If an API call embeds asynchronous operation
+        #     results in its response, the status of those operations should be
+        #     represented directly using the `Status` message.
+        #
+        # - Logging. If some API errors are stored in logs, the message `Status` could
+        #     be used directly after any stripping needed for security/privacy reasons.
+      "message": "A String", # A developer-facing error message, which should be in English. Any
+          # user-facing error message should be localized and sent in the
+          # google.rpc.Status.details field, or localized by the client.
+      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+      "details": [ # A list of messages that carry the error details.  There will be a
+          # common set of message types for APIs to use.
+        {
+          "a_key": "", # Properties of the object. Contains field @ype with type URL.
+        },
+      ],
+    },
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists operations that match the specified filter in the request. If the
+server doesn't support this method, it returns `UNIMPLEMENTED`.
+
+NOTE: the `name` binding below allows API services to override the binding
+to use different resource name schemes, such as `users/*/operations`.
+
+Args:
+  name: string, The name of the operation collection. (required)
+  pageSize: integer, The standard list page size.
+  filter: string, The standard list filter.
+  pageToken: string, The standard list page token.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response message for Operations.ListOperations.
+    "nextPageToken": "A String", # The standard List next-page token.
+    "operations": [ # A list of operations that matches the specified filter in the request.
+      { # This resource represents a long-running operation that is the result of a
+          # network API call.
+        "metadata": { # Service-specific metadata associated with the operation.  It typically
+            # contains progress information and common metadata such as create time.
+            # Some services might not provide such metadata.  Any method that returns a
+            # long-running operation should document the metadata type, if any.
+          "a_key": "", # Properties of the object. Contains field @ype with type URL.
+        },
+        "done": True or False, # If the value is `false`, it means the operation is still in progress.
+            # If true, the operation is completed, and either `error` or `response` is
+            # available.
+        "response": { # The normal response of the operation in case of success.  If the original
+            # method returns no data on success, such as `Delete`, the response is
+            # `google.protobuf.Empty`.  If the original method is standard
+            # `Get`/`Create`/`Update`, the response should be the resource.  For other
+            # methods, the response should have the type `XxxResponse`, where `Xxx`
+            # is the original method name.  For example, if the original method name
+            # is `TakeSnapshot()`, the inferred response type is
+            # `TakeSnapshotResponse`.
+          "a_key": "", # Properties of the object. Contains field @ype with type URL.
+        },
+        "name": "A String", # The server-assigned name, which is only unique within the same service that
+            # originally returns it. If you use the default HTTP mapping, the
+            # `name` should have the format of `operations/some/unique/name`.
+        "error": { # The `Status` type defines a logical error model that is suitable for different # The error result of the operation in case of failure.
+            # programming environments, including REST APIs and RPC APIs. It is used by
+            # [gRPC](https://github.com/grpc). The error model is designed to be:
+            #
+            # - Simple to use and understand for most users
+            # - Flexible enough to meet unexpected needs
+            #
+            # # Overview
+            #
+            # The `Status` message contains three pieces of data: error code, error message,
+            # and error details. The error code should be an enum value of
+            # google.rpc.Code, but it may accept additional error codes if needed.  The
+            # error message should be a developer-facing English message that helps
+            # developers *understand* and *resolve* the error. If a localized user-facing
+            # error message is needed, put the localized message in the error details or
+            # localize it in the client. The optional error details may contain arbitrary
+            # information about the error. There is a predefined set of error detail types
+            # in the package `google.rpc` which can be used for common error conditions.
+            #
+            # # Language mapping
+            #
+            # The `Status` message is the logical representation of the error model, but it
+            # is not necessarily the actual wire format. When the `Status` message is
+            # exposed in different client libraries and different wire protocols, it can be
+            # mapped differently. For example, it will likely be mapped to some exceptions
+            # in Java, but more likely mapped to some error codes in C.
+            #
+            # # Other uses
+            #
+            # The error model and the `Status` message can be used in a variety of
+            # environments, either with or without APIs, to provide a
+            # consistent developer experience across different environments.
+            #
+            # Example uses of this error model include:
+            #
+            # - Partial errors. If a service needs to return partial errors to the client,
+            #     it may embed the `Status` in the normal response to indicate the partial
+            #     errors.
+            #
+            # - Workflow errors. A typical workflow has multiple steps. Each step may
+            #     have a `Status` message for error reporting purpose.
+            #
+            # - Batch operations. If a client uses batch request and batch response, the
+            #     `Status` message should be used directly inside batch response, one for
+            #     each error sub-response.
+            #
+            # - Asynchronous operations. If an API call embeds asynchronous operation
+            #     results in its response, the status of those operations should be
+            #     represented directly using the `Status` message.
+            #
+            # - Logging. If some API errors are stored in logs, the message `Status` could
+            #     be used directly after any stripping needed for security/privacy reasons.
+          "message": "A String", # A developer-facing error message, which should be in English. Any
+              # user-facing error message should be localized and sent in the
+              # google.rpc.Status.details field, or localized by the client.
+          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+          "details": [ # A list of messages that carry the error details.  There will be a
+              # common set of message types for APIs to use.
+            {
+              "a_key": "", # Properties of the object. Contains field @ype with type URL.
+            },
+          ],
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/cloudbuild_v1.projects.builds.html b/docs/dyn/cloudbuild_v1.projects.builds.html
new file mode 100644
index 0000000..faeeb52
--- /dev/null
+++ b/docs/dyn/cloudbuild_v1.projects.builds.html
@@ -0,0 +1,588 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="cloudbuild_v1.html">Google Cloud Container Builder API</a> . <a href="cloudbuild_v1.projects.html">projects</a> . <a href="cloudbuild_v1.projects.builds.html">builds</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#cancel">cancel(projectId, id, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Cancels a requested build in progress.</p>
+<p class="toc_element">
+  <code><a href="#create">create(projectId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Starts a build with the specified configuration.</p>
+<p class="toc_element">
+  <code><a href="#get">get(projectId, id, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns information about a previously requested build.</p>
+<p class="toc_element">
+  <code><a href="#list">list(projectId, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists previously requested builds.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="cancel">cancel(projectId, id, body, x__xgafv=None)</code>
+  <pre>Cancels a requested build in progress.
+
+Args:
+  projectId: string, ID of the project. (required)
+  id: string, ID of the build. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request to cancel an ongoing build.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A build resource in the Container Builder API.
+      #
+      # At a high level, a Build describes where to find source code, how to build
+      # it (for example, the builder image to run on the source), and what tag to
+      # apply to the built image when it is pushed to Google Container Registry.
+    "status": "A String", # Status of the build.
+        # @OutputOnly
+    "finishTime": "A String", # Time at which execution of the build was finished.
+        # @OutputOnly
+    "startTime": "A String", # Time at which execution of the build was started.
+        # @OutputOnly
+    "statusDetail": "A String", # Customer-readable message about the current status.
+        # @OutputOnly
+    "logsBucket": "A String", # Google Cloud Storage bucket where logs should be written (see
+        # [Bucket Name
+        # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
+        # Logs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.
+    "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
+        # @OutputOnly
+      "images": [ # Images that were built as a part of the build.
+        { # BuiltImage describes an image built by the pipeline.
+          "name": "A String", # Name used to push the container image to Google Container Registry, as
+              # presented to `docker push`.
+          "digest": "A String", # Docker Registry 2.0 digest.
+        },
+      ],
+    },
+    "createTime": "A String", # Time at which the build was created.
+        # @OutputOnly
+    "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
+        # service.
+      "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
+          # Storage.
+          # Google Cloud Storage.
+        "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
+            # omitted, the latest generation will be used.
+        "object": "A String", # Google Cloud Storage object containing source.
+            #
+            # This object must be a gzipped archive file (.tar.gz) containing source to
+            # build.
+        "bucket": "A String", # Google Cloud Storage bucket containing source (see
+            # [Bucket Name
+            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
+      },
+    },
+    "steps": [ # Describes the operations to be performed on the workspace.
+      { # BuildStep describes a step to perform in the build pipeline.
+        "args": [ # Command-line arguments to use when running this step's container.
+          "A String",
+        ],
+        "name": "A String", # Name of the container image to use for creating this stage in the
+            # pipeline, as presented to `docker pull`.
+        "dir": "A String", # Working directory (relative to project source root) to use when running
+            # this operation's container.
+        "env": [ # Additional environment variables to set for this step's container.
+          "A String",
+        ],
+      },
+    ],
+    "timeout": "A String", # Amount of time that this build should be allowed to run, to second
+        # granularity. If this amount of time elapses, work on the build will cease
+        # and the build status will be TIMEOUT.
+        #
+        # Default time is ten minutes.
+    "projectId": "A String", # ID of the project.
+        # @OutputOnly.
+    "images": [ # List of images expected to be built and pushed to Google Container
+        # Registry. If an image is listed here and the image is not produced by
+        # one of the build steps, the build will fail. Any images present when
+        # the build steps are complete will be pushed to Container Registry.
+      "A String",
+    ],
+    "id": "A String", # Unique identifier of the build.
+        # @OutputOnly
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="create">create(projectId, body, x__xgafv=None)</code>
+  <pre>Starts a build with the specified configuration.
+
+The long-running Operation returned by this method will include the ID of
+the build, which can be passed to GetBuild to determine its status (e.g.,
+success or failure).
+
+Args:
+  projectId: string, ID of the project. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A build resource in the Container Builder API.
+    # 
+    # At a high level, a Build describes where to find source code, how to build
+    # it (for example, the builder image to run on the source), and what tag to
+    # apply to the built image when it is pushed to Google Container Registry.
+  "status": "A String", # Status of the build.
+      # @OutputOnly
+  "finishTime": "A String", # Time at which execution of the build was finished.
+      # @OutputOnly
+  "startTime": "A String", # Time at which execution of the build was started.
+      # @OutputOnly
+  "statusDetail": "A String", # Customer-readable message about the current status.
+      # @OutputOnly
+  "logsBucket": "A String", # Google Cloud Storage bucket where logs should be written (see
+      # [Bucket Name
+      # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
+      # Logs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.
+  "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
+      # @OutputOnly
+    "images": [ # Images that were built as a part of the build.
+      { # BuiltImage describes an image built by the pipeline.
+        "name": "A String", # Name used to push the container image to Google Container Registry, as
+            # presented to `docker push`.
+        "digest": "A String", # Docker Registry 2.0 digest.
+      },
+    ],
+  },
+  "createTime": "A String", # Time at which the build was created.
+      # @OutputOnly
+  "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
+      # service.
+    "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
+        # Storage.
+        # Google Cloud Storage.
+      "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
+          # omitted, the latest generation will be used.
+      "object": "A String", # Google Cloud Storage object containing source.
+          #
+          # This object must be a gzipped archive file (.tar.gz) containing source to
+          # build.
+      "bucket": "A String", # Google Cloud Storage bucket containing source (see
+          # [Bucket Name
+          # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
+    },
+  },
+  "steps": [ # Describes the operations to be performed on the workspace.
+    { # BuildStep describes a step to perform in the build pipeline.
+      "args": [ # Command-line arguments to use when running this step's container.
+        "A String",
+      ],
+      "name": "A String", # Name of the container image to use for creating this stage in the
+          # pipeline, as presented to `docker pull`.
+      "dir": "A String", # Working directory (relative to project source root) to use when running
+          # this operation's container.
+      "env": [ # Additional environment variables to set for this step's container.
+        "A String",
+      ],
+    },
+  ],
+  "timeout": "A String", # Amount of time that this build should be allowed to run, to second
+      # granularity. If this amount of time elapses, work on the build will cease
+      # and the build status will be TIMEOUT.
+      # 
+      # Default time is ten minutes.
+  "projectId": "A String", # ID of the project.
+      # @OutputOnly.
+  "images": [ # List of images expected to be built and pushed to Google Container
+      # Registry. If an image is listed here and the image is not produced by
+      # one of the build steps, the build will fail. Any images present when
+      # the build steps are complete will be pushed to Container Registry.
+    "A String",
+  ],
+  "id": "A String", # Unique identifier of the build.
+      # @OutputOnly
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a
+      # network API call.
+    "metadata": { # Service-specific metadata associated with the operation.  It typically
+        # contains progress information and common metadata such as create time.
+        # Some services might not provide such metadata.  Any method that returns a
+        # long-running operation should document the metadata type, if any.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+    "done": True or False, # If the value is `false`, it means the operation is still in progress.
+        # If true, the operation is completed, and either `error` or `response` is
+        # available.
+    "response": { # The normal response of the operation in case of success.  If the original
+        # method returns no data on success, such as `Delete`, the response is
+        # `google.protobuf.Empty`.  If the original method is standard
+        # `Get`/`Create`/`Update`, the response should be the resource.  For other
+        # methods, the response should have the type `XxxResponse`, where `Xxx`
+        # is the original method name.  For example, if the original method name
+        # is `TakeSnapshot()`, the inferred response type is
+        # `TakeSnapshotResponse`.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+    "name": "A String", # The server-assigned name, which is only unique within the same service that
+        # originally returns it. If you use the default HTTP mapping, the
+        # `name` should have the format of `operations/some/unique/name`.
+    "error": { # The `Status` type defines a logical error model that is suitable for different # The error result of the operation in case of failure.
+        # programming environments, including REST APIs and RPC APIs. It is used by
+        # [gRPC](https://github.com/grpc). The error model is designed to be:
+        #
+        # - Simple to use and understand for most users
+        # - Flexible enough to meet unexpected needs
+        #
+        # # Overview
+        #
+        # The `Status` message contains three pieces of data: error code, error message,
+        # and error details. The error code should be an enum value of
+        # google.rpc.Code, but it may accept additional error codes if needed.  The
+        # error message should be a developer-facing English message that helps
+        # developers *understand* and *resolve* the error. If a localized user-facing
+        # error message is needed, put the localized message in the error details or
+        # localize it in the client. The optional error details may contain arbitrary
+        # information about the error. There is a predefined set of error detail types
+        # in the package `google.rpc` which can be used for common error conditions.
+        #
+        # # Language mapping
+        #
+        # The `Status` message is the logical representation of the error model, but it
+        # is not necessarily the actual wire format. When the `Status` message is
+        # exposed in different client libraries and different wire protocols, it can be
+        # mapped differently. For example, it will likely be mapped to some exceptions
+        # in Java, but more likely mapped to some error codes in C.
+        #
+        # # Other uses
+        #
+        # The error model and the `Status` message can be used in a variety of
+        # environments, either with or without APIs, to provide a
+        # consistent developer experience across different environments.
+        #
+        # Example uses of this error model include:
+        #
+        # - Partial errors. If a service needs to return partial errors to the client,
+        #     it may embed the `Status` in the normal response to indicate the partial
+        #     errors.
+        #
+        # - Workflow errors. A typical workflow has multiple steps. Each step may
+        #     have a `Status` message for error reporting purpose.
+        #
+        # - Batch operations. If a client uses batch request and batch response, the
+        #     `Status` message should be used directly inside batch response, one for
+        #     each error sub-response.
+        #
+        # - Asynchronous operations. If an API call embeds asynchronous operation
+        #     results in its response, the status of those operations should be
+        #     represented directly using the `Status` message.
+        #
+        # - Logging. If some API errors are stored in logs, the message `Status` could
+        #     be used directly after any stripping needed for security/privacy reasons.
+      "message": "A String", # A developer-facing error message, which should be in English. Any
+          # user-facing error message should be localized and sent in the
+          # google.rpc.Status.details field, or localized by the client.
+      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+      "details": [ # A list of messages that carry the error details.  There will be a
+          # common set of message types for APIs to use.
+        {
+          "a_key": "", # Properties of the object. Contains field @ype with type URL.
+        },
+      ],
+    },
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(projectId, id, x__xgafv=None)</code>
+  <pre>Returns information about a previously requested build.
+
+The Build that is returned includes its status (e.g., success or failure,
+or in-progress), and timing information.
+
+Args:
+  projectId: string, ID of the project. (required)
+  id: string, ID of the build. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A build resource in the Container Builder API.
+      #
+      # At a high level, a Build describes where to find source code, how to build
+      # it (for example, the builder image to run on the source), and what tag to
+      # apply to the built image when it is pushed to Google Container Registry.
+    "status": "A String", # Status of the build.
+        # @OutputOnly
+    "finishTime": "A String", # Time at which execution of the build was finished.
+        # @OutputOnly
+    "startTime": "A String", # Time at which execution of the build was started.
+        # @OutputOnly
+    "statusDetail": "A String", # Customer-readable message about the current status.
+        # @OutputOnly
+    "logsBucket": "A String", # Google Cloud Storage bucket where logs should be written (see
+        # [Bucket Name
+        # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
+        # Logs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.
+    "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
+        # @OutputOnly
+      "images": [ # Images that were built as a part of the build.
+        { # BuiltImage describes an image built by the pipeline.
+          "name": "A String", # Name used to push the container image to Google Container Registry, as
+              # presented to `docker push`.
+          "digest": "A String", # Docker Registry 2.0 digest.
+        },
+      ],
+    },
+    "createTime": "A String", # Time at which the build was created.
+        # @OutputOnly
+    "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
+        # service.
+      "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
+          # Storage.
+          # Google Cloud Storage.
+        "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
+            # omitted, the latest generation will be used.
+        "object": "A String", # Google Cloud Storage object containing source.
+            #
+            # This object must be a gzipped archive file (.tar.gz) containing source to
+            # build.
+        "bucket": "A String", # Google Cloud Storage bucket containing source (see
+            # [Bucket Name
+            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
+      },
+    },
+    "steps": [ # Describes the operations to be performed on the workspace.
+      { # BuildStep describes a step to perform in the build pipeline.
+        "args": [ # Command-line arguments to use when running this step's container.
+          "A String",
+        ],
+        "name": "A String", # Name of the container image to use for creating this stage in the
+            # pipeline, as presented to `docker pull`.
+        "dir": "A String", # Working directory (relative to project source root) to use when running
+            # this operation's container.
+        "env": [ # Additional environment variables to set for this step's container.
+          "A String",
+        ],
+      },
+    ],
+    "timeout": "A String", # Amount of time that this build should be allowed to run, to second
+        # granularity. If this amount of time elapses, work on the build will cease
+        # and the build status will be TIMEOUT.
+        #
+        # Default time is ten minutes.
+    "projectId": "A String", # ID of the project.
+        # @OutputOnly.
+    "images": [ # List of images expected to be built and pushed to Google Container
+        # Registry. If an image is listed here and the image is not produced by
+        # one of the build steps, the build will fail. Any images present when
+        # the build steps are complete will be pushed to Container Registry.
+      "A String",
+    ],
+    "id": "A String", # Unique identifier of the build.
+        # @OutputOnly
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(projectId, pageSize=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists previously requested builds.
+
+Previously requested builds may still be in-progress, or may have finished
+successfully or unsuccessfully.
+
+Args:
+  projectId: string, ID of the project. (required)
+  pageSize: integer, Number of results to return in the list.
+  pageToken: string, Token to provide to skip to a particular spot in the list.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Response including listed builds.
+    "nextPageToken": "A String", # Token to receive the next page of results.
+    "builds": [ # Builds will be sorted by create_time, descending.
+      { # A build resource in the Container Builder API.
+          #
+          # At a high level, a Build describes where to find source code, how to build
+          # it (for example, the builder image to run on the source), and what tag to
+          # apply to the built image when it is pushed to Google Container Registry.
+        "status": "A String", # Status of the build.
+            # @OutputOnly
+        "finishTime": "A String", # Time at which execution of the build was finished.
+            # @OutputOnly
+        "startTime": "A String", # Time at which execution of the build was started.
+            # @OutputOnly
+        "statusDetail": "A String", # Customer-readable message about the current status.
+            # @OutputOnly
+        "logsBucket": "A String", # Google Cloud Storage bucket where logs should be written (see
+            # [Bucket Name
+            # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
+            # Logs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.
+        "results": { # Results describes the artifacts created by the build pipeline. # Results of the build.
+            # @OutputOnly
+          "images": [ # Images that were built as a part of the build.
+            { # BuiltImage describes an image built by the pipeline.
+              "name": "A String", # Name used to push the container image to Google Container Registry, as
+                  # presented to `docker push`.
+              "digest": "A String", # Docker Registry 2.0 digest.
+            },
+          ],
+        },
+        "createTime": "A String", # Time at which the build was created.
+            # @OutputOnly
+        "source": { # Source describes the location of the source in a supported storage # Describes where to find the source files to build.
+            # service.
+          "storageSource": { # StorageSource describes the location of the source in an archive file in # If provided, get the source from this location in in Google Cloud
+              # Storage.
+              # Google Cloud Storage.
+            "generation": "A String", # Google Cloud Storage generation for the object. If the generation is
+                # omitted, the latest generation will be used.
+            "object": "A String", # Google Cloud Storage object containing source.
+                #
+                # This object must be a gzipped archive file (.tar.gz) containing source to
+                # build.
+            "bucket": "A String", # Google Cloud Storage bucket containing source (see
+                # [Bucket Name
+                # Requirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).
+          },
+        },
+        "steps": [ # Describes the operations to be performed on the workspace.
+          { # BuildStep describes a step to perform in the build pipeline.
+            "args": [ # Command-line arguments to use when running this step's container.
+              "A String",
+            ],
+            "name": "A String", # Name of the container image to use for creating this stage in the
+                # pipeline, as presented to `docker pull`.
+            "dir": "A String", # Working directory (relative to project source root) to use when running
+                # this operation's container.
+            "env": [ # Additional environment variables to set for this step's container.
+              "A String",
+            ],
+          },
+        ],
+        "timeout": "A String", # Amount of time that this build should be allowed to run, to second
+            # granularity. If this amount of time elapses, work on the build will cease
+            # and the build status will be TIMEOUT.
+            #
+            # Default time is ten minutes.
+        "projectId": "A String", # ID of the project.
+            # @OutputOnly.
+        "images": [ # List of images expected to be built and pushed to Google Container
+            # Registry. If an image is listed here and the image is not produced by
+            # one of the build steps, the build will fail. Any images present when
+            # the build steps are complete will be pushed to Container Registry.
+          "A String",
+        ],
+        "id": "A String", # Unique identifier of the build.
+            # @OutputOnly
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/cloudbuild_v1.projects.html b/docs/dyn/cloudbuild_v1.projects.html
new file mode 100644
index 0000000..1c2edb4
--- /dev/null
+++ b/docs/dyn/cloudbuild_v1.projects.html
@@ -0,0 +1,82 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="cloudbuild_v1.html">Google Cloud Container Builder API</a> . <a href="cloudbuild_v1.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="cloudbuild_v1.projects.builds.html">builds()</a></code>
+</p>
+<p class="firstline">Returns the builds Resource.</p>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/clouddebugger_v2.controller.debuggees.breakpoints.html b/docs/dyn/clouddebugger_v2.controller.debuggees.breakpoints.html
index 27dc5dc..448e7c2 100644
--- a/docs/dyn/clouddebugger_v2.controller.debuggees.breakpoints.html
+++ b/docs/dyn/clouddebugger_v2.controller.debuggees.breakpoints.html
@@ -111,7 +111,7 @@
           },
         },
         "logMessageFormat": "A String", # Only relevant when action is `LOG`. Defines the message to log when the breakpoint hits. The message may include parameter placeholders `$0`, `$1`, etc. These placeholders are replaced with the evaluated value of the appropriate expression. Expressions not referenced in `log_message_format` are not logged. Example: `Message received, id = $0, count = $1` with `expressions` = `[ message.id, message.count ]`.
-        "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing veariable and the referenced variable.
+        "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing variable and the referenced variable.
           { # Represents a variable or an argument possibly of a compound object type. Note how the following variables are represented: 1) A simple variable: int x = 5 { name: "x", value: "5", type: "int" } // Captured variable 2) A compound object: struct T { int m1; int m2; }; T x = { 3, 7 }; { // Captured variable name: "x", type: "T", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 3) A pointer where the pointee was captured: T x = { 3, 7 }; T* p = &x; { // Captured variable name: "p", type: "T*", value: "0x00500500", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 4) A pointer where the pointee was not captured: T* p = new T; { // Captured variable name: "p", type: "T*", value: "0x00400400" status { is_error: true, description { format: "unavailable" } } } The status should describe the reason for the missing value, such as ``, ``, `
               # `. Note that a null pointer should not have members. 5) An unnamed value: int* p = new int(7); { // Captured variable name: "p", value: "0x00500500", type: "int*", members { value: "7", type: "int" } } 6) An unnamed pointer where the pointee was not captured: int* p = new int(7); int** pp = &p; { // Captured variable name: "pp", value: "0x00500500", type: "int**", members { value: "0x00400400", type: "int*" status { is_error: true, description: { format: "unavailable" } } } } } To optimize computation, memory and network traffic, variables that repeat in the output multiple times can be stored once in a shared variable table and be referenced using the `var_table_index` field. The variables stored in the shared table are nameless and are essentially a partition of the complete variable. To reconstruct the complete variable, merge the referencing variable with the referenced variable. When using the shared variable table, the following variables: T x = { 3, 7 }; T* p = &x; T& r = x; { name: "x", var_table_index: 3, type: "T" } // Captured variables { name: "p", value "0x00500500", type="T*", var_table_index: 3 } { name: "r", type="T&", var_table_index: 3 } { // Shared variable table entry #3: members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } Note that the pointer address is stored with the referencing variable and not with the referenced variable. This allows the referenced variable to be shared between pointers and references. The type field is optional. The debugger agent may or may not support it.
             "status": { # Represents a contextual status message. The message can indicate an error or informational status, and refer to specific parts of the containing object. For example, the `Breakpoint.status` field can indicate an error referring to the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`. # Status associated with the variable. This field will usually stay unset. A status of a single variable only applies to that variable or expression. The rest of breakpoint data still remains valid. Variables might be reported in error state even when breakpoint is not in final state. The message may refer to variable name with `refers_to` set to `VARIABLE_NAME`. Alternatively `refers_to` will be set to `VARIABLE_VALUE`. In either case variable value and members will be unset. Example of error message applied to name: `Invalid expression syntax`. Example of information message applied to value: `Not captured`. Examples of error message applied to value: * `Malformed string`, * `Field f not found in class C` * `Null pointer dereference`
@@ -134,6 +134,9 @@
           },
         ],
         "logLevel": "A String", # Indicates the severity of the log. Only relevant when action is `LOG`.
+        "labels": { # A set of custom breakpoint properties, populated by the agent, to be displayed to the user.
+          "a_key": "A String",
+        },
         "finalTime": "A String", # Time this breakpoint was finalized as seen by the server in seconds resolution.
         "createTime": "A String", # Time this breakpoint was created by the server in seconds resolution.
         "stackFrames": [ # The stack at breakpoint time.
@@ -251,7 +254,7 @@
         },
       },
       "logMessageFormat": "A String", # Only relevant when action is `LOG`. Defines the message to log when the breakpoint hits. The message may include parameter placeholders `$0`, `$1`, etc. These placeholders are replaced with the evaluated value of the appropriate expression. Expressions not referenced in `log_message_format` are not logged. Example: `Message received, id = $0, count = $1` with `expressions` = `[ message.id, message.count ]`.
-      "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing veariable and the referenced variable.
+      "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing variable and the referenced variable.
         { # Represents a variable or an argument possibly of a compound object type. Note how the following variables are represented: 1) A simple variable: int x = 5 { name: "x", value: "5", type: "int" } // Captured variable 2) A compound object: struct T { int m1; int m2; }; T x = { 3, 7 }; { // Captured variable name: "x", type: "T", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 3) A pointer where the pointee was captured: T x = { 3, 7 }; T* p = &x; { // Captured variable name: "p", type: "T*", value: "0x00500500", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 4) A pointer where the pointee was not captured: T* p = new T; { // Captured variable name: "p", type: "T*", value: "0x00400400" status { is_error: true, description { format: "unavailable" } } } The status should describe the reason for the missing value, such as ``, ``, `
             # `. Note that a null pointer should not have members. 5) An unnamed value: int* p = new int(7); { // Captured variable name: "p", value: "0x00500500", type: "int*", members { value: "7", type: "int" } } 6) An unnamed pointer where the pointee was not captured: int* p = new int(7); int** pp = &p; { // Captured variable name: "pp", value: "0x00500500", type: "int**", members { value: "0x00400400", type: "int*" status { is_error: true, description: { format: "unavailable" } } } } } To optimize computation, memory and network traffic, variables that repeat in the output multiple times can be stored once in a shared variable table and be referenced using the `var_table_index` field. The variables stored in the shared table are nameless and are essentially a partition of the complete variable. To reconstruct the complete variable, merge the referencing variable with the referenced variable. When using the shared variable table, the following variables: T x = { 3, 7 }; T* p = &x; T& r = x; { name: "x", var_table_index: 3, type: "T" } // Captured variables { name: "p", value "0x00500500", type="T*", var_table_index: 3 } { name: "r", type="T&", var_table_index: 3 } { // Shared variable table entry #3: members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } Note that the pointer address is stored with the referencing variable and not with the referenced variable. This allows the referenced variable to be shared between pointers and references. The type field is optional. The debugger agent may or may not support it.
           "status": { # Represents a contextual status message. The message can indicate an error or informational status, and refer to specific parts of the containing object. For example, the `Breakpoint.status` field can indicate an error referring to the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`. # Status associated with the variable. This field will usually stay unset. A status of a single variable only applies to that variable or expression. The rest of breakpoint data still remains valid. Variables might be reported in error state even when breakpoint is not in final state. The message may refer to variable name with `refers_to` set to `VARIABLE_NAME`. Alternatively `refers_to` will be set to `VARIABLE_VALUE`. In either case variable value and members will be unset. Example of error message applied to name: `Invalid expression syntax`. Example of information message applied to value: `Not captured`. Examples of error message applied to value: * `Malformed string`, * `Field f not found in class C` * `Null pointer dereference`
@@ -274,6 +277,9 @@
         },
       ],
       "logLevel": "A String", # Indicates the severity of the log. Only relevant when action is `LOG`.
+      "labels": { # A set of custom breakpoint properties, populated by the agent, to be displayed to the user.
+        "a_key": "A String",
+      },
       "finalTime": "A String", # Time this breakpoint was finalized as seen by the server in seconds resolution.
       "createTime": "A String", # Time this breakpoint was created by the server in seconds resolution.
       "stackFrames": [ # The stack at breakpoint time.
diff --git a/docs/dyn/clouddebugger_v2.debugger.debuggees.breakpoints.html b/docs/dyn/clouddebugger_v2.debugger.debuggees.breakpoints.html
index 266705b..089ded4 100644
--- a/docs/dyn/clouddebugger_v2.debugger.debuggees.breakpoints.html
+++ b/docs/dyn/clouddebugger_v2.debugger.debuggees.breakpoints.html
@@ -75,25 +75,26 @@
 <h1><a href="clouddebugger_v2.html">Google Cloud Debugger API</a> . <a href="clouddebugger_v2.debugger.html">debugger</a> . <a href="clouddebugger_v2.debugger.debuggees.html">debuggees</a> . <a href="clouddebugger_v2.debugger.debuggees.breakpoints.html">breakpoints</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#delete">delete(debuggeeId, breakpointId, x__xgafv=None)</a></code></p>
+  <code><a href="#delete">delete(debuggeeId, breakpointId, clientVersion=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Deletes the breakpoint from the debuggee.</p>
 <p class="toc_element">
-  <code><a href="#get">get(debuggeeId, breakpointId, x__xgafv=None)</a></code></p>
+  <code><a href="#get">get(debuggeeId, breakpointId, clientVersion=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Gets breakpoint information.</p>
 <p class="toc_element">
-  <code><a href="#list">list(debuggeeId, includeAllUsers=None, includeInactive=None, x__xgafv=None, stripResults=None, action_value=None, waitToken=None)</a></code></p>
+  <code><a href="#list">list(debuggeeId, includeAllUsers=None, includeInactive=None, x__xgafv=None, clientVersion=None, stripResults=None, action_value=None, waitToken=None)</a></code></p>
 <p class="firstline">Lists all breakpoints for the debuggee.</p>
 <p class="toc_element">
-  <code><a href="#set">set(debuggeeId, body, x__xgafv=None)</a></code></p>
+  <code><a href="#set">set(debuggeeId, body, clientVersion=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Sets the breakpoint to the debuggee.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="delete">delete(debuggeeId, breakpointId, x__xgafv=None)</code>
+    <code class="details" id="delete">delete(debuggeeId, breakpointId, clientVersion=None, x__xgafv=None)</code>
   <pre>Deletes the breakpoint from the debuggee.
 
 Args:
   debuggeeId: string, ID of the debuggee whose breakpoint to delete. (required)
   breakpointId: string, ID of the breakpoint to delete. (required)
+  clientVersion: string, The client version making the call. Following: `domain/type/version` (e.g., `google.com/intellij/v1`).
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -104,12 +105,13 @@
 </div>
 
 <div class="method">
-    <code class="details" id="get">get(debuggeeId, breakpointId, x__xgafv=None)</code>
+    <code class="details" id="get">get(debuggeeId, breakpointId, clientVersion=None, x__xgafv=None)</code>
   <pre>Gets breakpoint information.
 
 Args:
   debuggeeId: string, ID of the debuggee whose breakpoint to get. (required)
   breakpointId: string, ID of the breakpoint to get. (required)
+  clientVersion: string, The client version making the call. Following: `domain/type/version` (e.g., `google.com/intellij/v1`).
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -129,7 +131,7 @@
         },
       },
       "logMessageFormat": "A String", # Only relevant when action is `LOG`. Defines the message to log when the breakpoint hits. The message may include parameter placeholders `$0`, `$1`, etc. These placeholders are replaced with the evaluated value of the appropriate expression. Expressions not referenced in `log_message_format` are not logged. Example: `Message received, id = $0, count = $1` with `expressions` = `[ message.id, message.count ]`.
-      "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing veariable and the referenced variable.
+      "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing variable and the referenced variable.
         { # Represents a variable or an argument possibly of a compound object type. Note how the following variables are represented: 1) A simple variable: int x = 5 { name: "x", value: "5", type: "int" } // Captured variable 2) A compound object: struct T { int m1; int m2; }; T x = { 3, 7 }; { // Captured variable name: "x", type: "T", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 3) A pointer where the pointee was captured: T x = { 3, 7 }; T* p = &x; { // Captured variable name: "p", type: "T*", value: "0x00500500", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 4) A pointer where the pointee was not captured: T* p = new T; { // Captured variable name: "p", type: "T*", value: "0x00400400" status { is_error: true, description { format: "unavailable" } } } The status should describe the reason for the missing value, such as ``, ``, `
             # `. Note that a null pointer should not have members. 5) An unnamed value: int* p = new int(7); { // Captured variable name: "p", value: "0x00500500", type: "int*", members { value: "7", type: "int" } } 6) An unnamed pointer where the pointee was not captured: int* p = new int(7); int** pp = &p; { // Captured variable name: "pp", value: "0x00500500", type: "int**", members { value: "0x00400400", type: "int*" status { is_error: true, description: { format: "unavailable" } } } } } To optimize computation, memory and network traffic, variables that repeat in the output multiple times can be stored once in a shared variable table and be referenced using the `var_table_index` field. The variables stored in the shared table are nameless and are essentially a partition of the complete variable. To reconstruct the complete variable, merge the referencing variable with the referenced variable. When using the shared variable table, the following variables: T x = { 3, 7 }; T* p = &x; T& r = x; { name: "x", var_table_index: 3, type: "T" } // Captured variables { name: "p", value "0x00500500", type="T*", var_table_index: 3 } { name: "r", type="T&", var_table_index: 3 } { // Shared variable table entry #3: members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } Note that the pointer address is stored with the referencing variable and not with the referenced variable. This allows the referenced variable to be shared between pointers and references. The type field is optional. The debugger agent may or may not support it.
           "status": { # Represents a contextual status message. The message can indicate an error or informational status, and refer to specific parts of the containing object. For example, the `Breakpoint.status` field can indicate an error referring to the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`. # Status associated with the variable. This field will usually stay unset. A status of a single variable only applies to that variable or expression. The rest of breakpoint data still remains valid. Variables might be reported in error state even when breakpoint is not in final state. The message may refer to variable name with `refers_to` set to `VARIABLE_NAME`. Alternatively `refers_to` will be set to `VARIABLE_VALUE`. In either case variable value and members will be unset. Example of error message applied to name: `Invalid expression syntax`. Example of information message applied to value: `Not captured`. Examples of error message applied to value: * `Malformed string`, * `Field f not found in class C` * `Null pointer dereference`
@@ -152,6 +154,9 @@
         },
       ],
       "logLevel": "A String", # Indicates the severity of the log. Only relevant when action is `LOG`.
+      "labels": { # A set of custom breakpoint properties, populated by the agent, to be displayed to the user.
+        "a_key": "A String",
+      },
       "finalTime": "A String", # Time this breakpoint was finalized as seen by the server in seconds resolution.
       "createTime": "A String", # Time this breakpoint was created by the server in seconds resolution.
       "stackFrames": [ # The stack at breakpoint time.
@@ -245,7 +250,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(debuggeeId, includeAllUsers=None, includeInactive=None, x__xgafv=None, stripResults=None, action_value=None, waitToken=None)</code>
+    <code class="details" id="list">list(debuggeeId, includeAllUsers=None, includeInactive=None, x__xgafv=None, clientVersion=None, stripResults=None, action_value=None, waitToken=None)</code>
   <pre>Lists all breakpoints for the debuggee.
 
 Args:
@@ -253,6 +258,7 @@
   includeAllUsers: boolean, When set to `true`, the response includes the list of breakpoints set by any user. Otherwise, it includes only breakpoints set by the caller.
   includeInactive: boolean, When set to `true`, the response includes active and inactive breakpoints. Otherwise, it includes only active breakpoints.
   x__xgafv: string, V1 error format.
+  clientVersion: string, The client version making the call. Following: `domain/type/version` (e.g., `google.com/intellij/v1`).
   stripResults: boolean, When set to `true`, the response breakpoints are stripped of the results fields: `stack_frames`, `evaluated_expressions` and `variable_table`.
   action_value: string, Only breakpoints with the specified action will pass the filter.
   waitToken: string, A wait token that, if specified, blocks the call until the breakpoints list has changed, or a server selected timeout has expired. The value should be set from the last response. The error code `google.rpc.Code.ABORTED` (RPC) is returned on wait timeout, which should be called again with the same `wait_token`.
@@ -276,7 +282,7 @@
           },
         },
         "logMessageFormat": "A String", # Only relevant when action is `LOG`. Defines the message to log when the breakpoint hits. The message may include parameter placeholders `$0`, `$1`, etc. These placeholders are replaced with the evaluated value of the appropriate expression. Expressions not referenced in `log_message_format` are not logged. Example: `Message received, id = $0, count = $1` with `expressions` = `[ message.id, message.count ]`.
-        "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing veariable and the referenced variable.
+        "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing variable and the referenced variable.
           { # Represents a variable or an argument possibly of a compound object type. Note how the following variables are represented: 1) A simple variable: int x = 5 { name: "x", value: "5", type: "int" } // Captured variable 2) A compound object: struct T { int m1; int m2; }; T x = { 3, 7 }; { // Captured variable name: "x", type: "T", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 3) A pointer where the pointee was captured: T x = { 3, 7 }; T* p = &x; { // Captured variable name: "p", type: "T*", value: "0x00500500", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 4) A pointer where the pointee was not captured: T* p = new T; { // Captured variable name: "p", type: "T*", value: "0x00400400" status { is_error: true, description { format: "unavailable" } } } The status should describe the reason for the missing value, such as ``, ``, `
               # `. Note that a null pointer should not have members. 5) An unnamed value: int* p = new int(7); { // Captured variable name: "p", value: "0x00500500", type: "int*", members { value: "7", type: "int" } } 6) An unnamed pointer where the pointee was not captured: int* p = new int(7); int** pp = &p; { // Captured variable name: "pp", value: "0x00500500", type: "int**", members { value: "0x00400400", type: "int*" status { is_error: true, description: { format: "unavailable" } } } } } To optimize computation, memory and network traffic, variables that repeat in the output multiple times can be stored once in a shared variable table and be referenced using the `var_table_index` field. The variables stored in the shared table are nameless and are essentially a partition of the complete variable. To reconstruct the complete variable, merge the referencing variable with the referenced variable. When using the shared variable table, the following variables: T x = { 3, 7 }; T* p = &x; T& r = x; { name: "x", var_table_index: 3, type: "T" } // Captured variables { name: "p", value "0x00500500", type="T*", var_table_index: 3 } { name: "r", type="T&", var_table_index: 3 } { // Shared variable table entry #3: members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } Note that the pointer address is stored with the referencing variable and not with the referenced variable. This allows the referenced variable to be shared between pointers and references. The type field is optional. The debugger agent may or may not support it.
             "status": { # Represents a contextual status message. The message can indicate an error or informational status, and refer to specific parts of the containing object. For example, the `Breakpoint.status` field can indicate an error referring to the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`. # Status associated with the variable. This field will usually stay unset. A status of a single variable only applies to that variable or expression. The rest of breakpoint data still remains valid. Variables might be reported in error state even when breakpoint is not in final state. The message may refer to variable name with `refers_to` set to `VARIABLE_NAME`. Alternatively `refers_to` will be set to `VARIABLE_VALUE`. In either case variable value and members will be unset. Example of error message applied to name: `Invalid expression syntax`. Example of information message applied to value: `Not captured`. Examples of error message applied to value: * `Malformed string`, * `Field f not found in class C` * `Null pointer dereference`
@@ -299,6 +305,9 @@
           },
         ],
         "logLevel": "A String", # Indicates the severity of the log. Only relevant when action is `LOG`.
+        "labels": { # A set of custom breakpoint properties, populated by the agent, to be displayed to the user.
+          "a_key": "A String",
+        },
         "finalTime": "A String", # Time this breakpoint was finalized as seen by the server in seconds resolution.
         "createTime": "A String", # Time this breakpoint was created by the server in seconds resolution.
         "stackFrames": [ # The stack at breakpoint time.
@@ -393,7 +402,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="set">set(debuggeeId, body, x__xgafv=None)</code>
+    <code class="details" id="set">set(debuggeeId, body, clientVersion=None, x__xgafv=None)</code>
   <pre>Sets the breakpoint to the debuggee.
 
 Args:
@@ -414,7 +423,7 @@
     },
   },
   "logMessageFormat": "A String", # Only relevant when action is `LOG`. Defines the message to log when the breakpoint hits. The message may include parameter placeholders `$0`, `$1`, etc. These placeholders are replaced with the evaluated value of the appropriate expression. Expressions not referenced in `log_message_format` are not logged. Example: `Message received, id = $0, count = $1` with `expressions` = `[ message.id, message.count ]`.
-  "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing veariable and the referenced variable.
+  "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing variable and the referenced variable.
     { # Represents a variable or an argument possibly of a compound object type. Note how the following variables are represented: 1) A simple variable: int x = 5 { name: "x", value: "5", type: "int" } // Captured variable 2) A compound object: struct T { int m1; int m2; }; T x = { 3, 7 }; { // Captured variable name: "x", type: "T", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 3) A pointer where the pointee was captured: T x = { 3, 7 }; T* p = &x; { // Captured variable name: "p", type: "T*", value: "0x00500500", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 4) A pointer where the pointee was not captured: T* p = new T; { // Captured variable name: "p", type: "T*", value: "0x00400400" status { is_error: true, description { format: "unavailable" } } } The status should describe the reason for the missing value, such as ``, ``, `
         # `. Note that a null pointer should not have members. 5) An unnamed value: int* p = new int(7); { // Captured variable name: "p", value: "0x00500500", type: "int*", members { value: "7", type: "int" } } 6) An unnamed pointer where the pointee was not captured: int* p = new int(7); int** pp = &p; { // Captured variable name: "pp", value: "0x00500500", type: "int**", members { value: "0x00400400", type: "int*" status { is_error: true, description: { format: "unavailable" } } } } } To optimize computation, memory and network traffic, variables that repeat in the output multiple times can be stored once in a shared variable table and be referenced using the `var_table_index` field. The variables stored in the shared table are nameless and are essentially a partition of the complete variable. To reconstruct the complete variable, merge the referencing variable with the referenced variable. When using the shared variable table, the following variables: T x = { 3, 7 }; T* p = &x; T& r = x; { name: "x", var_table_index: 3, type: "T" } // Captured variables { name: "p", value "0x00500500", type="T*", var_table_index: 3 } { name: "r", type="T&", var_table_index: 3 } { // Shared variable table entry #3: members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } Note that the pointer address is stored with the referencing variable and not with the referenced variable. This allows the referenced variable to be shared between pointers and references. The type field is optional. The debugger agent may or may not support it.
       "status": { # Represents a contextual status message. The message can indicate an error or informational status, and refer to specific parts of the containing object. For example, the `Breakpoint.status` field can indicate an error referring to the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`. # Status associated with the variable. This field will usually stay unset. A status of a single variable only applies to that variable or expression. The rest of breakpoint data still remains valid. Variables might be reported in error state even when breakpoint is not in final state. The message may refer to variable name with `refers_to` set to `VARIABLE_NAME`. Alternatively `refers_to` will be set to `VARIABLE_VALUE`. In either case variable value and members will be unset. Example of error message applied to name: `Invalid expression syntax`. Example of information message applied to value: `Not captured`. Examples of error message applied to value: * `Malformed string`, * `Field f not found in class C` * `Null pointer dereference`
@@ -437,6 +446,9 @@
     },
   ],
   "logLevel": "A String", # Indicates the severity of the log. Only relevant when action is `LOG`.
+  "labels": { # A set of custom breakpoint properties, populated by the agent, to be displayed to the user.
+    "a_key": "A String",
+  },
   "finalTime": "A String", # Time this breakpoint was finalized as seen by the server in seconds resolution.
   "createTime": "A String", # Time this breakpoint was created by the server in seconds resolution.
   "stackFrames": [ # The stack at breakpoint time.
@@ -527,6 +539,7 @@
   "condition": "A String", # Condition that triggers the breakpoint. The condition is a compound boolean expression composed using expressions in a programming language at the source location.
 }
 
+  clientVersion: string, The client version making the call. Following: `domain/type/version` (e.g., `google.com/intellij/v1`).
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -546,7 +559,7 @@
         },
       },
       "logMessageFormat": "A String", # Only relevant when action is `LOG`. Defines the message to log when the breakpoint hits. The message may include parameter placeholders `$0`, `$1`, etc. These placeholders are replaced with the evaluated value of the appropriate expression. Expressions not referenced in `log_message_format` are not logged. Example: `Message received, id = $0, count = $1` with `expressions` = `[ message.id, message.count ]`.
-      "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing veariable and the referenced variable.
+      "variableTable": [ # The `variable_table` exists to aid with computation, memory and network traffic optimization. It enables storing a variable once and reference it from multiple variables, including variables stored in the `variable_table` itself. For example, the same `this` object, which may appear at many levels of the stack, can have all of its data stored once in this table. The stack frame variables then would hold only a reference to it. The variable `var_table_index` field is an index into this repeated field. The stored objects are nameless and get their name from the referencing variable. The effective variable is a merge of the referencing variable and the referenced variable.
         { # Represents a variable or an argument possibly of a compound object type. Note how the following variables are represented: 1) A simple variable: int x = 5 { name: "x", value: "5", type: "int" } // Captured variable 2) A compound object: struct T { int m1; int m2; }; T x = { 3, 7 }; { // Captured variable name: "x", type: "T", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 3) A pointer where the pointee was captured: T x = { 3, 7 }; T* p = &x; { // Captured variable name: "p", type: "T*", value: "0x00500500", members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } 4) A pointer where the pointee was not captured: T* p = new T; { // Captured variable name: "p", type: "T*", value: "0x00400400" status { is_error: true, description { format: "unavailable" } } } The status should describe the reason for the missing value, such as ``, ``, `
             # `. Note that a null pointer should not have members. 5) An unnamed value: int* p = new int(7); { // Captured variable name: "p", value: "0x00500500", type: "int*", members { value: "7", type: "int" } } 6) An unnamed pointer where the pointee was not captured: int* p = new int(7); int** pp = &p; { // Captured variable name: "pp", value: "0x00500500", type: "int**", members { value: "0x00400400", type: "int*" status { is_error: true, description: { format: "unavailable" } } } } } To optimize computation, memory and network traffic, variables that repeat in the output multiple times can be stored once in a shared variable table and be referenced using the `var_table_index` field. The variables stored in the shared table are nameless and are essentially a partition of the complete variable. To reconstruct the complete variable, merge the referencing variable with the referenced variable. When using the shared variable table, the following variables: T x = { 3, 7 }; T* p = &x; T& r = x; { name: "x", var_table_index: 3, type: "T" } // Captured variables { name: "p", value "0x00500500", type="T*", var_table_index: 3 } { name: "r", type="T&", var_table_index: 3 } { // Shared variable table entry #3: members { name: "m1", value: "3", type: "int" }, members { name: "m2", value: "7", type: "int" } } Note that the pointer address is stored with the referencing variable and not with the referenced variable. This allows the referenced variable to be shared between pointers and references. The type field is optional. The debugger agent may or may not support it.
           "status": { # Represents a contextual status message. The message can indicate an error or informational status, and refer to specific parts of the containing object. For example, the `Breakpoint.status` field can indicate an error referring to the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`. # Status associated with the variable. This field will usually stay unset. A status of a single variable only applies to that variable or expression. The rest of breakpoint data still remains valid. Variables might be reported in error state even when breakpoint is not in final state. The message may refer to variable name with `refers_to` set to `VARIABLE_NAME`. Alternatively `refers_to` will be set to `VARIABLE_VALUE`. In either case variable value and members will be unset. Example of error message applied to name: `Invalid expression syntax`. Example of information message applied to value: `Not captured`. Examples of error message applied to value: * `Malformed string`, * `Field f not found in class C` * `Null pointer dereference`
@@ -569,6 +582,9 @@
         },
       ],
       "logLevel": "A String", # Indicates the severity of the log. Only relevant when action is `LOG`.
+      "labels": { # A set of custom breakpoint properties, populated by the agent, to be displayed to the user.
+        "a_key": "A String",
+      },
       "finalTime": "A String", # Time this breakpoint was finalized as seen by the server in seconds resolution.
       "createTime": "A String", # Time this breakpoint was created by the server in seconds resolution.
       "stackFrames": [ # The stack at breakpoint time.
diff --git a/docs/dyn/clouddebugger_v2.debugger.debuggees.html b/docs/dyn/clouddebugger_v2.debugger.debuggees.html
index 9502736..06bf7c5 100644
--- a/docs/dyn/clouddebugger_v2.debugger.debuggees.html
+++ b/docs/dyn/clouddebugger_v2.debugger.debuggees.html
@@ -80,14 +80,15 @@
 <p class="firstline">Returns the breakpoints Resource.</p>
 
 <p class="toc_element">
-  <code><a href="#list">list(includeInactive=None, project=None, x__xgafv=None)</a></code></p>
+  <code><a href="#list">list(clientVersion=None, includeInactive=None, project=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists all the debuggees that the user can set breakpoints to.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(includeInactive=None, project=None, x__xgafv=None)</code>
+    <code class="details" id="list">list(clientVersion=None, includeInactive=None, project=None, x__xgafv=None)</code>
   <pre>Lists all the debuggees that the user can set breakpoints to.
 
 Args:
+  clientVersion: string, The client version making the call. Following: `domain/type/version` (e.g., `google.com/intellij/v1`).
   includeInactive: boolean, When set to `true`, the result includes all debuggees. Otherwise, the result includes only debuggees that are active.
   project: string, Project number of a Google Cloud project whose debuggees to list.
   x__xgafv: string, V1 error format.
diff --git a/docs/dyn/clouderrorreporting_v1beta1.html b/docs/dyn/clouderrorreporting_v1beta1.html
new file mode 100644
index 0000000..af57363
--- /dev/null
+++ b/docs/dyn/clouderrorreporting_v1beta1.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="clouderrorreporting_v1beta1.html">Stackdriver Error Reporting API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="clouderrorreporting_v1beta1.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/clouderrorreporting_v1beta1.projects.events.html b/docs/dyn/clouderrorreporting_v1beta1.projects.events.html
new file mode 100644
index 0000000..5a8d70c
--- /dev/null
+++ b/docs/dyn/clouderrorreporting_v1beta1.projects.events.html
@@ -0,0 +1,194 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="clouderrorreporting_v1beta1.html">Stackdriver Error Reporting API</a> . <a href="clouderrorreporting_v1beta1.projects.html">projects</a> . <a href="clouderrorreporting_v1beta1.projects.events.html">events</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(projectName=None, pageSize=None, x__xgafv=None, timeRange_period=None, pageToken=None, serviceFilter_version=None, serviceFilter_service=None, groupId=None)</a></code></p>
+<p class="firstline">Lists the specified events.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(projectName=None, pageSize=None, x__xgafv=None, timeRange_period=None, pageToken=None, serviceFilter_version=None, serviceFilter_service=None, groupId=None)</code>
+  <pre>Lists the specified events.
+
+Args:
+  projectName: string, The resource name of the Google Cloud Platform project. Required.
+Example: projects/my-project (required)
+  pageSize: integer, The maximum number of results to return per response.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+  timeRange_period: string, Restricts the query to the specified time range.
+  pageToken: string, A `next_page_token` provided by a previous response.
+  serviceFilter_version: string, The exact value to match against
+[`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version).
+  serviceFilter_service: string, The exact value to match against
+[`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).
+  groupId: string, The group for which events shall be returned. Required.
+
+Returns:
+  An object of the form:
+
+    { # Contains a set of requested error events.
+    "nextPageToken": "A String", # If non-empty, more results are available.
+        # Pass this token, along with the same query parameters as the first
+        # request, to view the next page of results.
+    "errorEvents": [ # The error events which match the given request.
+      { # An error event which is returned by the Error Reporting system.
+        "serviceContext": { # Describes a running service that sends errors. # The service_context for which this error was reported.
+            # Its version changes over time and multiple versions can run in parallel.
+          "version": "A String", # Represents the source code version that the developer provided,
+              # which could represent a version label or a Git SHA-1 hash, for example.
+          "service": "A String", # An identifier of the service, such as the name of the executable, job, or
+              # Google App Engine module name. This field is expected to have a low number
+              # of values that are relatively stable over time, as opposed to
+              # `version`, which can be changed whenever new code is deployed.
+              #
+              # Contains the module name for error reports extracted from Google
+              # App Engine logs or `default` if the App Engine default module is used.
+        },
+        "eventTime": "A String", # Time when the event occurred as provided in the error report.
+            # If the report did not contain a timestamp, the time the error was received
+            # by the Error Reporting system is used.
+        "message": "A String", # The stack trace that was reported or logged by the service.
+        "context": { # A description of the context in which an error occurred. # Data about the context in which the error occurred.
+            # This data should be provided by the application when reporting an error,
+            # unless the
+            # error report has been generated automatically from Google App Engine logs.
+            # All fields are optional.
+          "httpRequest": { # HTTP request data that is related to a reported error. # The HTTP request which was processed when the error was triggered.
+              # This data should be provided by the application when reporting an error,
+              # unless the
+              # error report has been generated automatically from Google App Engine logs.
+              # All fields are optional.
+            "responseStatusCode": 42, # The HTTP response status code for the request.
+            "url": "A String", # The URL of the request.
+            "referrer": "A String", # The referrer information that is provided with the request.
+            "remoteIp": "A String", # The IP address from which the request originated.
+                # This can be IPv4, IPv6, or a token which is derived from the
+                # IP address, depending on the data that has been provided
+                # in the error report.
+            "userAgent": "A String", # The user agent information that is provided with the request.
+            "method": "A String", # The type of HTTP request, such as `GET`, `POST`, etc.
+          },
+          "reportLocation": { # Indicates a location in the source code of the service for which # The location in the source code where the decision was made to
+              # report the error, usually the place where it was logged.
+              # For a logged exception this would be the source line where the
+              # exception is logged, usually close to the place where it was
+              # caught. This value is in contrast to `Exception.cause_location`,
+              # which describes the source line where the exception was thrown.
+              # errors are reported.
+              # This data should be provided by the application when reporting an error,
+              # unless the error report has been generated automatically from Google App
+              # Engine logs. All fields are optional.
+            "lineNumber": 42, # 1-based. 0 indicates that the line number is unknown.
+            "functionName": "A String", # Human-readable name of a function or method.
+                # The value can include optional context like the class or package name.
+                # For example, `my.package.MyClass.method` in case of Java.
+            "filePath": "A String", # The source code filename, which can include a truncated relative path, or
+                # a full path from a production machine.
+          },
+          "user": "A String", # The user who caused or was affected by the crash.
+              # This can be a user ID, an email address, or an arbitrary token that
+              # uniquely identifies the user.
+              # When sending an error report, leave this field empty if the user was not
+              # logged in. In this case the
+              # Error Reporting system will use other data, such as remote IP address, to
+              # distinguish affected users. See `affected_users_count` in
+              # `ErrorGroupStats`.
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/clouderrorreporting_v1beta1.projects.groupStats.html b/docs/dyn/clouderrorreporting_v1beta1.projects.groupStats.html
new file mode 100644
index 0000000..71d4da8
--- /dev/null
+++ b/docs/dyn/clouderrorreporting_v1beta1.projects.groupStats.html
@@ -0,0 +1,278 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="clouderrorreporting_v1beta1.html">Stackdriver Error Reporting API</a> . <a href="clouderrorreporting_v1beta1.projects.html">projects</a> . <a href="clouderrorreporting_v1beta1.projects.groupStats.html">groupStats</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(projectName=None, alignmentTime=None, pageSize=None, x__xgafv=None, alignment=None, timedCountDuration=None, timeRange_period=None, pageToken=None, serviceFilter_version=None, serviceFilter_service=None, groupId=None, order=None)</a></code></p>
+<p class="firstline">Lists the specified groups.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(projectName=None, alignmentTime=None, pageSize=None, x__xgafv=None, alignment=None, timedCountDuration=None, timeRange_period=None, pageToken=None, serviceFilter_version=None, serviceFilter_service=None, groupId=None, order=None)</code>
+  <pre>Lists the specified groups.
+
+Args:
+  projectName: string, The resource name of the Google Cloud Platform project. Written as
+`projects/` plus the
+[Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840).
+Required. Example: `projects/my-project-123`. (required)
+  alignmentTime: string, Time where the timed counts shall be aligned if rounded alignment
+is chosen. Default is 00:00 UTC.
+  pageSize: integer, The maximum number of results to return per response.
+Default is 20.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+  alignment: string, The alignment of the timed counts to be returned.
+Default is `ALIGNMENT_EQUAL_AT_END`.
+  timedCountDuration: string, The preferred duration for a single returned `TimedCount`.
+If not set, no timed counts are returned.
+  timeRange_period: string, Restricts the query to the specified time range.
+  pageToken: string, A `next_page_token` provided by a previous response. To view additional
+results, pass this token along with the identical query parameters as the
+first request.
+  serviceFilter_version: string, The exact value to match against
+[`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version).
+  serviceFilter_service: string, The exact value to match against
+[`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).
+  groupId: string, List all `ErrorGroupStats` with these IDs.
+If not specified, all error group stats with a non-zero error count
+for the given selection criteria are returned. (repeated)
+  order: string, The sort order in which the results are returned.
+Default is `COUNT_DESC`.
+
+Returns:
+  An object of the form:
+
+    { # Contains a set of requested error group stats.
+    "nextPageToken": "A String", # If non-empty, more results are available.
+        # Pass this token, along with the same query parameters as the first
+        # request, to view the next page of results.
+    "errorGroupStats": [ # The error group stats which match the given request.
+      { # Data extracted for a specific group based on certain selection criteria,
+          # such as a given time period and/or service filter.
+        "count": "A String", # Approximate total number of events in the given group that match
+            # the selection criteria.
+        "firstSeenTime": "A String", # Approximate first occurrence that was seen for this group and
+            # which matches the given selection criteria.
+        "affectedUsersCount": "A String", # Approximate number of affected users in the given group that
+            # match the selection criteria.
+            # Users are distinguished by data in the `ErrorContext` of the
+            # individual error events, such as their login name or their remote
+            # IP address in case of HTTP requests.
+            # The number of affected users can be zero even if the number of
+            # errors is non-zero if no data was provided from which the
+            # affected user could be deduced.
+            # Users are counted based on data in the request
+            # context that was provided in the error report. If more users are
+            # implicitly affected, such as due to a crash of the whole service,
+            # this is not reflected here.
+        "group": { # Description of a group of similar error events. # Group data that is independent of the selection criteria.
+          "trackingIssues": [ # Associated tracking issues.
+            { # Information related to tracking the progress on resolving the error.
+              "url": "A String", # A URL pointing to a related entry in an issue tracking system.
+                  # Example: https://github.com/user/project/issues/4
+            },
+          ],
+          "groupId": "A String", # Group IDs are unique for a given project. If the same kind of error
+              # occurs in different service contexts, it will receive the same group ID.
+          "name": "A String", # Group resource name.
+              # Example: `projects/my-project-123/groups/my-groupid`
+        },
+        "timedCounts": [ # Approximate number of occurrences over time.
+            # Timed counts returned by ListGroups are guaranteed to be:
+            #
+            # - Inside the requested time interval
+            # - Non-overlapping, and
+            # - Ordered by ascending time.
+          { # The number of errors in a given time period.
+              # All numbers are approximate since the error events are sampled
+              # before counting them.
+            "count": "A String", # Approximate number of occurrences in the given time period.
+            "endTime": "A String", # End of the time period to which `count` refers (excluded).
+            "startTime": "A String", # Start of the time period to which `count` refers (included).
+          },
+        ],
+        "lastSeenTime": "A String", # Approximate last occurrence that was seen for this group
+            # and which matches the given selection criteria.
+        "representative": { # An error event which is returned by the Error Reporting system. # An arbitrary event that is chosen as representative for the whole group.
+            # The representative event is intended to be used as a quick preview for
+            # the whole group. Events in the group are usually sufficiently similar
+            # to each other such that showing an arbitrary representative provides
+            # insight into the characteristics of the group as a whole.
+          "serviceContext": { # Describes a running service that sends errors. # The service_context for which this error was reported.
+              # Its version changes over time and multiple versions can run in parallel.
+            "version": "A String", # Represents the source code version that the developer provided,
+                # which could represent a version label or a Git SHA-1 hash, for example.
+            "service": "A String", # An identifier of the service, such as the name of the executable, job, or
+                # Google App Engine module name. This field is expected to have a low number
+                # of values that are relatively stable over time, as opposed to
+                # `version`, which can be changed whenever new code is deployed.
+                #
+                # Contains the module name for error reports extracted from Google
+                # App Engine logs or `default` if the App Engine default module is used.
+          },
+          "eventTime": "A String", # Time when the event occurred as provided in the error report.
+              # If the report did not contain a timestamp, the time the error was received
+              # by the Error Reporting system is used.
+          "message": "A String", # The stack trace that was reported or logged by the service.
+          "context": { # A description of the context in which an error occurred. # Data about the context in which the error occurred.
+              # This data should be provided by the application when reporting an error,
+              # unless the
+              # error report has been generated automatically from Google App Engine logs.
+              # All fields are optional.
+            "httpRequest": { # HTTP request data that is related to a reported error. # The HTTP request which was processed when the error was triggered.
+                # This data should be provided by the application when reporting an error,
+                # unless the
+                # error report has been generated automatically from Google App Engine logs.
+                # All fields are optional.
+              "responseStatusCode": 42, # The HTTP response status code for the request.
+              "url": "A String", # The URL of the request.
+              "referrer": "A String", # The referrer information that is provided with the request.
+              "remoteIp": "A String", # The IP address from which the request originated.
+                  # This can be IPv4, IPv6, or a token which is derived from the
+                  # IP address, depending on the data that has been provided
+                  # in the error report.
+              "userAgent": "A String", # The user agent information that is provided with the request.
+              "method": "A String", # The type of HTTP request, such as `GET`, `POST`, etc.
+            },
+            "reportLocation": { # Indicates a location in the source code of the service for which # The location in the source code where the decision was made to
+                # report the error, usually the place where it was logged.
+                # For a logged exception this would be the source line where the
+                # exception is logged, usually close to the place where it was
+                # caught. This value is in contrast to `Exception.cause_location`,
+                # which describes the source line where the exception was thrown.
+                # errors are reported.
+                # This data should be provided by the application when reporting an error,
+                # unless the error report has been generated automatically from Google App
+                # Engine logs. All fields are optional.
+              "lineNumber": 42, # 1-based. 0 indicates that the line number is unknown.
+              "functionName": "A String", # Human-readable name of a function or method.
+                  # The value can include optional context like the class or package name.
+                  # For example, `my.package.MyClass.method` in case of Java.
+              "filePath": "A String", # The source code filename, which can include a truncated relative path, or
+                  # a full path from a production machine.
+            },
+            "user": "A String", # The user who caused or was affected by the crash.
+                # This can be a user ID, an email address, or an arbitrary token that
+                # uniquely identifies the user.
+                # When sending an error report, leave this field empty if the user was not
+                # logged in. In this case the
+                # Error Reporting system will use other data, such as remote IP address, to
+                # distinguish affected users. See `affected_users_count` in
+                # `ErrorGroupStats`.
+          },
+        },
+        "numAffectedServices": 42, # The total number of services with a non-zero error count for the given
+            # selection criteria.
+        "affectedServices": [ # Service contexts with a non-zero error count for the given selection
+            # criteria. This list can be truncated if multiple services are affected.
+            # Refer to `num_affected_services` for the total count.
+          { # Describes a running service that sends errors.
+              # Its version changes over time and multiple versions can run in parallel.
+            "version": "A String", # Represents the source code version that the developer provided,
+                # which could represent a version label or a Git SHA-1 hash, for example.
+            "service": "A String", # An identifier of the service, such as the name of the executable, job, or
+                # Google App Engine module name. This field is expected to have a low number
+                # of values that are relatively stable over time, as opposed to
+                # `version`, which can be changed whenever new code is deployed.
+                #
+                # Contains the module name for error reports extracted from Google
+                # App Engine logs or `default` if the App Engine default module is used.
+          },
+        ],
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/clouderrorreporting_v1beta1.projects.groups.html b/docs/dyn/clouderrorreporting_v1beta1.projects.groups.html
new file mode 100644
index 0000000..110d180
--- /dev/null
+++ b/docs/dyn/clouderrorreporting_v1beta1.projects.groups.html
@@ -0,0 +1,159 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="clouderrorreporting_v1beta1.html">Stackdriver Error Reporting API</a> . <a href="clouderrorreporting_v1beta1.projects.html">projects</a> . <a href="clouderrorreporting_v1beta1.projects.groups.html">groups</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(groupName=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Get the specified group.</p>
+<p class="toc_element">
+  <code><a href="#update">update(name=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Replace the data for the specified group.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(groupName=None, x__xgafv=None)</code>
+  <pre>Get the specified group.
+
+Args:
+  groupName: string, Group resource name. Required.
+Example: `projects/my-project-123/groups/my-group` (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Description of a group of similar error events.
+    "trackingIssues": [ # Associated tracking issues.
+      { # Information related to tracking the progress on resolving the error.
+        "url": "A String", # A URL pointing to a related entry in an issue tracking system.
+            # Example: https://github.com/user/project/issues/4
+      },
+    ],
+    "groupId": "A String", # Group IDs are unique for a given project. If the same kind of error
+        # occurs in different service contexts, it will receive the same group ID.
+    "name": "A String", # Group resource name.
+        # Example: `projects/my-project-123/groups/my-groupid`
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(name=None, body, x__xgafv=None)</code>
+  <pre>Replace the data for the specified group.
+Fails if the group does not exist.
+
+Args:
+  name: string, Group resource name.
+Example: `projects/my-project-123/groups/my-groupid` (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Description of a group of similar error events.
+  "trackingIssues": [ # Associated tracking issues.
+    { # Information related to tracking the progress on resolving the error.
+      "url": "A String", # A URL pointing to a related entry in an issue tracking system.
+          # Example: https://github.com/user/project/issues/4
+    },
+  ],
+  "groupId": "A String", # Group IDs are unique for a given project. If the same kind of error
+      # occurs in different service contexts, it will receive the same group ID.
+  "name": "A String", # Group resource name.
+      # Example: `projects/my-project-123/groups/my-groupid`
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Description of a group of similar error events.
+    "trackingIssues": [ # Associated tracking issues.
+      { # Information related to tracking the progress on resolving the error.
+        "url": "A String", # A URL pointing to a related entry in an issue tracking system.
+            # Example: https://github.com/user/project/issues/4
+      },
+    ],
+    "groupId": "A String", # Group IDs are unique for a given project. If the same kind of error
+        # occurs in different service contexts, it will receive the same group ID.
+    "name": "A String", # Group resource name.
+        # Example: `projects/my-project-123/groups/my-groupid`
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/clouderrorreporting_v1beta1.projects.html b/docs/dyn/clouderrorreporting_v1beta1.projects.html
new file mode 100644
index 0000000..15d6c6d
--- /dev/null
+++ b/docs/dyn/clouderrorreporting_v1beta1.projects.html
@@ -0,0 +1,115 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="clouderrorreporting_v1beta1.html">Stackdriver Error Reporting API</a> . <a href="clouderrorreporting_v1beta1.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="clouderrorreporting_v1beta1.projects.events.html">events()</a></code>
+</p>
+<p class="firstline">Returns the events Resource.</p>
+
+<p class="toc_element">
+  <code><a href="clouderrorreporting_v1beta1.projects.groupStats.html">groupStats()</a></code>
+</p>
+<p class="firstline">Returns the groupStats Resource.</p>
+
+<p class="toc_element">
+  <code><a href="clouderrorreporting_v1beta1.projects.groups.html">groups()</a></code>
+</p>
+<p class="firstline">Returns the groups Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#deleteEvents">deleteEvents(projectName=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes all error events of a given project.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="deleteEvents">deleteEvents(projectName=None, x__xgafv=None)</code>
+  <pre>Deletes all error events of a given project.
+
+Args:
+  projectName: string, The resource name of the Google Cloud Platform project. Required.
+Example: `projects/my-project`. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Response message for deleting error events.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/cloudresourcemanager_v1.html b/docs/dyn/cloudresourcemanager_v1.html
new file mode 100644
index 0000000..c4d7b0f
--- /dev/null
+++ b/docs/dyn/cloudresourcemanager_v1.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="cloudresourcemanager_v1.html">Google Cloud Resource Manager API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="cloudresourcemanager_v1.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/cloudresourcemanager_v1.projects.html b/docs/dyn/cloudresourcemanager_v1.projects.html
new file mode 100644
index 0000000..37b48d8
--- /dev/null
+++ b/docs/dyn/cloudresourcemanager_v1.projects.html
@@ -0,0 +1,362 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="cloudresourcemanager_v1.html">Google Cloud Resource Manager API</a> . <a href="cloudresourcemanager_v1.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(projectId, x__xgafv=None)</a></code></p>
+<p class="firstline">Marks the Project identified by the specified `project_id` (for example, `my-project-123`) for deletion. This method will only affect the Project if the following criteria are met: + The Project does not have a billing account associated with it. + The Project has a lifecycle state of ACTIVE. This method changes the Project's lifecycle state from ACTIVE to DELETE_REQUESTED. The deletion starts at an unspecified time, at which point the lifecycle state changes to DELETE_IN_PROGRESS. Until the deletion completes, you can check the lifecycle state checked by retrieving the Project with GetProject, and the Project remains visible to ListProjects. However, you cannot update the project. After the deletion completes, the Project is not retrievable by the GetProject and ListProjects methods. The caller must have modify permissions for this Project.</p>
+<p class="toc_element">
+  <code><a href="#get">get(projectId, x__xgafv=None)</a></code></p>
+<p class="firstline">Retrieves the Project identified by the specified `project_id` (for example, `my-project-123`). The caller must have read permissions for this Project.</p>
+<p class="toc_element">
+  <code><a href="#getIamPolicy">getIamPolicy(resource, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns the IAM access control policy for the specified Project. Permission is denied if the policy or the resource does not exist.</p>
+<p class="toc_element">
+  <code><a href="#list">list(pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists Projects that are visible to the user and satisfy the specified filter. This method returns Projects in an unspecified order. New Projects do not necessarily appear at the end of the list.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#setIamPolicy">setIamPolicy(resource, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Sets the IAM access control policy for the specified Project. Replaces any existing policy. The following constraints apply when using `setIamPolicy()`: + Project currently supports only `user:{emailid}` and `serviceAccount:{emailid}` members in a `Binding` of a `Policy`. + To be added as an `owner`, a user must be invited via Cloud Platform console and must accept the invitation. + Members cannot be added to more than one role in the same policy. + There must be at least one owner who has accepted the Terms of Service (ToS) agreement in the policy. Calling `setIamPolicy()` to to remove the last ToS-accepted owner from the policy will fail. + Calling this method requires enabling the App Engine Admin API. Note: Removing service accounts from policies or changing their roles can render services completely inoperable. It is important to understand how the service account is being used before removing or updating its roles.</p>
+<p class="toc_element">
+  <code><a href="#testIamPermissions">testIamPermissions(resource, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns permissions that a caller has on the specified Project.</p>
+<p class="toc_element">
+  <code><a href="#undelete">undelete(projectId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Restores the Project identified by the specified `project_id` (for example, `my-project-123`). You can only use this method for a Project that has a lifecycle state of DELETE_REQUESTED. After deletion starts, as indicated by a lifecycle state of DELETE_IN_PROGRESS, the Project cannot be restored. The caller must have modify permissions for this Project.</p>
+<p class="toc_element">
+  <code><a href="#update">update(projectId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates the attributes of the Project identified by the specified `project_id` (for example, `my-project-123`). The caller must have modify permissions for this Project.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(projectId, x__xgafv=None)</code>
+  <pre>Marks the Project identified by the specified `project_id` (for example, `my-project-123`) for deletion. This method will only affect the Project if the following criteria are met: + The Project does not have a billing account associated with it. + The Project has a lifecycle state of ACTIVE. This method changes the Project's lifecycle state from ACTIVE to DELETE_REQUESTED. The deletion starts at an unspecified time, at which point the lifecycle state changes to DELETE_IN_PROGRESS. Until the deletion completes, you can check the lifecycle state checked by retrieving the Project with GetProject, and the Project remains visible to ListProjects. However, you cannot update the project. After the deletion completes, the Project is not retrievable by the GetProject and ListProjects methods. The caller must have modify permissions for this Project.
+
+Args:
+  projectId: string, The Project ID (for example, `foo-bar-123`). Required. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(projectId, x__xgafv=None)</code>
+  <pre>Retrieves the Project identified by the specified `project_id` (for example, `my-project-123`). The caller must have read permissions for this Project.
+
+Args:
+  projectId: string, The Project ID (for example, `my-project-123`). Required. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A Project is a high-level Google Cloud Platform entity. It is a container for ACLs, APIs, AppEngine Apps, VMs, and other Google Cloud Platform resources.
+    "name": "A String", # The user-assigned name of the Project. It must be 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, single-quote, double-quote, space, and exclamation point. Example: My Project Read-write.
+    "parent": { # A container to reference an id for any resource type. A `resource` in Google Cloud Platform is a generic term for something you (a developer) may want to interact with through one of our API's. Some examples are an AppEngine app, a Compute Engine instance, a Cloud SQL database, and so on. # An optional reference to a parent Resource. The only supported parent type is "organization". Once set, the parent cannot be modified. Read-write.
+      "type": "A String", # Required field representing the resource type this id is for. At present, the only valid type is "organization".
+      "id": "A String", # Required field for the type-specific id. This should correspond to the id used in the type-specific API's.
+    },
+    "projectId": "A String", # The unique, user-assigned ID of the Project. It must be 6 to 30 lowercase letters, digits, or hyphens. It must start with a letter. Trailing hyphens are prohibited. Example: tokyo-rain-123 Read-only after creation.
+    "labels": { # The labels associated with this Project. Label keys must be between 1 and 63 characters long and must conform to the following regular expression: \[a-z\](\[-a-z0-9\]*\[a-z0-9\])?. Label values must be between 0 and 63 characters long and must conform to the regular expression (\[a-z\](\[-a-z0-9\]*\[a-z0-9\])?)?. No more than 256 labels can be associated with a given resource. Clients should store labels in a representation such as JSON that does not depend on specific characters being disallowed. Example: "environment" : "dev" Read-write.
+      "a_key": "A String",
+    },
+    "projectNumber": "A String", # The number uniquely identifying the project. Example: 415104041262 Read-only.
+    "lifecycleState": "A String", # The Project lifecycle state. Read-only.
+    "createTime": "A String", # Creation time. Read-only.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="getIamPolicy">getIamPolicy(resource, body, x__xgafv=None)</code>
+  <pre>Returns the IAM access control policy for the specified Project. Permission is denied if the policy or the resource does not exist.
+
+Args:
+  resource: string, REQUIRED: The resource for which the policy is being requested. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `getIamPolicy` documentation. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request message for `GetIamPolicy` method.
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
+    "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
+      { # Associates `members` with a `role`.
+        "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
+          "A String",
+        ],
+      },
+    ],
+    "version": 42, # Version of the `Policy`. The default version is 0.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(pageSize=None, filter=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists Projects that are visible to the user and satisfy the specified filter. This method returns Projects in an unspecified order. New Projects do not necessarily appear at the end of the list.
+
+Args:
+  pageSize: integer, The maximum number of Projects to return in the response. The server can return fewer Projects than requested. If unspecified, server picks an appropriate default. Optional.
+  filter: string, An expression for filtering the results of the request. Filter rules are case insensitive. The fields eligible for filtering are: + `name` + `id` + labels.key where *key* is the name of a label Some examples of using labels as filters: |Filter|Description| |------|-----------| |name:*|The project has a name.| |name:Howl|The project's name is `Howl` or `howl`.| |name:HOWL|Equivalent to above.| |NAME:howl|Equivalent to above.| |labels.color:*|The project has the label `color`.| |labels.color:red|The project's label `color` has the value `red`.| |labels.color:red label.size:big|The project's label `color` has the value `red` and its label `size` has the value `big`. Optional.
+  pageToken: string, A pagination token returned from a previous call to ListProjects that indicates from where listing should continue. Optional.
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A page of the response received from the ListProjects method. A paginated response where more pages are available has `next_page_token` set. This token can be used in a subsequent request to retrieve the next request page.
+    "nextPageToken": "A String", # Pagination token. If the result set is too large to fit in a single response, this token is returned. It encodes the position of the current result cursor. Feeding this value into a new list request with the `page_token` parameter gives the next page of the results. When `next_page_token` is not filled in, there is no next page and the list returned is the last page in the result set. Pagination tokens have a limited lifetime.
+    "projects": [ # The list of Projects that matched the list filter. This list can be paginated.
+      { # A Project is a high-level Google Cloud Platform entity. It is a container for ACLs, APIs, AppEngine Apps, VMs, and other Google Cloud Platform resources.
+        "name": "A String", # The user-assigned name of the Project. It must be 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, single-quote, double-quote, space, and exclamation point. Example: My Project Read-write.
+        "parent": { # A container to reference an id for any resource type. A `resource` in Google Cloud Platform is a generic term for something you (a developer) may want to interact with through one of our API's. Some examples are an AppEngine app, a Compute Engine instance, a Cloud SQL database, and so on. # An optional reference to a parent Resource. The only supported parent type is "organization". Once set, the parent cannot be modified. Read-write.
+          "type": "A String", # Required field representing the resource type this id is for. At present, the only valid type is "organization".
+          "id": "A String", # Required field for the type-specific id. This should correspond to the id used in the type-specific API's.
+        },
+        "projectId": "A String", # The unique, user-assigned ID of the Project. It must be 6 to 30 lowercase letters, digits, or hyphens. It must start with a letter. Trailing hyphens are prohibited. Example: tokyo-rain-123 Read-only after creation.
+        "labels": { # The labels associated with this Project. Label keys must be between 1 and 63 characters long and must conform to the following regular expression: \[a-z\](\[-a-z0-9\]*\[a-z0-9\])?. Label values must be between 0 and 63 characters long and must conform to the regular expression (\[a-z\](\[-a-z0-9\]*\[a-z0-9\])?)?. No more than 256 labels can be associated with a given resource. Clients should store labels in a representation such as JSON that does not depend on specific characters being disallowed. Example: "environment" : "dev" Read-write.
+          "a_key": "A String",
+        },
+        "projectNumber": "A String", # The number uniquely identifying the project. Example: 415104041262 Read-only.
+        "lifecycleState": "A String", # The Project lifecycle state. Read-only.
+        "createTime": "A String", # Creation time. Read-only.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="setIamPolicy">setIamPolicy(resource, body, x__xgafv=None)</code>
+  <pre>Sets the IAM access control policy for the specified Project. Replaces any existing policy. The following constraints apply when using `setIamPolicy()`: + Project currently supports only `user:{emailid}` and `serviceAccount:{emailid}` members in a `Binding` of a `Policy`. + To be added as an `owner`, a user must be invited via Cloud Platform console and must accept the invitation. + Members cannot be added to more than one role in the same policy. + There must be at least one owner who has accepted the Terms of Service (ToS) agreement in the policy. Calling `setIamPolicy()` to to remove the last ToS-accepted owner from the policy will fail. + Calling this method requires enabling the App Engine Admin API. Note: Removing service accounts from policies or changing their roles can render services completely inoperable. It is important to understand how the service account is being used before removing or updating its roles.
+
+Args:
+  resource: string, REQUIRED: The resource for which the policy is being specified. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `setIamPolicy` documentation. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request message for `SetIamPolicy` method.
+    "policy": { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.
+      "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
+        { # Associates `members` with a `role`.
+          "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
+          "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
+            "A String",
+          ],
+        },
+      ],
+      "version": 42, # Version of the `Policy`. The default version is 0.
+      "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
+    },
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
+    "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
+      { # Associates `members` with a `role`.
+        "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
+          "A String",
+        ],
+      },
+    ],
+    "version": 42, # Version of the `Policy`. The default version is 0.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="testIamPermissions">testIamPermissions(resource, body, x__xgafv=None)</code>
+  <pre>Returns permissions that a caller has on the specified Project.
+
+Args:
+  resource: string, REQUIRED: The resource for which the policy detail is being requested. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `testIamPermissions` documentation. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request message for `TestIamPermissions` method.
+    "permissions": [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see IAM Overview.
+      "A String",
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Response message for `TestIamPermissions` method.
+    "permissions": [ # A subset of `TestPermissionsRequest.permissions` that the caller is allowed.
+      "A String",
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="undelete">undelete(projectId, body, x__xgafv=None)</code>
+  <pre>Restores the Project identified by the specified `project_id` (for example, `my-project-123`). You can only use this method for a Project that has a lifecycle state of DELETE_REQUESTED. After deletion starts, as indicated by a lifecycle state of DELETE_IN_PROGRESS, the Project cannot be restored. The caller must have modify permissions for this Project.
+
+Args:
+  projectId: string, The project ID (for example, `foo-bar-123`). Required. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request sent to the UndeleteProject method.
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(projectId, body, x__xgafv=None)</code>
+  <pre>Updates the attributes of the Project identified by the specified `project_id` (for example, `my-project-123`). The caller must have modify permissions for this Project.
+
+Args:
+  projectId: string, The project ID (for example, `my-project-123`). Required. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A Project is a high-level Google Cloud Platform entity. It is a container for ACLs, APIs, AppEngine Apps, VMs, and other Google Cloud Platform resources.
+  "name": "A String", # The user-assigned name of the Project. It must be 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, single-quote, double-quote, space, and exclamation point. Example: My Project Read-write.
+  "parent": { # A container to reference an id for any resource type. A `resource` in Google Cloud Platform is a generic term for something you (a developer) may want to interact with through one of our API's. Some examples are an AppEngine app, a Compute Engine instance, a Cloud SQL database, and so on. # An optional reference to a parent Resource. The only supported parent type is "organization". Once set, the parent cannot be modified. Read-write.
+    "type": "A String", # Required field representing the resource type this id is for. At present, the only valid type is "organization".
+    "id": "A String", # Required field for the type-specific id. This should correspond to the id used in the type-specific API's.
+  },
+  "projectId": "A String", # The unique, user-assigned ID of the Project. It must be 6 to 30 lowercase letters, digits, or hyphens. It must start with a letter. Trailing hyphens are prohibited. Example: tokyo-rain-123 Read-only after creation.
+  "labels": { # The labels associated with this Project. Label keys must be between 1 and 63 characters long and must conform to the following regular expression: \[a-z\](\[-a-z0-9\]*\[a-z0-9\])?. Label values must be between 0 and 63 characters long and must conform to the regular expression (\[a-z\](\[-a-z0-9\]*\[a-z0-9\])?)?. No more than 256 labels can be associated with a given resource. Clients should store labels in a representation such as JSON that does not depend on specific characters being disallowed. Example: "environment" : "dev" Read-write.
+    "a_key": "A String",
+  },
+  "projectNumber": "A String", # The number uniquely identifying the project. Example: 415104041262 Read-only.
+  "lifecycleState": "A String", # The Project lifecycle state. Read-only.
+  "createTime": "A String", # Creation time. Read-only.
+}
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A Project is a high-level Google Cloud Platform entity. It is a container for ACLs, APIs, AppEngine Apps, VMs, and other Google Cloud Platform resources.
+    "name": "A String", # The user-assigned name of the Project. It must be 4 to 30 characters. Allowed characters are: lowercase and uppercase letters, numbers, hyphen, single-quote, double-quote, space, and exclamation point. Example: My Project Read-write.
+    "parent": { # A container to reference an id for any resource type. A `resource` in Google Cloud Platform is a generic term for something you (a developer) may want to interact with through one of our API's. Some examples are an AppEngine app, a Compute Engine instance, a Cloud SQL database, and so on. # An optional reference to a parent Resource. The only supported parent type is "organization". Once set, the parent cannot be modified. Read-write.
+      "type": "A String", # Required field representing the resource type this id is for. At present, the only valid type is "organization".
+      "id": "A String", # Required field for the type-specific id. This should correspond to the id used in the type-specific API's.
+    },
+    "projectId": "A String", # The unique, user-assigned ID of the Project. It must be 6 to 30 lowercase letters, digits, or hyphens. It must start with a letter. Trailing hyphens are prohibited. Example: tokyo-rain-123 Read-only after creation.
+    "labels": { # The labels associated with this Project. Label keys must be between 1 and 63 characters long and must conform to the following regular expression: \[a-z\](\[-a-z0-9\]*\[a-z0-9\])?. Label values must be between 0 and 63 characters long and must conform to the regular expression (\[a-z\](\[-a-z0-9\]*\[a-z0-9\])?)?. No more than 256 labels can be associated with a given resource. Clients should store labels in a representation such as JSON that does not depend on specific characters being disallowed. Example: "environment" : "dev" Read-write.
+      "a_key": "A String",
+    },
+    "projectNumber": "A String", # The number uniquely identifying the project. Example: 415104041262 Read-only.
+    "lifecycleState": "A String", # The Project lifecycle state. Read-only.
+    "createTime": "A String", # Creation time. Read-only.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/cloudtrace_v1.projects.html b/docs/dyn/cloudtrace_v1.projects.html
index 1063fcd..71e5176 100644
--- a/docs/dyn/cloudtrace_v1.projects.html
+++ b/docs/dyn/cloudtrace_v1.projects.html
@@ -81,11 +81,11 @@
 
 <p class="toc_element">
   <code><a href="#patchTraces">patchTraces(projectId, body, x__xgafv=None)</a></code></p>
-<p class="firstline">Sends new traces to Cloud Trace or updates existing traces. If the ID of a trace that you send matches that of an existing trace, any fields in the existing trace and its spans are overwritten by the provided values, and any new fields provided are merged with the existing trace data. If the ID does not match, a new trace is created.</p>
+<p class="firstline">Sends new traces to Stackdriver Trace or updates existing traces. If the ID of a trace that you send matches that of an existing trace, any fields in the existing trace and its spans are overwritten by the provided values, and any new fields provided are merged with the existing trace data. If the ID does not match, a new trace is created.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="patchTraces">patchTraces(projectId, body, x__xgafv=None)</code>
-  <pre>Sends new traces to Cloud Trace or updates existing traces. If the ID of a trace that you send matches that of an existing trace, any fields in the existing trace and its spans are overwritten by the provided values, and any new fields provided are merged with the existing trace data. If the ID does not match, a new trace is created.
+  <pre>Sends new traces to Stackdriver Trace or updates existing traces. If the ID of a trace that you send matches that of an existing trace, any fields in the existing trace and its spans are overwritten by the provided values, and any new fields provided are merged with the existing trace data. If the ID does not match, a new trace is created.
 
 Args:
   projectId: string, ID of the Cloud project where the trace data is stored. (required)
@@ -100,7 +100,7 @@
         "spans": [ # Collection of spans in the trace.
           { # A span represents a single timed event within a trace. Spans can be nested and form a trace tree. Often, a trace contains a root span that describes the end-to-end latency of an operation and, optionally, one or more subspans for its suboperations. Spans do not need to be contiguous. There may be gaps between spans in a trace.
             "kind": "A String", # Distinguishes between spans generated in a particular context. For example, two spans with the same name may be distinguished using `RPC_CLIENT` and `RPC_SERVER` to identify queueing latency associated with the span.
-            "name": "A String", # Name of the trace. The trace name is sanitized and displayed in the Cloud Trace tool in the Google Developers Console. The name may be a method name or some other per-call site name. For the same executable and the same call point, a best practice is to use a consistent name, which makes it easier to correlate cross-trace spans.
+            "name": "A String", # Name of the trace. The trace name is sanitized and displayed in the Stackdriver Trace tool in the {% dynamic print site_values.console_name %}. The name may be a method name or some other per-call site name. For the same executable and the same call point, a best practice is to use a consistent name, which makes it easier to correlate cross-trace spans.
             "labels": { # Collection of labels associated with the span.
               "a_key": "A String",
             },
diff --git a/docs/dyn/cloudtrace_v1.projects.traces.html b/docs/dyn/cloudtrace_v1.projects.traces.html
index 1f3f2a2..780a3a5 100644
--- a/docs/dyn/cloudtrace_v1.projects.traces.html
+++ b/docs/dyn/cloudtrace_v1.projects.traces.html
@@ -102,7 +102,7 @@
     "spans": [ # Collection of spans in the trace.
       { # A span represents a single timed event within a trace. Spans can be nested and form a trace tree. Often, a trace contains a root span that describes the end-to-end latency of an operation and, optionally, one or more subspans for its suboperations. Spans do not need to be contiguous. There may be gaps between spans in a trace.
         "kind": "A String", # Distinguishes between spans generated in a particular context. For example, two spans with the same name may be distinguished using `RPC_CLIENT` and `RPC_SERVER` to identify queueing latency associated with the span.
-        "name": "A String", # Name of the trace. The trace name is sanitized and displayed in the Cloud Trace tool in the Google Developers Console. The name may be a method name or some other per-call site name. For the same executable and the same call point, a best practice is to use a consistent name, which makes it easier to correlate cross-trace spans.
+        "name": "A String", # Name of the trace. The trace name is sanitized and displayed in the Stackdriver Trace tool in the {% dynamic print site_values.console_name %}. The name may be a method name or some other per-call site name. For the same executable and the same call point, a best practice is to use a consistent name, which makes it easier to correlate cross-trace spans.
         "labels": { # Collection of labels associated with the span.
           "a_key": "A String",
         },
@@ -142,7 +142,7 @@
         "spans": [ # Collection of spans in the trace.
           { # A span represents a single timed event within a trace. Spans can be nested and form a trace tree. Often, a trace contains a root span that describes the end-to-end latency of an operation and, optionally, one or more subspans for its suboperations. Spans do not need to be contiguous. There may be gaps between spans in a trace.
             "kind": "A String", # Distinguishes between spans generated in a particular context. For example, two spans with the same name may be distinguished using `RPC_CLIENT` and `RPC_SERVER` to identify queueing latency associated with the span.
-            "name": "A String", # Name of the trace. The trace name is sanitized and displayed in the Cloud Trace tool in the Google Developers Console. The name may be a method name or some other per-call site name. For the same executable and the same call point, a best practice is to use a consistent name, which makes it easier to correlate cross-trace spans.
+            "name": "A String", # Name of the trace. The trace name is sanitized and displayed in the Stackdriver Trace tool in the {% dynamic print site_values.console_name %}. The name may be a method name or some other per-call site name. For the same executable and the same call point, a best practice is to use a consistent name, which makes it easier to correlate cross-trace spans.
             "labels": { # Collection of labels associated with the span.
               "a_key": "A String",
             },
diff --git a/docs/dyn/clouduseraccounts_vm_alpha.globalAccountsOperations.html b/docs/dyn/clouduseraccounts_vm_alpha.globalAccountsOperations.html
index e176e3d..19da003 100644
--- a/docs/dyn/clouduseraccounts_vm_alpha.globalAccountsOperations.html
+++ b/docs/dyn/clouduseraccounts_vm_alpha.globalAccountsOperations.html
@@ -109,47 +109,49 @@
   An object of the form:
 
     { # An Operation resource, used to manage asynchronous API requests.
-    "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-    "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-    "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
     "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-    "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-    "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
     "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
       {
-        "message": "A String", # [Output Only] Optional human-readable details for this warning.
-        "code": "A String", # [Output Only] The warning type identifier for this warning.
-        "data": [ # [Output Only] Metadata for this warning in key: value format.
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key for the warning data.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
     ],
     "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
-    "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -164,66 +166,72 @@
 You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.
 
 Currently, only sorting by name or creationTimestamp desc is supported.
-  maxResults: integer, Maximum count of results to be returned.
-  pageToken: string, Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.
-  filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.
+  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
+  pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
+  filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
-The FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
+The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
+
+Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
 
     { # Contains a list of Operation resources.
-    "nextPageToken": "A String", # [Output Only] A token used to continue a truncate.
-    "items": [ # [Output Only] The Operation resources.
+    "nextPageToken": "A String", # [Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.
+    "items": [ # [Output Only] A list of Operation resources.
       { # An Operation resource, used to manage asynchronous API requests.
-        "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-        "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+        "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+        "clientOperationId": "A String", # [Output Only] Reserved for future use.
         "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-        "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-        "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-        "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+        "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+        "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+        "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+        "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
         "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-        "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-        "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+        "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+        "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
         "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-        "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-        "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+        "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+        "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
         "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
           {
-            "message": "A String", # [Output Only] Optional human-readable details for this warning.
-            "code": "A String", # [Output Only] The warning type identifier for this warning.
-            "data": [ # [Output Only] Metadata for this warning in key: value format.
+            "message": "A String", # [Output Only] A human-readable description of the warning code.
+            "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+            "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+                # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
               {
                 "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                "key": "A String", # [Output Only] A key for the warning data.
+                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
               },
             ],
           },
         ],
         "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-        "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+        "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
         "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
         "name": "A String", # [Output Only] Name of the resource.
-        "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+        "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
         "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
           "errors": [ # [Output Only] The array of errors encountered while processing this operation.
             {
               "message": "A String", # [Output Only] An optional, human-readable error message.
               "code": "A String", # [Output Only] The error type identifier for this error.
-              "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+              "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
             },
           ],
         },
-        "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+        "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
         "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-        "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+        "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
       },
     ],
     "kind": "clouduseraccounts#operationList", # [Output Only] Type of resource. Always compute#operations for Operations resource.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
   }</pre>
 </div>
diff --git a/docs/dyn/clouduseraccounts_vm_alpha.groups.html b/docs/dyn/clouduseraccounts_vm_alpha.groups.html
index 4eed0ae..15fde8a 100644
--- a/docs/dyn/clouduseraccounts_vm_alpha.groups.html
+++ b/docs/dyn/clouduseraccounts_vm_alpha.groups.html
@@ -126,47 +126,49 @@
   An object of the form:
 
     { # An Operation resource, used to manage asynchronous API requests.
-    "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-    "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-    "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
     "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-    "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-    "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
     "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
       {
-        "message": "A String", # [Output Only] Optional human-readable details for this warning.
-        "code": "A String", # [Output Only] The warning type identifier for this warning.
-        "data": [ # [Output Only] Metadata for this warning in key: value format.
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key for the warning data.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
     ],
     "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
-    "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -182,47 +184,49 @@
   An object of the form:
 
     { # An Operation resource, used to manage asynchronous API requests.
-    "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-    "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-    "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
     "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-    "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-    "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
     "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
       {
-        "message": "A String", # [Output Only] Optional human-readable details for this warning.
-        "code": "A String", # [Output Only] The warning type identifier for this warning.
-        "data": [ # [Output Only] Metadata for this warning in key: value format.
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key for the warning data.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
     ],
     "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
-    "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -269,10 +273,20 @@
       #
       # **Example**
       #
-      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
+      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
       #
       # For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
-    "rules": [
+    "auditConfigs": [ # Specifies audit logging configs for "data access". "data access": generally refers to data reads/writes and admin reads. "admin activity": generally refers to admin writes.
+        #
+        # Note: `AuditConfig` doesn't apply to "admin activity", which always enables audit logging.
+      { # Enables "data access" audit logging for a service and specifies a list of members that are log-exempted.
+        "exemptedMembers": [ # Specifies the identities that are exempted from "data access" audit logging for the `service` specified above. Follows the same format of Binding.members.
+          "A String",
+        ],
+        "service": "A String", # Specifies a service that will be enabled for "data access" audit logging. For example, `resourcemanager`, `storage`, `compute`. `allServices` is a special value that covers all services.
+      },
+    ],
+    "rules": [ # If more than one rule is specified, the rules are applied in the following manner: - All matching LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is granted. Logging will be applied if one or more matching rule requires logging. - Otherwise, if no rule applies, permission is denied.
       { # A rule to be applied in a Policy.
         "logConfigs": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
           { # Specifies what kind of log the caller must write
@@ -307,10 +321,14 @@
         "description": "A String", # Human-readable description of the rule.
       },
     ],
+    "version": 42, # Version of the `Policy`. The default version is 0.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
+        #
+        # If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
     "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
-        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats:
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
             #
             # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
             #
@@ -327,8 +345,7 @@
         ],
       },
     ],
-    "etag": "A String", # Can be used to perform a read-modify-write.
-    "version": 42, # Version of the `Policy`. The default version is 0.
+    "iamOwned": True or False,
   }</pre>
 </div>
 
@@ -358,47 +375,49 @@
   An object of the form:
 
     { # An Operation resource, used to manage asynchronous API requests.
-    "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-    "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-    "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
     "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-    "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-    "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
     "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
       {
-        "message": "A String", # [Output Only] Optional human-readable details for this warning.
-        "code": "A String", # [Output Only] The warning type identifier for this warning.
-        "data": [ # [Output Only] Metadata for this warning in key: value format.
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key for the warning data.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
     ],
     "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
-    "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -413,13 +432,17 @@
 You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.
 
 Currently, only sorting by name or creationTimestamp desc is supported.
-  maxResults: integer, Maximum count of results to be returned.
-  pageToken: string, Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.
-  filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.
+  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
+  pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
+  filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
-The FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
+The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
+
+Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -480,47 +503,49 @@
   An object of the form:
 
     { # An Operation resource, used to manage asynchronous API requests.
-    "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-    "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-    "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
     "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-    "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-    "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
     "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
       {
-        "message": "A String", # [Output Only] Optional human-readable details for this warning.
-        "code": "A String", # [Output Only] The warning type identifier for this warning.
-        "data": [ # [Output Only] Metadata for this warning in key: value format.
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key for the warning data.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
     ],
     "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
-    "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -542,10 +567,20 @@
     # 
     # **Example**
     # 
-    # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
+    # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
     # 
     # For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
-  "rules": [
+  "auditConfigs": [ # Specifies audit logging configs for "data access". "data access": generally refers to data reads/writes and admin reads. "admin activity": generally refers to admin writes.
+      # 
+      # Note: `AuditConfig` doesn't apply to "admin activity", which always enables audit logging.
+    { # Enables "data access" audit logging for a service and specifies a list of members that are log-exempted.
+      "exemptedMembers": [ # Specifies the identities that are exempted from "data access" audit logging for the `service` specified above. Follows the same format of Binding.members.
+        "A String",
+      ],
+      "service": "A String", # Specifies a service that will be enabled for "data access" audit logging. For example, `resourcemanager`, `storage`, `compute`. `allServices` is a special value that covers all services.
+    },
+  ],
+  "rules": [ # If more than one rule is specified, the rules are applied in the following manner: - All matching LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is granted. Logging will be applied if one or more matching rule requires logging. - Otherwise, if no rule applies, permission is denied.
     { # A rule to be applied in a Policy.
       "logConfigs": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
         { # Specifies what kind of log the caller must write
@@ -580,10 +615,14 @@
       "description": "A String", # Human-readable description of the rule.
     },
   ],
+  "version": 42, # Version of the `Policy`. The default version is 0.
+  "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
+      # 
+      # If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
   "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
     { # Associates `members` with a `role`.
       "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
-      "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats:
+      "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
           #
           # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
           #
@@ -600,8 +639,7 @@
       ],
     },
   ],
-  "etag": "A String", # Can be used to perform a read-modify-write.
-  "version": 42, # Version of the `Policy`. The default version is 0.
+  "iamOwned": True or False,
 }
 
 
@@ -616,10 +654,20 @@
       #
       # **Example**
       #
-      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
+      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
       #
       # For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
-    "rules": [
+    "auditConfigs": [ # Specifies audit logging configs for "data access". "data access": generally refers to data reads/writes and admin reads. "admin activity": generally refers to admin writes.
+        #
+        # Note: `AuditConfig` doesn't apply to "admin activity", which always enables audit logging.
+      { # Enables "data access" audit logging for a service and specifies a list of members that are log-exempted.
+        "exemptedMembers": [ # Specifies the identities that are exempted from "data access" audit logging for the `service` specified above. Follows the same format of Binding.members.
+          "A String",
+        ],
+        "service": "A String", # Specifies a service that will be enabled for "data access" audit logging. For example, `resourcemanager`, `storage`, `compute`. `allServices` is a special value that covers all services.
+      },
+    ],
+    "rules": [ # If more than one rule is specified, the rules are applied in the following manner: - All matching LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is granted. Logging will be applied if one or more matching rule requires logging. - Otherwise, if no rule applies, permission is denied.
       { # A rule to be applied in a Policy.
         "logConfigs": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
           { # Specifies what kind of log the caller must write
@@ -654,10 +702,14 @@
         "description": "A String", # Human-readable description of the rule.
       },
     ],
+    "version": 42, # Version of the `Policy`. The default version is 0.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
+        #
+        # If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
     "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
-        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats:
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
             #
             # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
             #
@@ -674,8 +726,7 @@
         ],
       },
     ],
-    "etag": "A String", # Can be used to perform a read-modify-write.
-    "version": 42, # Version of the `Policy`. The default version is 0.
+    "iamOwned": True or False,
   }</pre>
 </div>
 
diff --git a/docs/dyn/clouduseraccounts_vm_alpha.linux.html b/docs/dyn/clouduseraccounts_vm_alpha.linux.html
index a4fa294..afb24ef 100644
--- a/docs/dyn/clouduseraccounts_vm_alpha.linux.html
+++ b/docs/dyn/clouduseraccounts_vm_alpha.linux.html
@@ -118,13 +118,17 @@
 You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.
 
 Currently, only sorting by name or creationTimestamp desc is supported.
-  filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.
+  filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
-The FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
+The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, filter=name ne example-instance.
-  maxResults: integer, Maximum count of results to be returned.
-  pageToken: string, Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
+
+Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
+  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
+  pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/clouduseraccounts_vm_alpha.users.html b/docs/dyn/clouduseraccounts_vm_alpha.users.html
index 20bb7c1..087cae1 100644
--- a/docs/dyn/clouduseraccounts_vm_alpha.users.html
+++ b/docs/dyn/clouduseraccounts_vm_alpha.users.html
@@ -128,47 +128,49 @@
   An object of the form:
 
     { # An Operation resource, used to manage asynchronous API requests.
-    "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-    "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-    "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
     "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-    "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-    "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
     "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
       {
-        "message": "A String", # [Output Only] Optional human-readable details for this warning.
-        "code": "A String", # [Output Only] The warning type identifier for this warning.
-        "data": [ # [Output Only] Metadata for this warning in key: value format.
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key for the warning data.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
     ],
     "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
-    "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -184,47 +186,49 @@
   An object of the form:
 
     { # An Operation resource, used to manage asynchronous API requests.
-    "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-    "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-    "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
     "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-    "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-    "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
     "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
       {
-        "message": "A String", # [Output Only] Optional human-readable details for this warning.
-        "code": "A String", # [Output Only] The warning type identifier for this warning.
-        "data": [ # [Output Only] Metadata for this warning in key: value format.
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key for the warning data.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
     ],
     "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
-    "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -281,10 +285,20 @@
       #
       # **Example**
       #
-      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
+      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
       #
       # For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
-    "rules": [
+    "auditConfigs": [ # Specifies audit logging configs for "data access". "data access": generally refers to data reads/writes and admin reads. "admin activity": generally refers to admin writes.
+        #
+        # Note: `AuditConfig` doesn't apply to "admin activity", which always enables audit logging.
+      { # Enables "data access" audit logging for a service and specifies a list of members that are log-exempted.
+        "exemptedMembers": [ # Specifies the identities that are exempted from "data access" audit logging for the `service` specified above. Follows the same format of Binding.members.
+          "A String",
+        ],
+        "service": "A String", # Specifies a service that will be enabled for "data access" audit logging. For example, `resourcemanager`, `storage`, `compute`. `allServices` is a special value that covers all services.
+      },
+    ],
+    "rules": [ # If more than one rule is specified, the rules are applied in the following manner: - All matching LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is granted. Logging will be applied if one or more matching rule requires logging. - Otherwise, if no rule applies, permission is denied.
       { # A rule to be applied in a Policy.
         "logConfigs": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
           { # Specifies what kind of log the caller must write
@@ -319,10 +333,14 @@
         "description": "A String", # Human-readable description of the rule.
       },
     ],
+    "version": 42, # Version of the `Policy`. The default version is 0.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
+        #
+        # If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
     "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
-        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats:
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
             #
             # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
             #
@@ -339,8 +357,7 @@
         ],
       },
     ],
-    "etag": "A String", # Can be used to perform a read-modify-write.
-    "version": 42, # Version of the `Policy`. The default version is 0.
+    "iamOwned": True or False,
   }</pre>
 </div>
 
@@ -380,47 +397,49 @@
   An object of the form:
 
     { # An Operation resource, used to manage asynchronous API requests.
-    "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-    "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-    "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
     "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-    "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-    "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
     "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
       {
-        "message": "A String", # [Output Only] Optional human-readable details for this warning.
-        "code": "A String", # [Output Only] The warning type identifier for this warning.
-        "data": [ # [Output Only] Metadata for this warning in key: value format.
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key for the warning data.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
     ],
     "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
-    "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -435,13 +454,17 @@
 You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.
 
 Currently, only sorting by name or creationTimestamp desc is supported.
-  maxResults: integer, Maximum count of results to be returned.
-  pageToken: string, Specifies a page token to use. Use this parameter if you want to list the next page of results. Set pageToken to the nextPageToken returned by a previous list request.
-  filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: FIELD_NAME COMPARISON_STRING LITERAL_STRING.
+  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
+  pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
+  filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
-The FIELD_NAME is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The COMPARISON_STRING must be either eq (equals) or ne (not equals). The LITERAL_STRING is the string value to filter to. The literal value must be valid for the type of field (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
+The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
+
+Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -504,47 +527,49 @@
   An object of the form:
 
     { # An Operation resource, used to manage asynchronous API requests.
-    "targetId": "A String", # [Output Only] Unique target ID which identifies a particular incarnation of the target.
-    "clientOperationId": "A String", # [Output Only] An optional identifier specified by the client when the mutation was initiated. Must be unique for all Operation resources in the project.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides.
-    "operationType": "A String", # [Output Only] Type of the operation, such as insert, compute.instanceGroups.update, or compute.instanceGroups.delete.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
-    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should monotonically increase as the operation progresses.
-    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as 404.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
     "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
-    "status": "A String", # [Output Only] Status of the operation. Can be one of the following: PENDING, RUNNING, or DONE.
-    "insertTime": "A String", # [Output Only] The time that this operation was requested. This is in RFC3339 text format.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
     "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
       {
-        "message": "A String", # [Output Only] Optional human-readable details for this warning.
-        "code": "A String", # [Output Only] The warning type identifier for this warning.
-        "data": [ # [Output Only] Metadata for this warning in key: value format.
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key for the warning data.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
     ],
     "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
-    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This is in RFC3339 text format.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "clouduseraccounts#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only applicable for regional resources.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
-    "endTime": "A String", # [Output Only] The time that this operation was completed. This is in RFC3339 text format.
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] URL of the resource the operation is mutating.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -566,10 +591,20 @@
     # 
     # **Example**
     # 
-    # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
+    # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
     # 
     # For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
-  "rules": [
+  "auditConfigs": [ # Specifies audit logging configs for "data access". "data access": generally refers to data reads/writes and admin reads. "admin activity": generally refers to admin writes.
+      # 
+      # Note: `AuditConfig` doesn't apply to "admin activity", which always enables audit logging.
+    { # Enables "data access" audit logging for a service and specifies a list of members that are log-exempted.
+      "exemptedMembers": [ # Specifies the identities that are exempted from "data access" audit logging for the `service` specified above. Follows the same format of Binding.members.
+        "A String",
+      ],
+      "service": "A String", # Specifies a service that will be enabled for "data access" audit logging. For example, `resourcemanager`, `storage`, `compute`. `allServices` is a special value that covers all services.
+    },
+  ],
+  "rules": [ # If more than one rule is specified, the rules are applied in the following manner: - All matching LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is granted. Logging will be applied if one or more matching rule requires logging. - Otherwise, if no rule applies, permission is denied.
     { # A rule to be applied in a Policy.
       "logConfigs": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
         { # Specifies what kind of log the caller must write
@@ -604,10 +639,14 @@
       "description": "A String", # Human-readable description of the rule.
     },
   ],
+  "version": 42, # Version of the `Policy`. The default version is 0.
+  "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
+      # 
+      # If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
   "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
     { # Associates `members` with a `role`.
       "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
-      "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats:
+      "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
           #
           # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
           #
@@ -624,8 +663,7 @@
       ],
     },
   ],
-  "etag": "A String", # Can be used to perform a read-modify-write.
-  "version": 42, # Version of the `Policy`. The default version is 0.
+  "iamOwned": True or False,
 }
 
 
@@ -640,10 +678,20 @@
       #
       # **Example**
       #
-      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
+      # { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] }
       #
       # For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
-    "rules": [
+    "auditConfigs": [ # Specifies audit logging configs for "data access". "data access": generally refers to data reads/writes and admin reads. "admin activity": generally refers to admin writes.
+        #
+        # Note: `AuditConfig` doesn't apply to "admin activity", which always enables audit logging.
+      { # Enables "data access" audit logging for a service and specifies a list of members that are log-exempted.
+        "exemptedMembers": [ # Specifies the identities that are exempted from "data access" audit logging for the `service` specified above. Follows the same format of Binding.members.
+          "A String",
+        ],
+        "service": "A String", # Specifies a service that will be enabled for "data access" audit logging. For example, `resourcemanager`, `storage`, `compute`. `allServices` is a special value that covers all services.
+      },
+    ],
+    "rules": [ # If more than one rule is specified, the rules are applied in the following manner: - All matching LOG rules are always applied. - If any DENY/DENY_WITH_LOG rule matches, permission is denied. Logging will be applied if one or more matching rule requires logging. - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is granted. Logging will be applied if one or more matching rule requires logging. - Otherwise, if no rule applies, permission is denied.
       { # A rule to be applied in a Policy.
         "logConfigs": [ # The config returned to callers of tech.iam.IAM.CheckPolicy for any entries that match the LOG action.
           { # Specifies what kind of log the caller must write
@@ -678,10 +726,14 @@
         "description": "A String", # Human-readable description of the rule.
       },
     ],
+    "version": 42, # Version of the `Policy`. The default version is 0.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
+        #
+        # If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
     "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
-        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats:
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values:
             #
             # * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account.
             #
@@ -698,8 +750,7 @@
         ],
       },
     ],
-    "etag": "A String", # Can be used to perform a read-modify-write.
-    "version": 42, # Version of the `Policy`. The default version is 0.
+    "iamOwned": True or False,
   }</pre>
 </div>
 
diff --git a/docs/dyn/compute_v1.addresses.html b/docs/dyn/compute_v1.addresses.html
index 8949ac8..657c5c7 100644
--- a/docs/dyn/compute_v1.addresses.html
+++ b/docs/dyn/compute_v1.addresses.html
@@ -108,11 +108,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -128,7 +128,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -145,7 +145,7 @@
               "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
               "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
               "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-              "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+              "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
             },
         ],
       },
@@ -176,7 +176,7 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   address: string, Name of the address resource to delete. (required)
 
 Returns:
@@ -204,7 +204,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -219,7 +219,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -235,7 +235,7 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   address: string, Name of the address resource to return. (required)
 
 Returns:
@@ -253,7 +253,7 @@
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
       "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
       "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-      "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+      "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
     }</pre>
 </div>
 
@@ -263,7 +263,7 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
@@ -279,7 +279,7 @@
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
 
@@ -308,7 +308,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -323,7 +323,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -339,18 +339,18 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
   pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
   filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -370,7 +370,7 @@
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
           "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
           "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-          "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+          "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
         },
     ],
     "kind": "compute#addressList", # [Output Only] Type of resource. Always compute#addressList for lists of addresses.
diff --git a/docs/dyn/compute_v1.autoscalers.html b/docs/dyn/compute_v1.autoscalers.html
index 350a002..3608bfd 100644
--- a/docs/dyn/compute_v1.autoscalers.html
+++ b/docs/dyn/compute_v1.autoscalers.html
@@ -82,25 +82,25 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(project, zone, autoscaler)</a></code></p>
-<p class="firstline">Deletes the specified autoscaler resource.</p>
+<p class="firstline">Deletes the specified autoscaler.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, zone, autoscaler)</a></code></p>
-<p class="firstline">Returns the specified autoscaler resource.</p>
+<p class="firstline">Returns the specified autoscaler resource. Get a list of available autoscalers by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, zone, body)</a></code></p>
-<p class="firstline">Creates an autoscaler resource in the specified project using the data included in the request.</p>
+<p class="firstline">Creates an autoscaler in the specified project using the data included in the request.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, zone, maxResults=None, pageToken=None, filter=None)</a></code></p>
-<p class="firstline">Retrieves a list of autoscaler resources contained within the specified zone.</p>
+<p class="firstline">Retrieves a list of autoscalers contained within the specified zone.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#patch">patch(project, zone, autoscaler, body)</a></code></p>
-<p class="firstline">Updates an autoscaler resource in the specified project using the data included in the request. This method supports patch semantics.</p>
+<p class="firstline">Updates an autoscaler in the specified project using the data included in the request. This method supports patch semantics.</p>
 <p class="toc_element">
   <code><a href="#update">update(project, zone, body, autoscaler=None)</a></code></p>
-<p class="firstline">Updates an autoscaler resource in the specified project using the data included in the request.</p>
+<p class="firstline">Updates an autoscaler in the specified project using the data included in the request.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="aggregatedList">aggregatedList(project, maxResults=None, pageToken=None, filter=None)</code>
@@ -114,11 +114,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -126,42 +126,57 @@
     {
     "nextPageToken": "A String", # [Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.
     "items": { # A map of scoped autoscaler lists.
-      "a_key": { # Name of the scope containing this set of autoscalers.
-        "warning": { # Informational warning which replaces the list of autoscalers when the list is empty.
+      "a_key": { # [Output Only] Name of the scope containing this set of autoscalers.
+        "warning": { # [Output Only] Informational warning which replaces the list of autoscalers when the list is empty.
           "message": "A String", # [Output Only] A human-readable description of the warning code.
           "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
           "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
-        "autoscalers": [ # List of autoscalers contained in this scope.
-          {
-              "kind": "compute#autoscaler", # Type of the resource.
+        "autoscalers": [ # [Output Only] List of autoscalers contained in this scope.
+          { # Represents an Autoscaler resource. Autoscalers allow you to automatically scale virtual machine instances in managed instance groups according to an autoscaling policy that you define. For more information, read Autoscaling Groups of Instances.
+              "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
               "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
               "zone": "A String", # [Output Only] URL of the zone where the instance group resides.
-              "autoscalingPolicy": { # Cloud Autoscaler policy. # Autoscaling configuration.
-                "maxNumReplicas": 42, # The maximum number of replicas that the Autoscaler can scale up to. This field is required for config to be effective. Maximum number of replicas should be not lower than minimal number of replicas. Absolute limit for this value is defined in Autoscaler backend.
-                "coolDownPeriodSec": 42, # The number of seconds that the Autoscaler should wait between two succeeding changes to the number of virtual machines. You should define an interval that is at least as long as the initialization time of a virtual machine and the time it may take for replica pool to create the virtual machine. The default is 60 seconds.
-                "loadBalancingUtilization": { # Load balancing utilization policy. # Configuration parameters of autoscaling based on load balancer.
-                  "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP load balancing configuration) that Autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8. For example if your maxRatePerInstance capacity (in HTTP Load Balancing configuration) is set at 10 and you would like to keep number of instances such that each instance receives 7 QPS on average, set this to 0.7.
+              "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
+                  #
+                  # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.8 or 80%.
+                "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
+                "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
+                    #
+                    # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
+                "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
+                  "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(s) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
                 },
-                "customMetricUtilizations": [ # Configuration parameters of autoscaling based on custom metric.
+                "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
                   { # Custom utilization metric policy.
-                    "metric": "A String", # Identifier of the metric. It should be a Cloud Monitoring metric. The metric can not have negative values. The metric should be an utilization metric (increasing number of VMs handling requests x times should reduce average value of the metric roughly x times). For example you could use: compute.googleapis.com/instance/network/received_bytes_count.
-                    "utilizationTargetType": "A String", # Defines type in which utilization_target is expressed.
-                    "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
+                    "metric": "A String", # The identifier of the Cloud Monitoring metric. The metric cannot have negative values and should be a utilization metric, which means that the number of virtual machines handling requests should increase or decrease proportionally to the metric. The metric must also have a label of compute.googleapis.com/resource_id with the value of the instance's unique ID, although this alone does not guarantee that the metric is valid.
+                        #
+                        # For example, the following is a valid metric:
+                        # compute.googleapis.com/instance/network/received_bytes_count
+                        #
+                        #
+                        # The following is not a valid metric because it does not increase or decrease based on usage:
+                        # compute.googleapis.com/instance/cpu/reserved_cores
+                    "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Cloud Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE. If not specified, the default is GAUGE.
+                    "utilizationTarget": 3.14, # Target value of the metric which autoscaler should maintain. Must be a positive value.
                   },
                 ],
-                "cpuUtilization": { # CPU utilization policy. # TODO(jbartosik): Add support for scaling based on muliple utilization metrics (take max recommendation). Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
-                  "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
+                "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
+                  "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. Must be a float value in the range (0, 1]. If not specified, the default is 0.8.
+                      #
+                      # If the CPU level is below the target utilization, the autoscaler scales down the number of instances until it reaches the minimum number of instances you specified or until the average CPU of your instances reaches the target utilization.
+                      #
+                      # If the average CPU is above the target utilization, the autoscaler scales up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
                 },
-                "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to. Can't be less than 0. If not provided Autoscaler will choose default value depending on maximal number of replicas.
+                "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
               },
-              "target": "A String", # URL of Instance Group Manager or Replica Pool which will be controlled by Autoscaler.
+              "target": "A String", # URL of the managed instance group that this autoscaler will scale.
               "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
               "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
               "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -170,7 +185,7 @@
         ],
       },
     },
-    "kind": "compute#autoscalerAggregatedList", # Type of resource.
+    "kind": "compute#autoscalerAggregatedList", # [Output Only] Type of resource. Always compute#autoscalerAggregatedList for aggregated lists of autoscalers.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
   }</pre>
@@ -192,12 +207,12 @@
 
 <div class="method">
     <code class="details" id="delete">delete(project, zone, autoscaler)</code>
-  <pre>Deletes the specified autoscaler resource.
+  <pre>Deletes the specified autoscaler.
 
 Args:
   project: string, Project ID for this request. (required)
-  zone: string, Name of the zone scoping this request. (required)
-  autoscaler: string, Name of the persistent autoscaler resource to delete. (required)
+  zone: string, Name of the zone for this request. (required)
+  autoscaler: string, Name of the autoscaler to delete. (required)
 
 Returns:
   An object of the form:
@@ -224,7 +239,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -239,7 +254,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -251,39 +266,54 @@
 
 <div class="method">
     <code class="details" id="get">get(project, zone, autoscaler)</code>
-  <pre>Returns the specified autoscaler resource.
+  <pre>Returns the specified autoscaler resource. Get a list of available autoscalers by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
-  zone: string, Name of the zone scoping this request. (required)
-  autoscaler: string, Name of the persistent autoscaler resource to return. (required)
+  zone: string, Name of the zone for this request. (required)
+  autoscaler: string, Name of the autoscaler to return. (required)
 
 Returns:
   An object of the form:
 
-    {
-      "kind": "compute#autoscaler", # Type of the resource.
+    { # Represents an Autoscaler resource. Autoscalers allow you to automatically scale virtual machine instances in managed instance groups according to an autoscaling policy that you define. For more information, read Autoscaling Groups of Instances.
+      "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
       "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
       "zone": "A String", # [Output Only] URL of the zone where the instance group resides.
-      "autoscalingPolicy": { # Cloud Autoscaler policy. # Autoscaling configuration.
-        "maxNumReplicas": 42, # The maximum number of replicas that the Autoscaler can scale up to. This field is required for config to be effective. Maximum number of replicas should be not lower than minimal number of replicas. Absolute limit for this value is defined in Autoscaler backend.
-        "coolDownPeriodSec": 42, # The number of seconds that the Autoscaler should wait between two succeeding changes to the number of virtual machines. You should define an interval that is at least as long as the initialization time of a virtual machine and the time it may take for replica pool to create the virtual machine. The default is 60 seconds.
-        "loadBalancingUtilization": { # Load balancing utilization policy. # Configuration parameters of autoscaling based on load balancer.
-          "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP load balancing configuration) that Autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8. For example if your maxRatePerInstance capacity (in HTTP Load Balancing configuration) is set at 10 and you would like to keep number of instances such that each instance receives 7 QPS on average, set this to 0.7.
+      "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
+          #
+          # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.8 or 80%.
+        "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
+        "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
+            #
+            # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
+        "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
+          "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(s) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
         },
-        "customMetricUtilizations": [ # Configuration parameters of autoscaling based on custom metric.
+        "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
           { # Custom utilization metric policy.
-            "metric": "A String", # Identifier of the metric. It should be a Cloud Monitoring metric. The metric can not have negative values. The metric should be an utilization metric (increasing number of VMs handling requests x times should reduce average value of the metric roughly x times). For example you could use: compute.googleapis.com/instance/network/received_bytes_count.
-            "utilizationTargetType": "A String", # Defines type in which utilization_target is expressed.
-            "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
+            "metric": "A String", # The identifier of the Cloud Monitoring metric. The metric cannot have negative values and should be a utilization metric, which means that the number of virtual machines handling requests should increase or decrease proportionally to the metric. The metric must also have a label of compute.googleapis.com/resource_id with the value of the instance's unique ID, although this alone does not guarantee that the metric is valid.
+                #
+                # For example, the following is a valid metric:
+                # compute.googleapis.com/instance/network/received_bytes_count
+                #
+                #
+                # The following is not a valid metric because it does not increase or decrease based on usage:
+                # compute.googleapis.com/instance/cpu/reserved_cores
+            "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Cloud Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE. If not specified, the default is GAUGE.
+            "utilizationTarget": 3.14, # Target value of the metric which autoscaler should maintain. Must be a positive value.
           },
         ],
-        "cpuUtilization": { # CPU utilization policy. # TODO(jbartosik): Add support for scaling based on muliple utilization metrics (take max recommendation). Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
-          "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
+        "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
+          "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. Must be a float value in the range (0, 1]. If not specified, the default is 0.8.
+              #
+              # If the CPU level is below the target utilization, the autoscaler scales down the number of instances until it reaches the minimum number of instances you specified or until the average CPU of your instances reaches the target utilization.
+              #
+              # If the average CPU is above the target utilization, the autoscaler scales up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
         },
-        "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to. Can't be less than 0. If not provided Autoscaler will choose default value depending on maximal number of replicas.
+        "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
       },
-      "target": "A String", # URL of Instance Group Manager or Replica Pool which will be controlled by Autoscaler.
+      "target": "A String", # URL of the managed instance group that this autoscaler will scale.
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
       "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
       "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -293,37 +323,52 @@
 
 <div class="method">
     <code class="details" id="insert">insert(project, zone, body)</code>
-  <pre>Creates an autoscaler resource in the specified project using the data included in the request.
+  <pre>Creates an autoscaler in the specified project using the data included in the request.
 
 Args:
   project: string, Project ID for this request. (required)
-  zone: string, Name of the zone scoping this request. (required)
+  zone: string, Name of the zone for this request. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
-{
-    "kind": "compute#autoscaler", # Type of the resource.
+{ # Represents an Autoscaler resource. Autoscalers allow you to automatically scale virtual machine instances in managed instance groups according to an autoscaling policy that you define. For more information, read Autoscaling Groups of Instances.
+    "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "zone": "A String", # [Output Only] URL of the zone where the instance group resides.
-    "autoscalingPolicy": { # Cloud Autoscaler policy. # Autoscaling configuration.
-      "maxNumReplicas": 42, # The maximum number of replicas that the Autoscaler can scale up to. This field is required for config to be effective. Maximum number of replicas should be not lower than minimal number of replicas. Absolute limit for this value is defined in Autoscaler backend.
-      "coolDownPeriodSec": 42, # The number of seconds that the Autoscaler should wait between two succeeding changes to the number of virtual machines. You should define an interval that is at least as long as the initialization time of a virtual machine and the time it may take for replica pool to create the virtual machine. The default is 60 seconds.
-      "loadBalancingUtilization": { # Load balancing utilization policy. # Configuration parameters of autoscaling based on load balancer.
-        "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP load balancing configuration) that Autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8. For example if your maxRatePerInstance capacity (in HTTP Load Balancing configuration) is set at 10 and you would like to keep number of instances such that each instance receives 7 QPS on average, set this to 0.7.
+    "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
+        # 
+        # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.8 or 80%.
+      "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
+      "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
+          #
+          # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
+      "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
+        "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(s) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
       },
-      "customMetricUtilizations": [ # Configuration parameters of autoscaling based on custom metric.
+      "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
         { # Custom utilization metric policy.
-          "metric": "A String", # Identifier of the metric. It should be a Cloud Monitoring metric. The metric can not have negative values. The metric should be an utilization metric (increasing number of VMs handling requests x times should reduce average value of the metric roughly x times). For example you could use: compute.googleapis.com/instance/network/received_bytes_count.
-          "utilizationTargetType": "A String", # Defines type in which utilization_target is expressed.
-          "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
+          "metric": "A String", # The identifier of the Cloud Monitoring metric. The metric cannot have negative values and should be a utilization metric, which means that the number of virtual machines handling requests should increase or decrease proportionally to the metric. The metric must also have a label of compute.googleapis.com/resource_id with the value of the instance's unique ID, although this alone does not guarantee that the metric is valid.
+              #
+              # For example, the following is a valid metric:
+              # compute.googleapis.com/instance/network/received_bytes_count
+              #
+              #
+              # The following is not a valid metric because it does not increase or decrease based on usage:
+              # compute.googleapis.com/instance/cpu/reserved_cores
+          "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Cloud Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE. If not specified, the default is GAUGE.
+          "utilizationTarget": 3.14, # Target value of the metric which autoscaler should maintain. Must be a positive value.
         },
       ],
-      "cpuUtilization": { # CPU utilization policy. # TODO(jbartosik): Add support for scaling based on muliple utilization metrics (take max recommendation). Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
-        "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
+      "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
+        "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. Must be a float value in the range (0, 1]. If not specified, the default is 0.8.
+            #
+            # If the CPU level is below the target utilization, the autoscaler scales down the number of instances until it reaches the minimum number of instances you specified or until the average CPU of your instances reaches the target utilization.
+            #
+            # If the average CPU is above the target utilization, the autoscaler scales up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
       },
-      "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to. Can't be less than 0. If not provided Autoscaler will choose default value depending on maximal number of replicas.
+      "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
     },
-    "target": "A String", # URL of Instance Group Manager or Replica Pool which will be controlled by Autoscaler.
+    "target": "A String", # URL of the managed instance group that this autoscaler will scale.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -356,7 +401,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -371,7 +416,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -383,59 +428,74 @@
 
 <div class="method">
     <code class="details" id="list">list(project, zone, maxResults=None, pageToken=None, filter=None)</code>
-  <pre>Retrieves a list of autoscaler resources contained within the specified zone.
+  <pre>Retrieves a list of autoscalers contained within the specified zone.
 
 Args:
   project: string, Project ID for this request. (required)
-  zone: string, Name of the zone scoping this request. (required)
+  zone: string, Name of the zone for this request. (required)
   maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
   pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
   filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
 
-    { # Contains a list of persistent autoscaler resources.
+    { # Contains a list of Autoscaler resources.
     "nextPageToken": "A String", # [Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.
     "items": [ # A list of Autoscaler resources.
-      {
-          "kind": "compute#autoscaler", # Type of the resource.
+      { # Represents an Autoscaler resource. Autoscalers allow you to automatically scale virtual machine instances in managed instance groups according to an autoscaling policy that you define. For more information, read Autoscaling Groups of Instances.
+          "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
           "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
           "zone": "A String", # [Output Only] URL of the zone where the instance group resides.
-          "autoscalingPolicy": { # Cloud Autoscaler policy. # Autoscaling configuration.
-            "maxNumReplicas": 42, # The maximum number of replicas that the Autoscaler can scale up to. This field is required for config to be effective. Maximum number of replicas should be not lower than minimal number of replicas. Absolute limit for this value is defined in Autoscaler backend.
-            "coolDownPeriodSec": 42, # The number of seconds that the Autoscaler should wait between two succeeding changes to the number of virtual machines. You should define an interval that is at least as long as the initialization time of a virtual machine and the time it may take for replica pool to create the virtual machine. The default is 60 seconds.
-            "loadBalancingUtilization": { # Load balancing utilization policy. # Configuration parameters of autoscaling based on load balancer.
-              "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP load balancing configuration) that Autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8. For example if your maxRatePerInstance capacity (in HTTP Load Balancing configuration) is set at 10 and you would like to keep number of instances such that each instance receives 7 QPS on average, set this to 0.7.
+          "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
+              #
+              # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.8 or 80%.
+            "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
+            "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
+                #
+                # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
+            "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
+              "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(s) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
             },
-            "customMetricUtilizations": [ # Configuration parameters of autoscaling based on custom metric.
+            "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
               { # Custom utilization metric policy.
-                "metric": "A String", # Identifier of the metric. It should be a Cloud Monitoring metric. The metric can not have negative values. The metric should be an utilization metric (increasing number of VMs handling requests x times should reduce average value of the metric roughly x times). For example you could use: compute.googleapis.com/instance/network/received_bytes_count.
-                "utilizationTargetType": "A String", # Defines type in which utilization_target is expressed.
-                "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
+                "metric": "A String", # The identifier of the Cloud Monitoring metric. The metric cannot have negative values and should be a utilization metric, which means that the number of virtual machines handling requests should increase or decrease proportionally to the metric. The metric must also have a label of compute.googleapis.com/resource_id with the value of the instance's unique ID, although this alone does not guarantee that the metric is valid.
+                    #
+                    # For example, the following is a valid metric:
+                    # compute.googleapis.com/instance/network/received_bytes_count
+                    #
+                    #
+                    # The following is not a valid metric because it does not increase or decrease based on usage:
+                    # compute.googleapis.com/instance/cpu/reserved_cores
+                "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Cloud Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE. If not specified, the default is GAUGE.
+                "utilizationTarget": 3.14, # Target value of the metric which autoscaler should maintain. Must be a positive value.
               },
             ],
-            "cpuUtilization": { # CPU utilization policy. # TODO(jbartosik): Add support for scaling based on muliple utilization metrics (take max recommendation). Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
-              "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
+            "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
+              "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. Must be a float value in the range (0, 1]. If not specified, the default is 0.8.
+                  #
+                  # If the CPU level is below the target utilization, the autoscaler scales down the number of instances until it reaches the minimum number of instances you specified or until the average CPU of your instances reaches the target utilization.
+                  #
+                  # If the average CPU is above the target utilization, the autoscaler scales up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
             },
-            "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to. Can't be less than 0. If not provided Autoscaler will choose default value depending on maximal number of replicas.
+            "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
           },
-          "target": "A String", # URL of Instance Group Manager or Replica Pool which will be controlled by Autoscaler.
+          "target": "A String", # URL of the managed instance group that this autoscaler will scale.
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
           "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
           "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
           "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
         },
     ],
-    "kind": "compute#autoscalerList", # Type of resource.
+    "kind": "compute#autoscalerList", # [Output Only] Type of resource. Always compute#autoscalerList for lists of autoscalers.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
   }</pre>
@@ -457,38 +517,53 @@
 
 <div class="method">
     <code class="details" id="patch">patch(project, zone, autoscaler, body)</code>
-  <pre>Updates an autoscaler resource in the specified project using the data included in the request. This method supports patch semantics.
+  <pre>Updates an autoscaler in the specified project using the data included in the request. This method supports patch semantics.
 
 Args:
   project: string, Project ID for this request. (required)
-  zone: string, Name of the zone scoping this request. (required)
-  autoscaler: string, Name of the autoscaler resource to update. (required)
+  zone: string, Name of the zone for this request. (required)
+  autoscaler: string, Name of the autoscaler to update. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
-{
-    "kind": "compute#autoscaler", # Type of the resource.
+{ # Represents an Autoscaler resource. Autoscalers allow you to automatically scale virtual machine instances in managed instance groups according to an autoscaling policy that you define. For more information, read Autoscaling Groups of Instances.
+    "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "zone": "A String", # [Output Only] URL of the zone where the instance group resides.
-    "autoscalingPolicy": { # Cloud Autoscaler policy. # Autoscaling configuration.
-      "maxNumReplicas": 42, # The maximum number of replicas that the Autoscaler can scale up to. This field is required for config to be effective. Maximum number of replicas should be not lower than minimal number of replicas. Absolute limit for this value is defined in Autoscaler backend.
-      "coolDownPeriodSec": 42, # The number of seconds that the Autoscaler should wait between two succeeding changes to the number of virtual machines. You should define an interval that is at least as long as the initialization time of a virtual machine and the time it may take for replica pool to create the virtual machine. The default is 60 seconds.
-      "loadBalancingUtilization": { # Load balancing utilization policy. # Configuration parameters of autoscaling based on load balancer.
-        "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP load balancing configuration) that Autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8. For example if your maxRatePerInstance capacity (in HTTP Load Balancing configuration) is set at 10 and you would like to keep number of instances such that each instance receives 7 QPS on average, set this to 0.7.
+    "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
+        # 
+        # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.8 or 80%.
+      "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
+      "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
+          #
+          # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
+      "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
+        "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(s) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
       },
-      "customMetricUtilizations": [ # Configuration parameters of autoscaling based on custom metric.
+      "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
         { # Custom utilization metric policy.
-          "metric": "A String", # Identifier of the metric. It should be a Cloud Monitoring metric. The metric can not have negative values. The metric should be an utilization metric (increasing number of VMs handling requests x times should reduce average value of the metric roughly x times). For example you could use: compute.googleapis.com/instance/network/received_bytes_count.
-          "utilizationTargetType": "A String", # Defines type in which utilization_target is expressed.
-          "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
+          "metric": "A String", # The identifier of the Cloud Monitoring metric. The metric cannot have negative values and should be a utilization metric, which means that the number of virtual machines handling requests should increase or decrease proportionally to the metric. The metric must also have a label of compute.googleapis.com/resource_id with the value of the instance's unique ID, although this alone does not guarantee that the metric is valid.
+              #
+              # For example, the following is a valid metric:
+              # compute.googleapis.com/instance/network/received_bytes_count
+              #
+              #
+              # The following is not a valid metric because it does not increase or decrease based on usage:
+              # compute.googleapis.com/instance/cpu/reserved_cores
+          "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Cloud Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE. If not specified, the default is GAUGE.
+          "utilizationTarget": 3.14, # Target value of the metric which autoscaler should maintain. Must be a positive value.
         },
       ],
-      "cpuUtilization": { # CPU utilization policy. # TODO(jbartosik): Add support for scaling based on muliple utilization metrics (take max recommendation). Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
-        "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
+      "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
+        "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. Must be a float value in the range (0, 1]. If not specified, the default is 0.8.
+            #
+            # If the CPU level is below the target utilization, the autoscaler scales down the number of instances until it reaches the minimum number of instances you specified or until the average CPU of your instances reaches the target utilization.
+            #
+            # If the average CPU is above the target utilization, the autoscaler scales up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
       },
-      "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to. Can't be less than 0. If not provided Autoscaler will choose default value depending on maximal number of replicas.
+      "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
     },
-    "target": "A String", # URL of Instance Group Manager or Replica Pool which will be controlled by Autoscaler.
+    "target": "A String", # URL of the managed instance group that this autoscaler will scale.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -521,7 +596,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -536,7 +611,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -548,44 +623,59 @@
 
 <div class="method">
     <code class="details" id="update">update(project, zone, body, autoscaler=None)</code>
-  <pre>Updates an autoscaler resource in the specified project using the data included in the request.
+  <pre>Updates an autoscaler in the specified project using the data included in the request.
 
 Args:
   project: string, Project ID for this request. (required)
-  zone: string, Name of the zone scoping this request. (required)
+  zone: string, Name of the zone for this request. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
-{
-    "kind": "compute#autoscaler", # Type of the resource.
+{ # Represents an Autoscaler resource. Autoscalers allow you to automatically scale virtual machine instances in managed instance groups according to an autoscaling policy that you define. For more information, read Autoscaling Groups of Instances.
+    "kind": "compute#autoscaler", # [Output Only] Type of the resource. Always compute#autoscaler for autoscalers.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "zone": "A String", # [Output Only] URL of the zone where the instance group resides.
-    "autoscalingPolicy": { # Cloud Autoscaler policy. # Autoscaling configuration.
-      "maxNumReplicas": 42, # The maximum number of replicas that the Autoscaler can scale up to. This field is required for config to be effective. Maximum number of replicas should be not lower than minimal number of replicas. Absolute limit for this value is defined in Autoscaler backend.
-      "coolDownPeriodSec": 42, # The number of seconds that the Autoscaler should wait between two succeeding changes to the number of virtual machines. You should define an interval that is at least as long as the initialization time of a virtual machine and the time it may take for replica pool to create the virtual machine. The default is 60 seconds.
-      "loadBalancingUtilization": { # Load balancing utilization policy. # Configuration parameters of autoscaling based on load balancer.
-        "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP load balancing configuration) that Autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8. For example if your maxRatePerInstance capacity (in HTTP Load Balancing configuration) is set at 10 and you would like to keep number of instances such that each instance receives 7 QPS on average, set this to 0.7.
+    "autoscalingPolicy": { # Cloud Autoscaler policy. # The configuration parameters for the autoscaling algorithm. You can define one or more of the policies for an autoscaler: cpuUtilization, customMetricUtilizations, and loadBalancingUtilization.
+        # 
+        # If none of these are specified, the default will be to autoscale based on cpuUtilization to 0.8 or 80%.
+      "maxNumReplicas": 42, # The maximum number of instances that the autoscaler can scale up to. This is required when creating or updating an autoscaler. The maximum number of replicas should not be lower than minimal number of replicas.
+      "coolDownPeriodSec": 42, # The number of seconds that the autoscaler should wait before it starts collecting information from a new instance. This prevents the autoscaler from collecting information when the instance is initializing, during which the collected usage would not be reliable. The default time autoscaler waits is 60 seconds.
+          #
+          # Virtual machine initialization times might vary because of numerous factors. We recommend that you test how long an instance may take to initialize. To do this, create an instance and time the startup process.
+      "loadBalancingUtilization": { # Configuration parameters of autoscaling based on load balancing. # Configuration parameters of autoscaling based on load balancer.
+        "utilizationTarget": 3.14, # Fraction of backend capacity utilization (set in HTTP(s) load balancing configuration) that autoscaler should maintain. Must be a positive float value. If not defined, the default is 0.8.
       },
-      "customMetricUtilizations": [ # Configuration parameters of autoscaling based on custom metric.
+      "customMetricUtilizations": [ # Configuration parameters of autoscaling based on a custom metric.
         { # Custom utilization metric policy.
-          "metric": "A String", # Identifier of the metric. It should be a Cloud Monitoring metric. The metric can not have negative values. The metric should be an utilization metric (increasing number of VMs handling requests x times should reduce average value of the metric roughly x times). For example you could use: compute.googleapis.com/instance/network/received_bytes_count.
-          "utilizationTargetType": "A String", # Defines type in which utilization_target is expressed.
-          "utilizationTarget": 3.14, # Target value of the metric which Autoscaler should maintain. Must be a positive value.
+          "metric": "A String", # The identifier of the Cloud Monitoring metric. The metric cannot have negative values and should be a utilization metric, which means that the number of virtual machines handling requests should increase or decrease proportionally to the metric. The metric must also have a label of compute.googleapis.com/resource_id with the value of the instance's unique ID, although this alone does not guarantee that the metric is valid.
+              #
+              # For example, the following is a valid metric:
+              # compute.googleapis.com/instance/network/received_bytes_count
+              #
+              #
+              # The following is not a valid metric because it does not increase or decrease based on usage:
+              # compute.googleapis.com/instance/cpu/reserved_cores
+          "utilizationTargetType": "A String", # Defines how target utilization value is expressed for a Cloud Monitoring metric. Either GAUGE, DELTA_PER_SECOND, or DELTA_PER_MINUTE. If not specified, the default is GAUGE.
+          "utilizationTarget": 3.14, # Target value of the metric which autoscaler should maintain. Must be a positive value.
         },
       ],
-      "cpuUtilization": { # CPU utilization policy. # TODO(jbartosik): Add support for scaling based on muliple utilization metrics (take max recommendation). Exactly one utilization policy should be provided. Configuration parameters of CPU based autoscaling policy.
-        "utilizationTarget": 3.14, # The target utilization that the Autoscaler should maintain. It is represented as a fraction of used cores. For example: 6 cores used in 8-core VM are represented here as 0.75. Must be a float value between (0, 1]. If not defined, the default is 0.8.
+      "cpuUtilization": { # CPU utilization policy. # Defines the CPU utilization policy that allows the autoscaler to scale based on the average CPU utilization of a managed instance group.
+        "utilizationTarget": 3.14, # The target CPU utilization that the autoscaler should maintain. Must be a float value in the range (0, 1]. If not specified, the default is 0.8.
+            #
+            # If the CPU level is below the target utilization, the autoscaler scales down the number of instances until it reaches the minimum number of instances you specified or until the average CPU of your instances reaches the target utilization.
+            #
+            # If the average CPU is above the target utilization, the autoscaler scales up until it reaches the maximum number of instances you specified or until the average utilization reaches the target utilization.
       },
-      "minNumReplicas": 42, # The minimum number of replicas that the Autoscaler can scale down to. Can't be less than 0. If not provided Autoscaler will choose default value depending on maximal number of replicas.
+      "minNumReplicas": 42, # The minimum number of replicas that the autoscaler can scale down to. This cannot be less than 0. If not provided, autoscaler will choose a default value depending on maximum number of instances allowed.
     },
-    "target": "A String", # URL of Instance Group Manager or Replica Pool which will be controlled by Autoscaler.
+    "target": "A String", # URL of the managed instance group that this autoscaler will scale.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
     "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
-  autoscaler: string, Name of the autoscaler resource to update.
+  autoscaler: string, Name of the autoscaler to update.
 
 Returns:
   An object of the form:
@@ -612,7 +702,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -627,7 +717,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.backendServices.html b/docs/dyn/compute_v1.backendServices.html
index 00e02f5..12a57dd 100644
--- a/docs/dyn/compute_v1.backendServices.html
+++ b/docs/dyn/compute_v1.backendServices.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified BackendService resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, backendService)</a></code></p>
-<p class="firstline">Returns the specified BackendService resource.</p>
+<p class="firstline">Returns the specified BackendService resource. Get a list of available backend services by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#getHealth">getHealth(project, backendService, body)</a></code></p>
 <p class="firstline">Gets the most recent health check results for this BackendService.</p>
@@ -132,7 +132,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -147,7 +147,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -159,7 +159,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, backendService)</code>
-  <pre>Returns the specified BackendService resource.
+  <pre>Returns the specified BackendService resource. Get a list of available backend services by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -175,6 +175,7 @@
           # Possible values are HTTP, HTTPS, HTTP2, TCP and SSL.
       "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
       "timeoutSec": 42, # How many seconds to wait for the backend before considering it a failed request. Default is 30 seconds.
+      "region": "A String", # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services.
       "port": 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
       "backends": [ # The list of backends that serve this BackendService.
         { # Message containing information of one individual backend.
@@ -248,6 +249,7 @@
         # Possible values are HTTP, HTTPS, HTTP2, TCP and SSL.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "timeoutSec": 42, # How many seconds to wait for the backend before considering it a failed request. Default is 30 seconds.
+    "region": "A String", # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services.
     "port": 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
     "backends": [ # The list of backends that serve this BackendService.
       { # Message containing information of one individual backend.
@@ -299,7 +301,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -314,7 +316,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -336,11 +338,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -355,6 +357,7 @@
               # Possible values are HTTP, HTTPS, HTTP2, TCP and SSL.
           "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
           "timeoutSec": 42, # How many seconds to wait for the backend before considering it a failed request. Default is 30 seconds.
+          "region": "A String", # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services.
           "port": 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
           "backends": [ # The list of backends that serve this BackendService.
             { # Message containing information of one individual backend.
@@ -417,6 +420,7 @@
         # Possible values are HTTP, HTTPS, HTTP2, TCP and SSL.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "timeoutSec": 42, # How many seconds to wait for the backend before considering it a failed request. Default is 30 seconds.
+    "region": "A String", # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services.
     "port": 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
     "backends": [ # The list of backends that serve this BackendService.
       { # Message containing information of one individual backend.
@@ -468,7 +472,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -483,7 +487,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -510,6 +514,7 @@
         # Possible values are HTTP, HTTPS, HTTP2, TCP and SSL.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "timeoutSec": 42, # How many seconds to wait for the backend before considering it a failed request. Default is 30 seconds.
+    "region": "A String", # [Output Only] URL of the region where the regional backend service resides. This field is not applicable to global backend services.
     "port": 42, # Deprecated in favor of portName. The TCP port to connect on the backend. The default value is 80.
     "backends": [ # The list of backends that serve this BackendService.
       { # Message containing information of one individual backend.
@@ -561,7 +566,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -576,7 +581,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.diskTypes.html b/docs/dyn/compute_v1.diskTypes.html
index 0735e1e..52d6a86 100644
--- a/docs/dyn/compute_v1.diskTypes.html
+++ b/docs/dyn/compute_v1.diskTypes.html
@@ -82,7 +82,7 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, zone, diskType)</a></code></p>
-<p class="firstline">Returns the specified disk type.</p>
+<p class="firstline">Returns the specified disk type. Get a list of available disk types by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, zone, maxResults=None, pageToken=None, filter=None)</a></code></p>
 <p class="firstline">Retrieves a list of disk types available to the specified project.</p>
@@ -102,11 +102,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -122,7 +122,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -170,7 +170,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, zone, diskType)</code>
-  <pre>Returns the specified disk type.
+  <pre>Returns the specified disk type. Get a list of available disk types by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -213,11 +213,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/compute_v1.disks.html b/docs/dyn/compute_v1.disks.html
index 158f79c..bc1fc9b 100644
--- a/docs/dyn/compute_v1.disks.html
+++ b/docs/dyn/compute_v1.disks.html
@@ -88,16 +88,19 @@
 <p class="firstline">Deletes the specified persistent disk. Deleting a disk removes its data permanently and is irreversible. However, deleting a disk does not delete any snapshots previously made from the disk. You must separately delete snapshots.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, zone, disk)</a></code></p>
-<p class="firstline">Returns a specified persistent disk.</p>
+<p class="firstline">Returns a specified persistent disk. Get a list of available persistent disks by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, zone, body, sourceImage=None)</a></code></p>
-<p class="firstline">Creates a persistent disk in the specified project using the data in the request. You can create a disk with a sourceImage, a sourceSnapshot, or create an empty 200 GB data disk by omitting all properties. You can also create a disk that is larger than the default size by specifying the sizeGb property.</p>
+<p class="firstline">Creates a persistent disk in the specified project using the data in the request. You can create a disk with a sourceImage, a sourceSnapshot, or create an empty 500 GB data disk by omitting all properties. You can also create a disk that is larger than the default size by specifying the sizeGb property.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, zone, maxResults=None, pageToken=None, filter=None)</a></code></p>
 <p class="firstline">Retrieves a list of persistent disks contained within the specified zone.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#resize">resize(project, zone, disk, body)</a></code></p>
+<p class="firstline">Resizes the specified persistent disk.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="aggregatedList">aggregatedList(project, maxResults=None, pageToken=None, filter=None)</code>
@@ -111,11 +114,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -142,25 +145,23 @@
               "sourceImageId": "A String", # [Output Only] The ID value of the image used to create this disk. This value identifies the exact image that was used to create this persistent disk. For example, if you created the persistent disk from an image that was later deleted and recreated under the same name, the source image ID would identify the exact version of the image that was used.
               "sourceSnapshotId": "A String", # [Output Only] The unique ID of the snapshot used to create this disk. This value identifies the exact snapshot that was used to create this persistent disk. For example, if you created the persistent disk from a snapshot that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used.
               "lastAttachTimestamp": "A String", # [Output Only] Last attach timestamp in RFC3339 text format.
-              "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted from the system, this field will not be set, even if an image with the same name has been re-created.
+              "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
                   #
-                  # When creating a disk, you can provide a private (custom) image using the following input, and Compute Engine will use the corresponding image from your project. For example:
+                  # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+                  #
+                  # projects/debian-cloud/global/images/family/debian-8
+                  #
+                  # Alternatively, use a specific version of a public operating system image:
+                  #
+                  # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+                  #
+                  # To create a disk with a private image that you created, specify the image name in the following format:
                   #
                   # global/images/my-private-image
                   #
-                  # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
-                  #
-                  # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-                  #
-                  # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
-                  #
-                  # You can also specify the latest image for a private image family by replacing the image name suffix with family/family-name. For example:
+                  # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
                   #
                   # global/images/family/my-private-family
-                  #
-                  # Or you can specify an image family from a publicly-available project. For example, to use the latest Debian 7 from the debian-cloud project, make sure to include the project in the URL:
-                  #
-                  # projects/debian-cloud/global/images/family/debian-7
               "licenses": [ # [Output Only] Any applicable publicly visible licenses.
                 "A String",
               ],
@@ -171,7 +172,7 @@
               "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
               "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
               "selfLink": "A String", # [Output Only] Server-defined fully-qualified URL for this resource.
-              "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+              "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
             },
         ],
         "warning": { # [Output Only] Informational warning which replaces the list of disks when the list is empty.
@@ -181,7 +182,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -262,7 +263,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -277,7 +278,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -321,7 +322,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -336,7 +337,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -348,7 +349,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, zone, disk)</code>
-  <pre>Returns a specified persistent disk.
+  <pre>Returns a specified persistent disk. Get a list of available persistent disks by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -375,25 +376,23 @@
       "sourceImageId": "A String", # [Output Only] The ID value of the image used to create this disk. This value identifies the exact image that was used to create this persistent disk. For example, if you created the persistent disk from an image that was later deleted and recreated under the same name, the source image ID would identify the exact version of the image that was used.
       "sourceSnapshotId": "A String", # [Output Only] The unique ID of the snapshot used to create this disk. This value identifies the exact snapshot that was used to create this persistent disk. For example, if you created the persistent disk from a snapshot that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used.
       "lastAttachTimestamp": "A String", # [Output Only] Last attach timestamp in RFC3339 text format.
-      "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted from the system, this field will not be set, even if an image with the same name has been re-created.
+      "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
           #
-          # When creating a disk, you can provide a private (custom) image using the following input, and Compute Engine will use the corresponding image from your project. For example:
+          # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+          #
+          # projects/debian-cloud/global/images/family/debian-8
+          #
+          # Alternatively, use a specific version of a public operating system image:
+          #
+          # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+          #
+          # To create a disk with a private image that you created, specify the image name in the following format:
           #
           # global/images/my-private-image
           #
-          # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
-          #
-          # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-          #
-          # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
-          #
-          # You can also specify the latest image for a private image family by replacing the image name suffix with family/family-name. For example:
+          # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
           #
           # global/images/family/my-private-family
-          #
-          # Or you can specify an image family from a publicly-available project. For example, to use the latest Debian 7 from the debian-cloud project, make sure to include the project in the URL:
-          #
-          # projects/debian-cloud/global/images/family/debian-7
       "licenses": [ # [Output Only] Any applicable publicly visible licenses.
         "A String",
       ],
@@ -404,13 +403,13 @@
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
       "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
       "selfLink": "A String", # [Output Only] Server-defined fully-qualified URL for this resource.
-      "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+      "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
     }</pre>
 </div>
 
 <div class="method">
     <code class="details" id="insert">insert(project, zone, body, sourceImage=None)</code>
-  <pre>Creates a persistent disk in the specified project using the data in the request. You can create a disk with a sourceImage, a sourceSnapshot, or create an empty 200 GB data disk by omitting all properties. You can also create a disk that is larger than the default size by specifying the sizeGb property.
+  <pre>Creates a persistent disk in the specified project using the data in the request. You can create a disk with a sourceImage, a sourceSnapshot, or create an empty 500 GB data disk by omitting all properties. You can also create a disk that is larger than the default size by specifying the sizeGb property.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -435,25 +434,23 @@
     "sourceImageId": "A String", # [Output Only] The ID value of the image used to create this disk. This value identifies the exact image that was used to create this persistent disk. For example, if you created the persistent disk from an image that was later deleted and recreated under the same name, the source image ID would identify the exact version of the image that was used.
     "sourceSnapshotId": "A String", # [Output Only] The unique ID of the snapshot used to create this disk. This value identifies the exact snapshot that was used to create this persistent disk. For example, if you created the persistent disk from a snapshot that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used.
     "lastAttachTimestamp": "A String", # [Output Only] Last attach timestamp in RFC3339 text format.
-    "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted from the system, this field will not be set, even if an image with the same name has been re-created.
+    "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
         # 
-        # When creating a disk, you can provide a private (custom) image using the following input, and Compute Engine will use the corresponding image from your project. For example:
+        # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+        # 
+        # projects/debian-cloud/global/images/family/debian-8
+        # 
+        # Alternatively, use a specific version of a public operating system image:
+        # 
+        # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+        # 
+        # To create a disk with a private image that you created, specify the image name in the following format:
         # 
         # global/images/my-private-image
         # 
-        # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
-        # 
-        # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-        # 
-        # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
-        # 
-        # You can also specify the latest image for a private image family by replacing the image name suffix with family/family-name. For example:
+        # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
         # 
         # global/images/family/my-private-family
-        # 
-        # Or you can specify an image family from a publicly-available project. For example, to use the latest Debian 7 from the debian-cloud project, make sure to include the project in the URL:
-        # 
-        # projects/debian-cloud/global/images/family/debian-7
     "licenses": [ # [Output Only] Any applicable publicly visible licenses.
       "A String",
     ],
@@ -464,7 +461,7 @@
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined fully-qualified URL for this resource.
-    "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
   sourceImage: string, Optional. Source image to restore onto a disk.
@@ -494,7 +491,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -509,7 +506,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -532,11 +529,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -561,25 +558,23 @@
           "sourceImageId": "A String", # [Output Only] The ID value of the image used to create this disk. This value identifies the exact image that was used to create this persistent disk. For example, if you created the persistent disk from an image that was later deleted and recreated under the same name, the source image ID would identify the exact version of the image that was used.
           "sourceSnapshotId": "A String", # [Output Only] The unique ID of the snapshot used to create this disk. This value identifies the exact snapshot that was used to create this persistent disk. For example, if you created the persistent disk from a snapshot that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used.
           "lastAttachTimestamp": "A String", # [Output Only] Last attach timestamp in RFC3339 text format.
-          "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted from the system, this field will not be set, even if an image with the same name has been re-created.
+          "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
               #
-              # When creating a disk, you can provide a private (custom) image using the following input, and Compute Engine will use the corresponding image from your project. For example:
+              # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+              #
+              # projects/debian-cloud/global/images/family/debian-8
+              #
+              # Alternatively, use a specific version of a public operating system image:
+              #
+              # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+              #
+              # To create a disk with a private image that you created, specify the image name in the following format:
               #
               # global/images/my-private-image
               #
-              # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
-              #
-              # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-              #
-              # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
-              #
-              # You can also specify the latest image for a private image family by replacing the image name suffix with family/family-name. For example:
+              # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
               #
               # global/images/family/my-private-family
-              #
-              # Or you can specify an image family from a publicly-available project. For example, to use the latest Debian 7 from the debian-cloud project, make sure to include the project in the URL:
-              #
-              # projects/debian-cloud/global/images/family/debian-7
           "licenses": [ # [Output Only] Any applicable publicly visible licenses.
             "A String",
           ],
@@ -590,7 +585,7 @@
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
           "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
           "selfLink": "A String", # [Output Only] Server-defined fully-qualified URL for this resource.
-          "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+          "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
         },
     ],
     "kind": "compute#diskList", # [Output Only] Type of resource. Always compute#diskList for lists of disks.
@@ -613,4 +608,70 @@
     </pre>
 </div>
 
+<div class="method">
+    <code class="details" id="resize">resize(project, zone, disk, body)</code>
+  <pre>Resizes the specified persistent disk.
+
+Args:
+  project: string, Project ID for this request. (required)
+  zone: string, The name of the zone for this request. (required)
+  disk: string, The name of the persistent disk. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{
+    "sizeGb": "A String", # The new size of the persistent disk, which is specified in GB.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # An Operation resource, used to manage asynchronous API requests.
+    "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
+    "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
+    "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
+    "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
+    "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
+    "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
+    "statusMessage": "A String", # [Output Only] An optional textual description of the current status of the operation.
+    "status": "A String", # [Output Only] The status of the operation, which can be one of the following: PENDING, RUNNING, or DONE.
+    "description": "A String", # [Output Only] A textual description of the operation, which is set when the operation is created.
+    "warnings": [ # [Output Only] If warning messages are generated during processing of the operation, this field will be populated.
+      {
+        "message": "A String", # [Output Only] A human-readable description of the warning code.
+        "code": "A String", # [Output Only] A warning code, if applicable. For example, Compute Engine returns NO_RESULTS_ON_PAGE if there are no results in the response.
+        "data": [ # [Output Only] Metadata about this warning in key: value format. For example:
+            # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
+          {
+            "value": "A String", # [Output Only] A warning data value corresponding to the key.
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+          },
+        ],
+      },
+    ],
+    "user": "A String", # [Output Only] User who requested the operation, for example: user@example.com.
+    "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
+    "kind": "compute#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
+    "name": "A String", # [Output Only] Name of the resource.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
+    "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
+      "errors": [ # [Output Only] The array of errors encountered while processing this operation.
+        {
+          "message": "A String", # [Output Only] An optional, human-readable error message.
+          "code": "A String", # [Output Only] The error type identifier for this error.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
+        },
+      ],
+    },
+    "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
+    "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
+  }</pre>
+</div>
+
 </body></html>
\ No newline at end of file
diff --git a/docs/dyn/compute_v1.firewalls.html b/docs/dyn/compute_v1.firewalls.html
index 65f44f3..e3f17d8 100644
--- a/docs/dyn/compute_v1.firewalls.html
+++ b/docs/dyn/compute_v1.firewalls.html
@@ -129,7 +129,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -144,7 +144,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -171,6 +171,8 @@
       "sourceTags": [ # A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set.
           #
           # If both properties are set, an inbound connection is allowed if the range matches the sourceRanges OR the tag of the source matches the sourceTags property. The connection does not need to match both properties.
+          #
+          # Source tags cannot be used to allow access to an instance's external IP address. Because tags are associated with an instance, not an IP address, source tags can only be used to control traffic traveling from an instance inside the same network as the firewall.
         "A String",
       ],
       "sourceRanges": [ # The IP address blocks that this rule applies to, expressed in CIDR format. One or both of sourceRanges and sourceTags may be set.
@@ -219,6 +221,8 @@
     "sourceTags": [ # A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set.
         # 
         # If both properties are set, an inbound connection is allowed if the range matches the sourceRanges OR the tag of the source matches the sourceTags property. The connection does not need to match both properties.
+        # 
+        # Source tags cannot be used to allow access to an instance's external IP address. Because tags are associated with an instance, not an IP address, source tags can only be used to control traffic traveling from an instance inside the same network as the firewall.
       "A String",
     ],
     "sourceRanges": [ # The IP address blocks that this rule applies to, expressed in CIDR format. One or both of sourceRanges and sourceTags may be set.
@@ -277,7 +281,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -292,7 +296,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -314,11 +318,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -332,6 +336,8 @@
           "sourceTags": [ # A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set.
               #
               # If both properties are set, an inbound connection is allowed if the range matches the sourceRanges OR the tag of the source matches the sourceTags property. The connection does not need to match both properties.
+              #
+              # Source tags cannot be used to allow access to an instance's external IP address. Because tags are associated with an instance, not an IP address, source tags can only be used to control traffic traveling from an instance inside the same network as the firewall.
             "A String",
           ],
           "sourceRanges": [ # The IP address blocks that this rule applies to, expressed in CIDR format. One or both of sourceRanges and sourceTags may be set.
@@ -400,6 +406,8 @@
     "sourceTags": [ # A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set.
         # 
         # If both properties are set, an inbound connection is allowed if the range matches the sourceRanges OR the tag of the source matches the sourceTags property. The connection does not need to match both properties.
+        # 
+        # Source tags cannot be used to allow access to an instance's external IP address. Because tags are associated with an instance, not an IP address, source tags can only be used to control traffic traveling from an instance inside the same network as the firewall.
       "A String",
     ],
     "sourceRanges": [ # The IP address blocks that this rule applies to, expressed in CIDR format. One or both of sourceRanges and sourceTags may be set.
@@ -458,7 +466,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -473,7 +481,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -499,6 +507,8 @@
     "sourceTags": [ # A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set.
         # 
         # If both properties are set, an inbound connection is allowed if the range matches the sourceRanges OR the tag of the source matches the sourceTags property. The connection does not need to match both properties.
+        # 
+        # Source tags cannot be used to allow access to an instance's external IP address. Because tags are associated with an instance, not an IP address, source tags can only be used to control traffic traveling from an instance inside the same network as the firewall.
       "A String",
     ],
     "sourceRanges": [ # The IP address blocks that this rule applies to, expressed in CIDR format. One or both of sourceRanges and sourceTags may be set.
@@ -557,7 +567,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -572,7 +582,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.forwardingRules.html b/docs/dyn/compute_v1.forwardingRules.html
index d9aeb4e..0f5d51e 100644
--- a/docs/dyn/compute_v1.forwardingRules.html
+++ b/docs/dyn/compute_v1.forwardingRules.html
@@ -111,11 +111,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -132,7 +132,7 @@
               "region": "A String", # [Output Only] URL of the region where the regional forwarding rule resides. This field is not applicable to global forwarding rules.
               "target": "A String", # The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in the same region as the forwarding rule. For global forwarding rules, this target must be a global TargetHttpProxy or TargetHttpsProxy resource. The forwarded traffic must be of a type appropriate to the target object. For example, TargetHttpProxy requires HTTP traffic, and TargetHttpsProxy requires HTTPS traffic.
               "portRange": "A String", # Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges.
-              "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH or SCTP.
+              "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH, SCTP or ICMP.
               "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
               "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
               "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -146,7 +146,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -206,7 +206,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -221,7 +221,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -250,7 +250,7 @@
       "region": "A String", # [Output Only] URL of the region where the regional forwarding rule resides. This field is not applicable to global forwarding rules.
       "target": "A String", # The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in the same region as the forwarding rule. For global forwarding rules, this target must be a global TargetHttpProxy or TargetHttpsProxy resource. The forwarded traffic must be of a type appropriate to the target object. For example, TargetHttpProxy requires HTTP traffic, and TargetHttpsProxy requires HTTPS traffic.
       "portRange": "A String", # Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges.
-      "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH or SCTP.
+      "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH, SCTP or ICMP.
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
       "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
       "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -275,7 +275,7 @@
     "region": "A String", # [Output Only] URL of the region where the regional forwarding rule resides. This field is not applicable to global forwarding rules.
     "target": "A String", # The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in the same region as the forwarding rule. For global forwarding rules, this target must be a global TargetHttpProxy or TargetHttpsProxy resource. The forwarded traffic must be of a type appropriate to the target object. For example, TargetHttpProxy requires HTTP traffic, and TargetHttpsProxy requires HTTPS traffic.
     "portRange": "A String", # Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges.
-    "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH or SCTP.
+    "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH, SCTP or ICMP.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -308,7 +308,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -323,7 +323,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -346,11 +346,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -365,7 +365,7 @@
           "region": "A String", # [Output Only] URL of the region where the regional forwarding rule resides. This field is not applicable to global forwarding rules.
           "target": "A String", # The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in the same region as the forwarding rule. For global forwarding rules, this target must be a global TargetHttpProxy or TargetHttpsProxy resource. The forwarded traffic must be of a type appropriate to the target object. For example, TargetHttpProxy requires HTTP traffic, and TargetHttpsProxy requires HTTPS traffic.
           "portRange": "A String", # Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges.
-          "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH or SCTP.
+          "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH, SCTP or ICMP.
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
           "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
           "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -433,7 +433,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -448,7 +448,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.globalAddresses.html b/docs/dyn/compute_v1.globalAddresses.html
index d721ae7..1608044 100644
--- a/docs/dyn/compute_v1.globalAddresses.html
+++ b/docs/dyn/compute_v1.globalAddresses.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified address resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, address)</a></code></p>
-<p class="firstline">Returns the specified address resource.</p>
+<p class="firstline">Returns the specified address resource. Get a list of available addresses by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates an address resource in the specified project using the data included in the request.</p>
@@ -123,7 +123,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -138,7 +138,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -150,7 +150,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, address)</code>
-  <pre>Returns the specified address resource.
+  <pre>Returns the specified address resource. Get a list of available addresses by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -171,7 +171,7 @@
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
       "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
       "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-      "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+      "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
     }</pre>
 </div>
 
@@ -196,7 +196,7 @@
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
 
@@ -225,7 +225,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -240,7 +240,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -262,11 +262,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -286,7 +286,7 @@
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
           "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
           "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-          "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+          "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
         },
     ],
     "kind": "compute#addressList", # [Output Only] Type of resource. Always compute#addressList for lists of addresses.
diff --git a/docs/dyn/compute_v1.globalForwardingRules.html b/docs/dyn/compute_v1.globalForwardingRules.html
index 94bd50e..43b84cd 100644
--- a/docs/dyn/compute_v1.globalForwardingRules.html
+++ b/docs/dyn/compute_v1.globalForwardingRules.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified ForwardingRule resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, forwardingRule)</a></code></p>
-<p class="firstline">Returns the specified ForwardingRule resource.</p>
+<p class="firstline">Returns the specified ForwardingRule resource. Get a list of available forwarding rules by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates a ForwardingRule resource in the specified project and region using the data included in the request.</p>
@@ -126,7 +126,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -141,7 +141,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -153,7 +153,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, forwardingRule)</code>
-  <pre>Returns the specified ForwardingRule resource.
+  <pre>Returns the specified ForwardingRule resource. Get a list of available forwarding rules by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -169,7 +169,7 @@
       "region": "A String", # [Output Only] URL of the region where the regional forwarding rule resides. This field is not applicable to global forwarding rules.
       "target": "A String", # The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in the same region as the forwarding rule. For global forwarding rules, this target must be a global TargetHttpProxy or TargetHttpsProxy resource. The forwarded traffic must be of a type appropriate to the target object. For example, TargetHttpProxy requires HTTP traffic, and TargetHttpsProxy requires HTTPS traffic.
       "portRange": "A String", # Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges.
-      "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH or SCTP.
+      "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH, SCTP or ICMP.
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
       "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
       "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -193,7 +193,7 @@
     "region": "A String", # [Output Only] URL of the region where the regional forwarding rule resides. This field is not applicable to global forwarding rules.
     "target": "A String", # The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in the same region as the forwarding rule. For global forwarding rules, this target must be a global TargetHttpProxy or TargetHttpsProxy resource. The forwarded traffic must be of a type appropriate to the target object. For example, TargetHttpProxy requires HTTP traffic, and TargetHttpsProxy requires HTTPS traffic.
     "portRange": "A String", # Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges.
-    "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH or SCTP.
+    "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH, SCTP or ICMP.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -226,7 +226,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -241,7 +241,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -263,11 +263,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -282,7 +282,7 @@
           "region": "A String", # [Output Only] URL of the region where the regional forwarding rule resides. This field is not applicable to global forwarding rules.
           "target": "A String", # The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in the same region as the forwarding rule. For global forwarding rules, this target must be a global TargetHttpProxy or TargetHttpsProxy resource. The forwarded traffic must be of a type appropriate to the target object. For example, TargetHttpProxy requires HTTP traffic, and TargetHttpsProxy requires HTTPS traffic.
           "portRange": "A String", # Applicable only when IPProtocol is TCP, UDP, or SCTP, only packets addressed to ports in the specified range will be forwarded to target. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges.
-          "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH or SCTP.
+          "IPProtocol": "A String", # The IP protocol to which this rule applies. Valid options are TCP, UDP, ESP, AH, SCTP or ICMP.
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
           "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
           "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
@@ -349,7 +349,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -364,7 +364,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.globalOperations.html b/docs/dyn/compute_v1.globalOperations.html
index e1d0ff8..6330a7a 100644
--- a/docs/dyn/compute_v1.globalOperations.html
+++ b/docs/dyn/compute_v1.globalOperations.html
@@ -85,7 +85,7 @@
 <p class="firstline">Deletes the specified Operations resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, operation)</a></code></p>
-<p class="firstline">Retrieves the specified Operations resource.</p>
+<p class="firstline">Retrieves the specified Operations resource. Get a list of operations by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, maxResults=None, pageToken=None, filter=None)</a></code></p>
 <p class="firstline">Retrieves a list of Operation resources contained within the specified project.</p>
@@ -105,11 +105,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -141,7 +141,7 @@
                     # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
                   {
                     "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                    "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                    "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
                   },
                 ],
               },
@@ -156,7 +156,7 @@
                 {
                   "message": "A String", # [Output Only] An optional, human-readable error message.
                   "code": "A String", # [Output Only] The error type identifier for this error.
-                  "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+                  "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
                 },
               ],
             },
@@ -172,7 +172,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -210,7 +210,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, operation)</code>
-  <pre>Retrieves the specified Operations resource.
+  <pre>Retrieves the specified Operations resource. Get a list of operations by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -241,7 +241,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -256,7 +256,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -278,11 +278,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -312,7 +312,7 @@
                 # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
               {
                 "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
               },
             ],
           },
@@ -327,7 +327,7 @@
             {
               "message": "A String", # [Output Only] An optional, human-readable error message.
               "code": "A String", # [Output Only] The error type identifier for this error.
-              "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+              "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
             },
           ],
         },
diff --git a/docs/dyn/compute_v1.httpHealthChecks.html b/docs/dyn/compute_v1.httpHealthChecks.html
index cae6634..746dae5 100644
--- a/docs/dyn/compute_v1.httpHealthChecks.html
+++ b/docs/dyn/compute_v1.httpHealthChecks.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified HttpHealthCheck resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, httpHealthCheck)</a></code></p>
-<p class="firstline">Returns the specified HttpHealthCheck resource.</p>
+<p class="firstline">Returns the specified HttpHealthCheck resource. Get a list of available HTTP health checks by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates a HttpHealthCheck resource in the specified project using the data included in the request.</p>
@@ -129,7 +129,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -144,7 +144,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -156,7 +156,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, httpHealthCheck)</code>
-  <pre>Returns the specified HttpHealthCheck resource.
+  <pre>Returns the specified HttpHealthCheck resource. Get a list of available HTTP health checks by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -233,7 +233,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -248,7 +248,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -270,11 +270,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -370,7 +370,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -385,7 +385,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -447,7 +447,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -462,7 +462,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.httpsHealthChecks.html b/docs/dyn/compute_v1.httpsHealthChecks.html
index 898f490..1939365 100644
--- a/docs/dyn/compute_v1.httpsHealthChecks.html
+++ b/docs/dyn/compute_v1.httpsHealthChecks.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified HttpsHealthCheck resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, httpsHealthCheck)</a></code></p>
-<p class="firstline">Returns the specified HttpsHealthCheck resource.</p>
+<p class="firstline">Returns the specified HttpsHealthCheck resource. Get a list of available HTTPS health checks by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates a HttpsHealthCheck resource in the specified project using the data included in the request.</p>
@@ -129,7 +129,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -144,7 +144,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -156,7 +156,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, httpsHealthCheck)</code>
-  <pre>Returns the specified HttpsHealthCheck resource.
+  <pre>Returns the specified HttpsHealthCheck resource. Get a list of available HTTPS health checks by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -233,7 +233,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -248,7 +248,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -270,11 +270,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -370,7 +370,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -385,7 +385,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -447,7 +447,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -462,7 +462,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.images.html b/docs/dyn/compute_v1.images.html
index 24181fc..eef4a08 100644
--- a/docs/dyn/compute_v1.images.html
+++ b/docs/dyn/compute_v1.images.html
@@ -82,7 +82,10 @@
 <p class="firstline">Sets the deprecation status of an image.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, image)</a></code></p>
-<p class="firstline">Returns the specified image.</p>
+<p class="firstline">Returns the specified image. Get a list of available images by making a list() request.</p>
+<p class="toc_element">
+  <code><a href="#getFromFamily">getFromFamily(project, family)</a></code></p>
+<p class="firstline">Returns the latest image that is part of an image family and is not deprecated.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates an image in the specified project using the data included in the request.</p>
@@ -126,7 +129,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -141,7 +144,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -197,7 +200,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -212,7 +215,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -224,7 +227,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, image)</code>
-  <pre>Returns the specified image.
+  <pre>Returns the specified image. Get a list of available images by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -237,11 +240,7 @@
       "status": "A String", # [Output Only] The status of the image. An image can be used to create other resources, such as instances, only after the image has been successfully created and the status is set to READY. Possible values are FAILED, PENDING, or READY.
       "kind": "compute#image", # [Output Only] Type of the resource. Always compute#image for images.
       "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
-      "rawDisk": { # The parameters of the raw disk image.
-        "containerType": "A String", # The format used to encode and transmit the block device, which should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.
-        "source": "A String", # The full Google Cloud Storage URL where the disk image is stored. You must provide either this property or the sourceDisk property but not both.
-        "sha1Checksum": "A String", # An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.
-      },
+      "family": "A String", # The name of the image family to which this image belongs. You can create disks by specifying an image family instead of a specific image name. The image family always returns its latest image that is not deprecated.
       "deprecated": { # Deprecation status for a public resource. # The deprecation status associated with this image.
         "deleted": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED.
         "deprecated": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED.
@@ -249,6 +248,57 @@
         "obsolete": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE.
         "replacement": "A String", # The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.
       },
+      "rawDisk": { # The parameters of the raw disk image.
+        "containerType": "A String", # The format used to encode and transmit the block device, which should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.
+        "source": "A String", # The full Google Cloud Storage URL where the disk image is stored. You must provide either this property or the sourceDisk property but not both.
+        "sha1Checksum": "A String", # An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.
+      },
+      "archiveSizeBytes": "A String", # Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).
+      "sourceDiskId": "A String", # The ID value of the disk used to create this image. This value may be used to determine whether the image was taken from the current or a previous instance of a given disk name.
+      "diskSizeGb": "A String", # Size of the image when restored onto a persistent disk (in GB).
+      "sourceDisk": "A String", # URL of the The source disk used to create this image. This can be a full or valid partial URL. You must provide either this property or the rawDisk.source property but not both to create an image. For example, the following are valid values:
+          # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/disk/disk
+          # - projects/project/zones/zone/disk/disk
+          # - zones/zone/disks/disk
+      "licenses": [ # Any applicable publicly visible licenses.
+        "A String",
+      ],
+      "sourceType": "RAW", # The type of the image used to create this disk. The default and only value is RAW
+      "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
+      "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
+      "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
+      "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="getFromFamily">getFromFamily(project, family)</code>
+  <pre>Returns the latest image that is part of an image family and is not deprecated.
+
+Args:
+  project: string, Project ID for this request. (required)
+  family: string, Name of the image resource to return. (required)
+
+Returns:
+  An object of the form:
+
+    { # An Image resource.
+      "status": "A String", # [Output Only] The status of the image. An image can be used to create other resources, such as instances, only after the image has been successfully created and the status is set to READY. Possible values are FAILED, PENDING, or READY.
+      "kind": "compute#image", # [Output Only] Type of the resource. Always compute#image for images.
+      "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
+      "family": "A String", # The name of the image family to which this image belongs. You can create disks by specifying an image family instead of a specific image name. The image family always returns its latest image that is not deprecated.
+      "deprecated": { # Deprecation status for a public resource. # The deprecation status associated with this image.
+        "deleted": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED.
+        "deprecated": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED.
+        "state": "A String", # The deprecation state of this resource. This can be DEPRECATED, OBSOLETE, or DELETED. Operations which create a new resource using a DEPRECATED resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. Operations which use OBSOLETE or DELETED resources will be rejected and result in an error.
+        "obsolete": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE.
+        "replacement": "A String", # The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.
+      },
+      "rawDisk": { # The parameters of the raw disk image.
+        "containerType": "A String", # The format used to encode and transmit the block device, which should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.
+        "source": "A String", # The full Google Cloud Storage URL where the disk image is stored. You must provide either this property or the sourceDisk property but not both.
+        "sha1Checksum": "A String", # An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.
+      },
       "archiveSizeBytes": "A String", # Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).
       "sourceDiskId": "A String", # The ID value of the disk used to create this image. This value may be used to determine whether the image was taken from the current or a previous instance of a given disk name.
       "diskSizeGb": "A String", # Size of the image when restored onto a persistent disk (in GB).
@@ -280,11 +330,7 @@
     "status": "A String", # [Output Only] The status of the image. An image can be used to create other resources, such as instances, only after the image has been successfully created and the status is set to READY. Possible values are FAILED, PENDING, or READY.
     "kind": "compute#image", # [Output Only] Type of the resource. Always compute#image for images.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
-    "rawDisk": { # The parameters of the raw disk image.
-      "containerType": "A String", # The format used to encode and transmit the block device, which should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.
-      "source": "A String", # The full Google Cloud Storage URL where the disk image is stored. You must provide either this property or the sourceDisk property but not both.
-      "sha1Checksum": "A String", # An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.
-    },
+    "family": "A String", # The name of the image family to which this image belongs. You can create disks by specifying an image family instead of a specific image name. The image family always returns its latest image that is not deprecated.
     "deprecated": { # Deprecation status for a public resource. # The deprecation status associated with this image.
       "deleted": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED.
       "deprecated": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED.
@@ -292,6 +338,11 @@
       "obsolete": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE.
       "replacement": "A String", # The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.
     },
+    "rawDisk": { # The parameters of the raw disk image.
+      "containerType": "A String", # The format used to encode and transmit the block device, which should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.
+      "source": "A String", # The full Google Cloud Storage URL where the disk image is stored. You must provide either this property or the sourceDisk property but not both.
+      "sha1Checksum": "A String", # An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.
+    },
     "archiveSizeBytes": "A String", # Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).
     "sourceDiskId": "A String", # The ID value of the disk used to create this image. This value may be used to determine whether the image was taken from the current or a previous instance of a given disk name.
     "diskSizeGb": "A String", # Size of the image when restored onto a persistent disk (in GB).
@@ -335,7 +386,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -350,7 +401,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -374,11 +425,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -390,11 +441,7 @@
           "status": "A String", # [Output Only] The status of the image. An image can be used to create other resources, such as instances, only after the image has been successfully created and the status is set to READY. Possible values are FAILED, PENDING, or READY.
           "kind": "compute#image", # [Output Only] Type of the resource. Always compute#image for images.
           "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
-          "rawDisk": { # The parameters of the raw disk image.
-            "containerType": "A String", # The format used to encode and transmit the block device, which should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.
-            "source": "A String", # The full Google Cloud Storage URL where the disk image is stored. You must provide either this property or the sourceDisk property but not both.
-            "sha1Checksum": "A String", # An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.
-          },
+          "family": "A String", # The name of the image family to which this image belongs. You can create disks by specifying an image family instead of a specific image name. The image family always returns its latest image that is not deprecated.
           "deprecated": { # Deprecation status for a public resource. # The deprecation status associated with this image.
             "deleted": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED.
             "deprecated": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED.
@@ -402,6 +449,11 @@
             "obsolete": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE.
             "replacement": "A String", # The URL of the suggested replacement for a deprecated resource. The suggested replacement resource must be the same kind of resource as the deprecated resource.
           },
+          "rawDisk": { # The parameters of the raw disk image.
+            "containerType": "A String", # The format used to encode and transmit the block device, which should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.
+            "source": "A String", # The full Google Cloud Storage URL where the disk image is stored. You must provide either this property or the sourceDisk property but not both.
+            "sha1Checksum": "A String", # An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.
+          },
           "archiveSizeBytes": "A String", # Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).
           "sourceDiskId": "A String", # The ID value of the disk used to create this image. This value may be used to determine whether the image was taken from the current or a previous instance of a given disk name.
           "diskSizeGb": "A String", # Size of the image when restored onto a persistent disk (in GB).
diff --git a/docs/dyn/compute_v1.instanceGroupManagers.html b/docs/dyn/compute_v1.instanceGroupManagers.html
index f17f13f..a28dbaf 100644
--- a/docs/dyn/compute_v1.instanceGroupManagers.html
+++ b/docs/dyn/compute_v1.instanceGroupManagers.html
@@ -91,7 +91,7 @@
 <p class="firstline">Schedules a group action to delete the specified instances in the managed instance group. The instances are also removed from any target pools of which they were a member. This method reduces the targetSize of the managed instance group by the number of instances that you delete. This operation is marked as DONE when the action is scheduled even if the instances are still being deleted. You must separately verify the status of the deleting action with the listmanagedinstances method.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, zone, instanceGroupManager)</a></code></p>
-<p class="firstline">Returns all of the details about the specified managed instance group.</p>
+<p class="firstline">Returns all of the details about the specified managed instance group. Get a list of available managed instance groups by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, zone, body)</a></code></p>
 <p class="firstline">Creates a managed instance group using the information that you specify in the request. After the group is created, it schedules an action to create instances in the group using the specified instance template. This operation is marked as DONE when the group is created even if the instances in the group have not yet been created. You must separately verify the status of the individual instances with the listmanagedinstances method.</p>
@@ -160,7 +160,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -175,7 +175,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -197,11 +197,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -217,7 +217,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -241,7 +241,7 @@
                 "A String",
               ],
               "baseInstanceName": "A String", # The base instance name to use for instances in this group. The value must be 1-58 characters long. Instances are named by appending a hyphen and a random four-character string to the base instance name. The base instance name must comply with RFC1035.
-              "fingerprint": "A String", # [Output Only] The fingerprint of the target pools information. You can use this optional field for optimistic locking when you update the target pool entries.
+              "fingerprint": "A String", # [Output Only] The fingerprint of the resource data. You can use this optional field for optimistic locking when you update the resource.
               "instanceTemplate": "A String", # The URL of the instance template that is specified for this managed instance group. The group uses this template to create all new instances in the managed instance group.
               "namedPorts": [ # Named ports configured for the Instance Groups complementary to this Instance Group Manager.
                 { # The named port. For example: .
@@ -311,7 +311,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -326,7 +326,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -379,7 +379,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -394,7 +394,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -406,7 +406,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, zone, instanceGroupManager)</code>
-  <pre>Returns all of the details about the specified managed instance group.
+  <pre>Returns all of the details about the specified managed instance group. Get a list of available managed instance groups by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -435,7 +435,7 @@
         "A String",
       ],
       "baseInstanceName": "A String", # The base instance name to use for instances in this group. The value must be 1-58 characters long. Instances are named by appending a hyphen and a random four-character string to the base instance name. The base instance name must comply with RFC1035.
-      "fingerprint": "A String", # [Output Only] The fingerprint of the target pools information. You can use this optional field for optimistic locking when you update the target pool entries.
+      "fingerprint": "A String", # [Output Only] The fingerprint of the resource data. You can use this optional field for optimistic locking when you update the resource.
       "instanceTemplate": "A String", # The URL of the instance template that is specified for this managed instance group. The group uses this template to create all new instances in the managed instance group.
       "namedPorts": [ # Named ports configured for the Instance Groups complementary to this Instance Group Manager.
         { # The named port. For example: .
@@ -479,7 +479,7 @@
       "A String",
     ],
     "baseInstanceName": "A String", # The base instance name to use for instances in this group. The value must be 1-58 characters long. Instances are named by appending a hyphen and a random four-character string to the base instance name. The base instance name must comply with RFC1035.
-    "fingerprint": "A String", # [Output Only] The fingerprint of the target pools information. You can use this optional field for optimistic locking when you update the target pool entries.
+    "fingerprint": "A String", # [Output Only] The fingerprint of the resource data. You can use this optional field for optimistic locking when you update the resource.
     "instanceTemplate": "A String", # The URL of the instance template that is specified for this managed instance group. The group uses this template to create all new instances in the managed instance group.
     "namedPorts": [ # Named ports configured for the Instance Groups complementary to this Instance Group Manager.
       { # The named port. For example: .
@@ -519,7 +519,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -534,7 +534,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -557,11 +557,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -588,7 +588,7 @@
             "A String",
           ],
           "baseInstanceName": "A String", # The base instance name to use for instances in this group. The value must be 1-58 characters long. Instances are named by appending a hyphen and a random four-character string to the base instance name. The base instance name must comply with RFC1035.
-          "fingerprint": "A String", # [Output Only] The fingerprint of the target pools information. You can use this optional field for optimistic locking when you update the target pool entries.
+          "fingerprint": "A String", # [Output Only] The fingerprint of the resource data. You can use this optional field for optimistic locking when you update the resource.
           "instanceTemplate": "A String", # The URL of the instance template that is specified for this managed instance group. The group uses this template to create all new instances in the managed instance group.
           "namedPorts": [ # Named ports configured for the Instance Groups complementary to this Instance Group Manager.
             { # The named port. For example: .
@@ -639,7 +639,7 @@
               {
                 "message": "A String", # [Output Only] An optional, human-readable error message.
                 "code": "A String", # [Output Only] The error type identifier for this error.
-                "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+                "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
               },
             ],
           },
@@ -708,7 +708,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -723,7 +723,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -768,7 +768,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -783,7 +783,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -834,7 +834,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -849,7 +849,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -903,7 +903,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -918,7 +918,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.instanceGroups.html b/docs/dyn/compute_v1.instanceGroups.html
index de4935e..f94f817 100644
--- a/docs/dyn/compute_v1.instanceGroups.html
+++ b/docs/dyn/compute_v1.instanceGroups.html
@@ -88,7 +88,7 @@
 <p class="firstline">Deletes the specified instance group. The instances in the group are not deleted. Note that instance group must not belong to a backend service. Read  Deleting an instance group for more information.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, zone, instanceGroup)</a></code></p>
-<p class="firstline">Returns the specified instance group resource.</p>
+<p class="firstline">Returns the specified instance group. Get a list of available instance groups by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, zone, body)</a></code></p>
 <p class="firstline">Creates an instance group in the specified project using the parameters that are included in the request.</p>
@@ -156,7 +156,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -171,7 +171,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -193,11 +193,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -213,7 +213,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -298,7 +298,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -313,7 +313,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -325,7 +325,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, zone, instanceGroup)</code>
-  <pre>Returns the specified instance group resource.
+  <pre>Returns the specified instance group. Get a list of available instance groups by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -420,7 +420,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -435,7 +435,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -458,11 +458,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -521,11 +521,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -623,7 +623,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -638,7 +638,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -695,7 +695,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -710,7 +710,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.instanceTemplates.html b/docs/dyn/compute_v1.instanceTemplates.html
index 6bb6777..c15f7b9 100644
--- a/docs/dyn/compute_v1.instanceTemplates.html
+++ b/docs/dyn/compute_v1.instanceTemplates.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified instance template. If you delete an instance template that is being referenced from another instance group, the instance group will not be able to create or recreate virtual machine instances. Deleting an instance template is permanent and cannot be undone.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, instanceTemplate)</a></code></p>
-<p class="firstline">Returns the specified instance template resource.</p>
+<p class="firstline">Returns the specified instance template. Get a list of available instance templates by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates an instance template in the specified project using the data that is included in the request. If you are creating a new template to update an existing instance group, your new instance template must use the same network or, if applicable, the same subnetwork as the original template.</p>
@@ -123,7 +123,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -138,7 +138,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -150,7 +150,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, instanceTemplate)</code>
-  <pre>Returns the specified instance template resource.
+  <pre>Returns the specified instance template. Get a list of available instance templates by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -188,15 +188,23 @@
                 # This property is mutually exclusive with the source property; you can only define one or the other, but not both.
               "diskSizeGb": "A String", # Specifies the size of the disk in base-2 GB.
               "diskName": "A String", # Specifies the disk name. If not specified, the default is to use the name of the instance.
-              "sourceImage": "A String", # A source image used to create the disk. You can provide a private (custom) image, and Compute Engine will use the corresponding image from your project. For example:
+              "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
+                  #
+                  # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+                  #
+                  # projects/debian-cloud/global/images/family/debian-8
+                  #
+                  # Alternatively, use a specific version of a public operating system image:
+                  #
+                  # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+                  #
+                  # To create a disk with a private image that you created, specify the image name in the following format:
                   #
                   # global/images/my-private-image
                   #
-                  # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
+                  # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
                   #
-                  # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-                  #
-                  # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
+                  # global/images/family/my-private-family
               "diskType": "A String", # Specifies the disk type to use to create the instance. If not specified, the default is pd-standard, specified using the full URL. For example:
                   #
                   # https://www.googleapis.com/compute/v1/projects/project/zones/zone/diskTypes/pd-standard
@@ -252,11 +260,11 @@
                 "natIP": "A String", # An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.
               },
             ],
-            "networkIP": "A String", # [Output Only] An optional IPV4 internal network address assigned to the instance for this network interface.
+            "networkIP": "A String", # An IPv4 internal network address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.
             "name": "A String", # [Output Only] The name of the network interface, generated by the server. For network devices, these are eth0, eth1, etc.
             "subnetwork": "A String", # The URL of the Subnetwork resource for this instance. If the network resource is in legacy mode, do not provide this property. If the network is in auto subnet mode, providing the subnetwork is optional. If the network is in custom subnet mode, then this field should be specified. If you specify this property, you can specify the subnetwork as a full or partial URL. For example, the following are all valid URLs:
-                # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/subnetworks/subnetwork
-                # - zones/zone/subnetworks/subnetwork
+                # - https://www.googleapis.com/compute/v1/projects/project/regions/region/subnetworks/subnetwork
+                # - regions/region/subnetworks/subnetwork
             "network": "A String", # URL of the network resource for this instance. This is required for creating an instance but optional when creating a firewall rule. If not specified when creating a firewall rule, the default network is used:
                 #
                 # global/networks/default
@@ -311,15 +319,23 @@
               # This property is mutually exclusive with the source property; you can only define one or the other, but not both.
             "diskSizeGb": "A String", # Specifies the size of the disk in base-2 GB.
             "diskName": "A String", # Specifies the disk name. If not specified, the default is to use the name of the instance.
-            "sourceImage": "A String", # A source image used to create the disk. You can provide a private (custom) image, and Compute Engine will use the corresponding image from your project. For example:
+            "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
+                #
+                # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+                #
+                # projects/debian-cloud/global/images/family/debian-8
+                #
+                # Alternatively, use a specific version of a public operating system image:
+                #
+                # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+                #
+                # To create a disk with a private image that you created, specify the image name in the following format:
                 #
                 # global/images/my-private-image
                 #
-                # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
+                # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
                 #
-                # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-                #
-                # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
+                # global/images/family/my-private-family
             "diskType": "A String", # Specifies the disk type to use to create the instance. If not specified, the default is pd-standard, specified using the full URL. For example:
                 #
                 # https://www.googleapis.com/compute/v1/projects/project/zones/zone/diskTypes/pd-standard
@@ -375,11 +391,11 @@
               "natIP": "A String", # An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.
             },
           ],
-          "networkIP": "A String", # [Output Only] An optional IPV4 internal network address assigned to the instance for this network interface.
+          "networkIP": "A String", # An IPv4 internal network address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.
           "name": "A String", # [Output Only] The name of the network interface, generated by the server. For network devices, these are eth0, eth1, etc.
           "subnetwork": "A String", # The URL of the Subnetwork resource for this instance. If the network resource is in legacy mode, do not provide this property. If the network is in auto subnet mode, providing the subnetwork is optional. If the network is in custom subnet mode, then this field should be specified. If you specify this property, you can specify the subnetwork as a full or partial URL. For example, the following are all valid URLs:
-              # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/subnetworks/subnetwork
-              # - zones/zone/subnetworks/subnetwork
+              # - https://www.googleapis.com/compute/v1/projects/project/regions/region/subnetworks/subnetwork
+              # - regions/region/subnetworks/subnetwork
           "network": "A String", # URL of the network resource for this instance. This is required for creating an instance but optional when creating a firewall rule. If not specified when creating a firewall rule, the default network is used:
               #
               # global/networks/default
@@ -421,7 +437,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -436,7 +452,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -458,11 +474,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -499,15 +515,23 @@
                     # This property is mutually exclusive with the source property; you can only define one or the other, but not both.
                   "diskSizeGb": "A String", # Specifies the size of the disk in base-2 GB.
                   "diskName": "A String", # Specifies the disk name. If not specified, the default is to use the name of the instance.
-                  "sourceImage": "A String", # A source image used to create the disk. You can provide a private (custom) image, and Compute Engine will use the corresponding image from your project. For example:
+                  "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
+                      #
+                      # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+                      #
+                      # projects/debian-cloud/global/images/family/debian-8
+                      #
+                      # Alternatively, use a specific version of a public operating system image:
+                      #
+                      # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+                      #
+                      # To create a disk with a private image that you created, specify the image name in the following format:
                       #
                       # global/images/my-private-image
                       #
-                      # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
+                      # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
                       #
-                      # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-                      #
-                      # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
+                      # global/images/family/my-private-family
                   "diskType": "A String", # Specifies the disk type to use to create the instance. If not specified, the default is pd-standard, specified using the full URL. For example:
                       #
                       # https://www.googleapis.com/compute/v1/projects/project/zones/zone/diskTypes/pd-standard
@@ -563,11 +587,11 @@
                     "natIP": "A String", # An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.
                   },
                 ],
-                "networkIP": "A String", # [Output Only] An optional IPV4 internal network address assigned to the instance for this network interface.
+                "networkIP": "A String", # An IPv4 internal network address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.
                 "name": "A String", # [Output Only] The name of the network interface, generated by the server. For network devices, these are eth0, eth1, etc.
                 "subnetwork": "A String", # The URL of the Subnetwork resource for this instance. If the network resource is in legacy mode, do not provide this property. If the network is in auto subnet mode, providing the subnetwork is optional. If the network is in custom subnet mode, then this field should be specified. If you specify this property, you can specify the subnetwork as a full or partial URL. For example, the following are all valid URLs:
-                    # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/subnetworks/subnetwork
-                    # - zones/zone/subnetworks/subnetwork
+                    # - https://www.googleapis.com/compute/v1/projects/project/regions/region/subnetworks/subnetwork
+                    # - regions/region/subnetworks/subnetwork
                 "network": "A String", # URL of the network resource for this instance. This is required for creating an instance but optional when creating a firewall rule. If not specified when creating a firewall rule, the default network is used:
                     #
                     # global/networks/default
diff --git a/docs/dyn/compute_v1.instances.html b/docs/dyn/compute_v1.instances.html
index d162f52..b946e7c 100644
--- a/docs/dyn/compute_v1.instances.html
+++ b/docs/dyn/compute_v1.instances.html
@@ -97,7 +97,7 @@
 <p class="firstline">Detaches a disk from an instance.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, zone, instance)</a></code></p>
-<p class="firstline">Returns the specified Instance resource.</p>
+<p class="firstline">Returns the specified Instance resource. Get a list of available instances by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#getSerialPortOutput">getSerialPortOutput(project, zone, instance, port=None)</a></code></p>
 <p class="firstline">Returns the specified instance's serial port output.</p>
@@ -180,7 +180,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -195,7 +195,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -217,11 +217,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -238,7 +238,7 @@
             "canIpForward": True or False, # Allows this instance to send and receive packets with non-matching destination or source IPs. This is required if you plan to use this instance to forward routes. For more information, see Enabling IP Forwarding.
             "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
             "zone": "A String", # [Output Only] URL of the zone where the instance resides.
-            "tags": { # A set of instance tags. # A list of tags to appy to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.
+            "tags": { # A set of instance tags. # A list of tags to apply to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.
               "items": [ # An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.
                 "A String",
               ],
@@ -259,15 +259,23 @@
                     # This property is mutually exclusive with the source property; you can only define one or the other, but not both.
                   "diskSizeGb": "A String", # Specifies the size of the disk in base-2 GB.
                   "diskName": "A String", # Specifies the disk name. If not specified, the default is to use the name of the instance.
-                  "sourceImage": "A String", # A source image used to create the disk. You can provide a private (custom) image, and Compute Engine will use the corresponding image from your project. For example:
+                  "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
+                      #
+                      # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+                      #
+                      # projects/debian-cloud/global/images/family/debian-8
+                      #
+                      # Alternatively, use a specific version of a public operating system image:
+                      #
+                      # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+                      #
+                      # To create a disk with a private image that you created, specify the image name in the following format:
                       #
                       # global/images/my-private-image
                       #
-                      # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
+                      # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
                       #
-                      # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-                      #
-                      # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
+                      # global/images/family/my-private-family
                   "diskType": "A String", # Specifies the disk type to use to create the instance. If not specified, the default is pd-standard, specified using the full URL. For example:
                       #
                       # https://www.googleapis.com/compute/v1/projects/project/zones/zone/diskTypes/pd-standard
@@ -325,11 +333,11 @@
                     "natIP": "A String", # An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.
                   },
                 ],
-                "networkIP": "A String", # [Output Only] An optional IPV4 internal network address assigned to the instance for this network interface.
+                "networkIP": "A String", # An IPv4 internal network address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.
                 "name": "A String", # [Output Only] The name of the network interface, generated by the server. For network devices, these are eth0, eth1, etc.
                 "subnetwork": "A String", # The URL of the Subnetwork resource for this instance. If the network resource is in legacy mode, do not provide this property. If the network is in auto subnet mode, providing the subnetwork is optional. If the network is in custom subnet mode, then this field should be specified. If you specify this property, you can specify the subnetwork as a full or partial URL. For example, the following are all valid URLs:
-                    # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/subnetworks/subnetwork
-                    # - zones/zone/subnetworks/subnetwork
+                    # - https://www.googleapis.com/compute/v1/projects/project/regions/region/subnetworks/subnetwork
+                    # - regions/region/subnetworks/subnetwork
                 "network": "A String", # URL of the network resource for this instance. This is required for creating an instance but optional when creating a firewall rule. If not specified when creating a firewall rule, the default network is used:
                     #
                     # global/networks/default
@@ -362,7 +370,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -411,15 +419,23 @@
       # This property is mutually exclusive with the source property; you can only define one or the other, but not both.
     "diskSizeGb": "A String", # Specifies the size of the disk in base-2 GB.
     "diskName": "A String", # Specifies the disk name. If not specified, the default is to use the name of the instance.
-    "sourceImage": "A String", # A source image used to create the disk. You can provide a private (custom) image, and Compute Engine will use the corresponding image from your project. For example:
+    "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
+        #
+        # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+        #
+        # projects/debian-cloud/global/images/family/debian-8
+        #
+        # Alternatively, use a specific version of a public operating system image:
+        #
+        # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+        #
+        # To create a disk with a private image that you created, specify the image name in the following format:
         #
         # global/images/my-private-image
         #
-        # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
+        # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
         #
-        # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-        #
-        # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
+        # global/images/family/my-private-family
     "diskType": "A String", # Specifies the disk type to use to create the instance. If not specified, the default is pd-standard, specified using the full URL. For example:
         #
         # https://www.googleapis.com/compute/v1/projects/project/zones/zone/diskTypes/pd-standard
@@ -467,7 +483,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -482,7 +498,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -526,7 +542,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -541,7 +557,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -587,7 +603,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -602,7 +618,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -647,7 +663,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -662,7 +678,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -674,7 +690,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, zone, instance)</code>
-  <pre>Returns the specified Instance resource.
+  <pre>Returns the specified Instance resource. Get a list of available instances by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -691,7 +707,7 @@
     "canIpForward": True or False, # Allows this instance to send and receive packets with non-matching destination or source IPs. This is required if you plan to use this instance to forward routes. For more information, see Enabling IP Forwarding.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "zone": "A String", # [Output Only] URL of the zone where the instance resides.
-    "tags": { # A set of instance tags. # A list of tags to appy to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.
+    "tags": { # A set of instance tags. # A list of tags to apply to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.
       "items": [ # An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.
         "A String",
       ],
@@ -712,15 +728,23 @@
             # This property is mutually exclusive with the source property; you can only define one or the other, but not both.
           "diskSizeGb": "A String", # Specifies the size of the disk in base-2 GB.
           "diskName": "A String", # Specifies the disk name. If not specified, the default is to use the name of the instance.
-          "sourceImage": "A String", # A source image used to create the disk. You can provide a private (custom) image, and Compute Engine will use the corresponding image from your project. For example:
+          "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
+              #
+              # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+              #
+              # projects/debian-cloud/global/images/family/debian-8
+              #
+              # Alternatively, use a specific version of a public operating system image:
+              #
+              # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+              #
+              # To create a disk with a private image that you created, specify the image name in the following format:
               #
               # global/images/my-private-image
               #
-              # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
+              # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
               #
-              # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-              #
-              # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
+              # global/images/family/my-private-family
           "diskType": "A String", # Specifies the disk type to use to create the instance. If not specified, the default is pd-standard, specified using the full URL. For example:
               #
               # https://www.googleapis.com/compute/v1/projects/project/zones/zone/diskTypes/pd-standard
@@ -778,11 +802,11 @@
             "natIP": "A String", # An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.
           },
         ],
-        "networkIP": "A String", # [Output Only] An optional IPV4 internal network address assigned to the instance for this network interface.
+        "networkIP": "A String", # An IPv4 internal network address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.
         "name": "A String", # [Output Only] The name of the network interface, generated by the server. For network devices, these are eth0, eth1, etc.
         "subnetwork": "A String", # The URL of the Subnetwork resource for this instance. If the network resource is in legacy mode, do not provide this property. If the network is in auto subnet mode, providing the subnetwork is optional. If the network is in custom subnet mode, then this field should be specified. If you specify this property, you can specify the subnetwork as a full or partial URL. For example, the following are all valid URLs:
-            # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/subnetworks/subnetwork
-            # - zones/zone/subnetworks/subnetwork
+            # - https://www.googleapis.com/compute/v1/projects/project/regions/region/subnetworks/subnetwork
+            # - regions/region/subnetworks/subnetwork
         "network": "A String", # URL of the network resource for this instance. This is required for creating an instance but optional when creating a firewall rule. If not specified when creating a firewall rule, the default network is used:
             #
             # global/networks/default
@@ -846,7 +870,7 @@
   "canIpForward": True or False, # Allows this instance to send and receive packets with non-matching destination or source IPs. This is required if you plan to use this instance to forward routes. For more information, see Enabling IP Forwarding.
   "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
   "zone": "A String", # [Output Only] URL of the zone where the instance resides.
-  "tags": { # A set of instance tags. # A list of tags to appy to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.
+  "tags": { # A set of instance tags. # A list of tags to apply to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.
     "items": [ # An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.
       "A String",
     ],
@@ -867,15 +891,23 @@
           # This property is mutually exclusive with the source property; you can only define one or the other, but not both.
         "diskSizeGb": "A String", # Specifies the size of the disk in base-2 GB.
         "diskName": "A String", # Specifies the disk name. If not specified, the default is to use the name of the instance.
-        "sourceImage": "A String", # A source image used to create the disk. You can provide a private (custom) image, and Compute Engine will use the corresponding image from your project. For example:
+        "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
+            #
+            # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+            #
+            # projects/debian-cloud/global/images/family/debian-8
+            #
+            # Alternatively, use a specific version of a public operating system image:
+            #
+            # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+            #
+            # To create a disk with a private image that you created, specify the image name in the following format:
             #
             # global/images/my-private-image
             #
-            # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
+            # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
             #
-            # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-            #
-            # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
+            # global/images/family/my-private-family
         "diskType": "A String", # Specifies the disk type to use to create the instance. If not specified, the default is pd-standard, specified using the full URL. For example:
             #
             # https://www.googleapis.com/compute/v1/projects/project/zones/zone/diskTypes/pd-standard
@@ -933,11 +965,11 @@
           "natIP": "A String", # An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.
         },
       ],
-      "networkIP": "A String", # [Output Only] An optional IPV4 internal network address assigned to the instance for this network interface.
+      "networkIP": "A String", # An IPv4 internal network address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.
       "name": "A String", # [Output Only] The name of the network interface, generated by the server. For network devices, these are eth0, eth1, etc.
       "subnetwork": "A String", # The URL of the Subnetwork resource for this instance. If the network resource is in legacy mode, do not provide this property. If the network is in auto subnet mode, providing the subnetwork is optional. If the network is in custom subnet mode, then this field should be specified. If you specify this property, you can specify the subnetwork as a full or partial URL. For example, the following are all valid URLs:
-          # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/subnetworks/subnetwork
-          # - zones/zone/subnetworks/subnetwork
+          # - https://www.googleapis.com/compute/v1/projects/project/regions/region/subnetworks/subnetwork
+          # - regions/region/subnetworks/subnetwork
       "network": "A String", # URL of the network resource for this instance. This is required for creating an instance but optional when creating a firewall rule. If not specified when creating a firewall rule, the default network is used:
           #
           # global/networks/default
@@ -989,7 +1021,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -1004,7 +1036,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -1027,11 +1059,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -1046,7 +1078,7 @@
         "canIpForward": True or False, # Allows this instance to send and receive packets with non-matching destination or source IPs. This is required if you plan to use this instance to forward routes. For more information, see Enabling IP Forwarding.
         "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
         "zone": "A String", # [Output Only] URL of the zone where the instance resides.
-        "tags": { # A set of instance tags. # A list of tags to appy to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.
+        "tags": { # A set of instance tags. # A list of tags to apply to this instance. Tags are used to identify valid sources or targets for network firewalls and are specified by the client during instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035.
           "items": [ # An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.
             "A String",
           ],
@@ -1067,15 +1099,23 @@
                 # This property is mutually exclusive with the source property; you can only define one or the other, but not both.
               "diskSizeGb": "A String", # Specifies the size of the disk in base-2 GB.
               "diskName": "A String", # Specifies the disk name. If not specified, the default is to use the name of the instance.
-              "sourceImage": "A String", # A source image used to create the disk. You can provide a private (custom) image, and Compute Engine will use the corresponding image from your project. For example:
+              "sourceImage": "A String", # The source image used to create this disk. If the source image is deleted, this field will not be set.
+                  #
+                  # To create a disk with one of the public operating system images, specify the image by its family name. For example, specify family/debian-8 to use the latest Debian 8 image:
+                  #
+                  # projects/debian-cloud/global/images/family/debian-8
+                  #
+                  # Alternatively, use a specific version of a public operating system image:
+                  #
+                  # projects/debian-cloud/global/images/debian-8-jessie-vYYYYMMDD
+                  #
+                  # To create a disk with a private image that you created, specify the image name in the following format:
                   #
                   # global/images/my-private-image
                   #
-                  # Or you can provide an image from a publicly-available project. For example, to use a Debian image from the debian-cloud project, make sure to include the project in the URL:
+                  # You can also specify a private image by its image family, which returns the latest version of the image in that family. Replace the image name with family/family-name:
                   #
-                  # projects/debian-cloud/global/images/debian-7-wheezy-vYYYYMMDD
-                  #
-                  # where vYYYYMMDD is the image version. The fully-qualified URL will also work in both cases.
+                  # global/images/family/my-private-family
               "diskType": "A String", # Specifies the disk type to use to create the instance. If not specified, the default is pd-standard, specified using the full URL. For example:
                   #
                   # https://www.googleapis.com/compute/v1/projects/project/zones/zone/diskTypes/pd-standard
@@ -1133,11 +1173,11 @@
                 "natIP": "A String", # An external IP address associated with this instance. Specify an unused static external IP address available to the project or leave this field undefined to use an IP from a shared ephemeral IP address pool. If you specify a static external IP address, it must live in the same region as the zone of the instance.
               },
             ],
-            "networkIP": "A String", # [Output Only] An optional IPV4 internal network address assigned to the instance for this network interface.
+            "networkIP": "A String", # An IPv4 internal network address to assign to the instance for this network interface. If not specified by the user, an unused internal IP is assigned by the system.
             "name": "A String", # [Output Only] The name of the network interface, generated by the server. For network devices, these are eth0, eth1, etc.
             "subnetwork": "A String", # The URL of the Subnetwork resource for this instance. If the network resource is in legacy mode, do not provide this property. If the network is in auto subnet mode, providing the subnetwork is optional. If the network is in custom subnet mode, then this field should be specified. If you specify this property, you can specify the subnetwork as a full or partial URL. For example, the following are all valid URLs:
-                # - https://www.googleapis.com/compute/v1/projects/project/zones/zone/subnetworks/subnetwork
-                # - zones/zone/subnetworks/subnetwork
+                # - https://www.googleapis.com/compute/v1/projects/project/regions/region/subnetworks/subnetwork
+                # - regions/region/subnetworks/subnetwork
             "network": "A String", # URL of the network resource for this instance. This is required for creating an instance but optional when creating a firewall rule. If not specified when creating a firewall rule, the default network is used:
                 #
                 # global/networks/default
@@ -1217,7 +1257,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -1232,7 +1272,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -1278,7 +1318,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -1293,7 +1333,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -1344,7 +1384,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -1359,7 +1399,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -1417,7 +1457,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -1432,7 +1472,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -1485,7 +1525,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -1500,7 +1540,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -1556,7 +1596,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -1571,7 +1611,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -1615,7 +1655,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -1630,7 +1670,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -1674,7 +1714,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -1689,7 +1729,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.licenses.html b/docs/dyn/compute_v1.licenses.html
index 850310d..100497e 100644
--- a/docs/dyn/compute_v1.licenses.html
+++ b/docs/dyn/compute_v1.licenses.html
@@ -76,11 +76,11 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#get">get(project, license)</a></code></p>
-<p class="firstline">Returns the specified license resource.</p>
+<p class="firstline">Returns the specified License resource. Get a list of available licenses by making a list() request.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="get">get(project, license)</code>
-  <pre>Returns the specified license resource.
+  <pre>Returns the specified License resource. Get a list of available licenses by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
diff --git a/docs/dyn/compute_v1.machineTypes.html b/docs/dyn/compute_v1.machineTypes.html
index bcea9da..772239a 100644
--- a/docs/dyn/compute_v1.machineTypes.html
+++ b/docs/dyn/compute_v1.machineTypes.html
@@ -82,7 +82,7 @@
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, zone, machineType)</a></code></p>
-<p class="firstline">Returns the specified machine type.</p>
+<p class="firstline">Returns the specified machine type. Get a list of available machine types by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, zone, maxResults=None, pageToken=None, filter=None)</a></code></p>
 <p class="firstline">Retrieves a list of machine types available to the specified project.</p>
@@ -102,11 +102,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -150,7 +150,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -178,7 +178,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, zone, machineType)</code>
-  <pre>Returns the specified machine type.
+  <pre>Returns the specified machine type. Get a list of available machine types by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -229,11 +229,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/compute_v1.networks.html b/docs/dyn/compute_v1.networks.html
index 594ecc2..517077b 100644
--- a/docs/dyn/compute_v1.networks.html
+++ b/docs/dyn/compute_v1.networks.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified network.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, network)</a></code></p>
-<p class="firstline">Returns the specified network.</p>
+<p class="firstline">Returns the specified network. Get a list of available networks by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates a network in the specified project using the data included in the request.</p>
@@ -123,7 +123,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -138,7 +138,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -150,7 +150,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, network)</code>
-  <pre>Returns the specified network.
+  <pre>Returns the specified network. Get a list of available networks by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -229,7 +229,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -244,7 +244,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -266,11 +266,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/compute_v1.projects.html b/docs/dyn/compute_v1.projects.html
index 72ca157..e85b639 100644
--- a/docs/dyn/compute_v1.projects.html
+++ b/docs/dyn/compute_v1.projects.html
@@ -76,7 +76,7 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#get">get(project)</a></code></p>
-<p class="firstline">Returns the specified project resource.</p>
+<p class="firstline">Returns the specified Project resource.</p>
 <p class="toc_element">
   <code><a href="#moveDisk">moveDisk(project, body)</a></code></p>
 <p class="firstline">Moves a persistent disk from one zone to another.</p>
@@ -92,7 +92,7 @@
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="get">get(project)</code>
-  <pre>Returns the specified project resource.
+  <pre>Returns the specified Project resource.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -180,7 +180,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -195,7 +195,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -251,7 +251,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -266,7 +266,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -322,7 +322,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -337,7 +337,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -387,7 +387,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -402,7 +402,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.regionOperations.html b/docs/dyn/compute_v1.regionOperations.html
index 82e0ca9..2ed767a 100644
--- a/docs/dyn/compute_v1.regionOperations.html
+++ b/docs/dyn/compute_v1.regionOperations.html
@@ -132,7 +132,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -147,7 +147,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -170,11 +170,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -204,7 +204,7 @@
                 # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
               {
                 "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
               },
             ],
           },
@@ -219,7 +219,7 @@
             {
               "message": "A String", # [Output Only] An optional, human-readable error message.
               "code": "A String", # [Output Only] The error type identifier for this error.
-              "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+              "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
             },
           ],
         },
diff --git a/docs/dyn/compute_v1.regions.html b/docs/dyn/compute_v1.regions.html
index b1edebf..80a9b37 100644
--- a/docs/dyn/compute_v1.regions.html
+++ b/docs/dyn/compute_v1.regions.html
@@ -76,7 +76,7 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#get">get(project, region)</a></code></p>
-<p class="firstline">Returns the specified region resource.</p>
+<p class="firstline">Returns the specified Region resource. Get a list of available regions by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, maxResults=None, pageToken=None, filter=None)</a></code></p>
 <p class="firstline">Retrieves the list of region resources available to the specified project.</p>
@@ -86,7 +86,7 @@
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="get">get(project, region)</code>
-  <pre>Returns the specified region resource.
+  <pre>Returns the specified Region resource. Get a list of available regions by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -135,11 +135,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/compute_v1.routes.html b/docs/dyn/compute_v1.routes.html
index d58038b..669ed15 100644
--- a/docs/dyn/compute_v1.routes.html
+++ b/docs/dyn/compute_v1.routes.html
@@ -76,27 +76,27 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#delete">delete(project, route)</a></code></p>
-<p class="firstline">Deletes the specified route resource.</p>
+<p class="firstline">Deletes the specified Route resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, route)</a></code></p>
-<p class="firstline">Returns the specified route resource.</p>
+<p class="firstline">Returns the specified Route resource. Get a list of available routes by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
-<p class="firstline">Creates a route resource in the specified project using the data included in the request.</p>
+<p class="firstline">Creates a Route resource in the specified project using the data included in the request.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, maxResults=None, pageToken=None, filter=None)</a></code></p>
-<p class="firstline">Retrieves the list of route resources available to the specified project.</p>
+<p class="firstline">Retrieves the list of Route resources available to the specified project.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="delete">delete(project, route)</code>
-  <pre>Deletes the specified route resource.
+  <pre>Deletes the specified Route resource.
 
 Args:
   project: string, Project ID for this request. (required)
-  route: string, Name of the route resource to delete. (required)
+  route: string, Name of the Route resource to delete. (required)
 
 Returns:
   An object of the form:
@@ -123,7 +123,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -138,7 +138,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -150,24 +150,24 @@
 
 <div class="method">
     <code class="details" id="get">get(project, route)</code>
-  <pre>Returns the specified route resource.
+  <pre>Returns the specified Route resource. Get a list of available routes by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
-  route: string, Name of the route resource to return. (required)
+  route: string, Name of the Route resource to return. (required)
 
 Returns:
   An object of the form:
 
-    { # Represents a Routes resource. A route specifies how certain packets should be handled by the network. Routes are associated with instances by tags and the set of routes for a particular instance is called its routing table.
+    { # Represents a Route resource. A route specifies how certain packets should be handled by the network. Routes are associated with instances by tags and the set of routes for a particular instance is called its routing table.
         #
-        # For each packet leaving a instance, the system searches that instance's routing table for a single best matching route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching Routes. The packet is then forwarded as specified by the nextHop field of the winning route - either to another instance destination, a instance gateway or a Google Compute Engine-operated gateway.
+        # For each packet leaving a instance, the system searches that instance's routing table for a single best matching route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching routes. The packet is then forwarded as specified by the nextHop field of the winning route - either to another instance destination, a instance gateway or a Google Compute Engine-operated gateway.
         #
         # Packets that do not match any route in the sending instance's routing table are dropped.
       "nextHopGateway": "A String", # The URL to a gateway that should handle matching packets. You can only specify the internet gateway using a full or partial valid URL:  projects/<project-id>/global/gateways/default-internet-gateway
       "nextHopVpnTunnel": "A String", # The URL to a VpnTunnel that should handle matching packets.
       "kind": "compute#route", # [Output Only] Type of this resource. Always compute#routes for Route resources.
-      "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+      "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
       "tags": [ # A list of instance tags to which this route applies.
         "A String",
       ],
@@ -185,7 +185,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -200,22 +200,22 @@
 
 <div class="method">
     <code class="details" id="insert">insert(project, body)</code>
-  <pre>Creates a route resource in the specified project using the data included in the request.
+  <pre>Creates a Route resource in the specified project using the data included in the request.
 
 Args:
   project: string, Project ID for this request. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # Represents a Routes resource. A route specifies how certain packets should be handled by the network. Routes are associated with instances by tags and the set of routes for a particular instance is called its routing table.
+{ # Represents a Route resource. A route specifies how certain packets should be handled by the network. Routes are associated with instances by tags and the set of routes for a particular instance is called its routing table.
       # 
-      # For each packet leaving a instance, the system searches that instance's routing table for a single best matching route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching Routes. The packet is then forwarded as specified by the nextHop field of the winning route - either to another instance destination, a instance gateway or a Google Compute Engine-operated gateway.
+      # For each packet leaving a instance, the system searches that instance's routing table for a single best matching route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching routes. The packet is then forwarded as specified by the nextHop field of the winning route - either to another instance destination, a instance gateway or a Google Compute Engine-operated gateway.
       # 
       # Packets that do not match any route in the sending instance's routing table are dropped.
     "nextHopGateway": "A String", # The URL to a gateway that should handle matching packets. You can only specify the internet gateway using a full or partial valid URL:  projects/<project-id>/global/gateways/default-internet-gateway
     "nextHopVpnTunnel": "A String", # The URL to a VpnTunnel that should handle matching packets.
     "kind": "compute#route", # [Output Only] Type of this resource. Always compute#routes for Route resources.
-    "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
     "tags": [ # A list of instance tags to which this route applies.
       "A String",
     ],
@@ -233,7 +233,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -271,7 +271,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -286,7 +286,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -298,7 +298,7 @@
 
 <div class="method">
     <code class="details" id="list">list(project, maxResults=None, pageToken=None, filter=None)</code>
-  <pre>Retrieves the list of route resources available to the specified project.
+  <pre>Retrieves the list of Route resources available to the specified project.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -308,27 +308,27 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
 
-    { # Contains a list of route resources.
+    { # Contains a list of Route resources.
     "nextPageToken": "A String", # [Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.
     "items": [ # [Output Only] A list of Route resources.
-      { # Represents a Routes resource. A route specifies how certain packets should be handled by the network. Routes are associated with instances by tags and the set of routes for a particular instance is called its routing table.
+      { # Represents a Route resource. A route specifies how certain packets should be handled by the network. Routes are associated with instances by tags and the set of routes for a particular instance is called its routing table.
             #
-            # For each packet leaving a instance, the system searches that instance's routing table for a single best matching route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching Routes. The packet is then forwarded as specified by the nextHop field of the winning route - either to another instance destination, a instance gateway or a Google Compute Engine-operated gateway.
+            # For each packet leaving a instance, the system searches that instance's routing table for a single best matching route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching routes. The packet is then forwarded as specified by the nextHop field of the winning route - either to another instance destination, a instance gateway or a Google Compute Engine-operated gateway.
             #
             # Packets that do not match any route in the sending instance's routing table are dropped.
           "nextHopGateway": "A String", # The URL to a gateway that should handle matching packets. You can only specify the internet gateway using a full or partial valid URL:  projects/<project-id>/global/gateways/default-internet-gateway
           "nextHopVpnTunnel": "A String", # The URL to a VpnTunnel that should handle matching packets.
           "kind": "compute#route", # [Output Only] Type of this resource. Always compute#routes for Route resources.
-          "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+          "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
           "tags": [ # A list of instance tags to which this route applies.
             "A String",
           ],
@@ -346,7 +346,7 @@
                   # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
                 {
                   "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                  "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                  "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
                 },
               ],
             },
diff --git a/docs/dyn/compute_v1.snapshots.html b/docs/dyn/compute_v1.snapshots.html
index b080048..15c15e6 100644
--- a/docs/dyn/compute_v1.snapshots.html
+++ b/docs/dyn/compute_v1.snapshots.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified Snapshot resource. Keep in mind that deleting a single snapshot might not necessarily delete all the data on that snapshot. If any data on the snapshot that is marked for deletion is needed for subsequent snapshots, the data will be moved to the next corresponding snapshot.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, snapshot)</a></code></p>
-<p class="firstline">Returns the specified Snapshot resource.</p>
+<p class="firstline">Returns the specified Snapshot resource. Get a list of available snapshots by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, maxResults=None, pageToken=None, filter=None)</a></code></p>
 <p class="firstline">Retrieves the list of Snapshot resources contained within the specified project.</p>
@@ -122,7 +122,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -137,7 +137,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -149,7 +149,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, snapshot)</code>
-  <pre>Returns the specified Snapshot resource.
+  <pre>Returns the specified Snapshot resource. Get a list of available snapshots by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -189,11 +189,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/compute_v1.sslCertificates.html b/docs/dyn/compute_v1.sslCertificates.html
index 8820895..265dc23 100644
--- a/docs/dyn/compute_v1.sslCertificates.html
+++ b/docs/dyn/compute_v1.sslCertificates.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified SslCertificate resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, sslCertificate)</a></code></p>
-<p class="firstline">Returns the specified SslCertificate resource.</p>
+<p class="firstline">Returns the specified SslCertificate resource. Get a list of available SSL certificates by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates a SslCertificate resource in the specified project using the data included in the request.</p>
@@ -123,7 +123,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -138,7 +138,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -150,7 +150,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, sslCertificate)</code>
-  <pre>Returns the specified SslCertificate resource.
+  <pre>Returns the specified SslCertificate resource. Get a list of available SSL certificates by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -217,7 +217,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -232,7 +232,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -254,11 +254,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/compute_v1.subnetworks.html b/docs/dyn/compute_v1.subnetworks.html
index 429ccd6..a9f29eb 100644
--- a/docs/dyn/compute_v1.subnetworks.html
+++ b/docs/dyn/compute_v1.subnetworks.html
@@ -85,7 +85,7 @@
 <p class="firstline">Deletes the specified subnetwork.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, region, subnetwork)</a></code></p>
-<p class="firstline">Returns the specified subnetwork.</p>
+<p class="firstline">Returns the specified subnetwork. Get a list of available subnetworks list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, region, body)</a></code></p>
 <p class="firstline">Creates a subnetwork in the specified project using the data included in the request.</p>
@@ -108,11 +108,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -126,7 +126,7 @@
               "kind": "compute#subnetwork", # [Output Only] Type of the resource. Always compute#subnetwork for Subnetwork resources.
               "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
               "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-              "region": "A String", # [Output Only] URL of the region where the Subnetwork resides.
+              "region": "A String", # URL of the region where the Subnetwork resides.
               "network": "A String", # The URL of the network to which this subnetwork belongs, provided by the client when initially creating the subnetwork. Only networks that are in the distributed mode can have subnetworks.
               "ipCidrRange": "A String", # The range of internal addresses that are owned by this subnetwork. Provide this property when you create the subnetwork. For example, 10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network.
               "gatewayAddress": "A String", # [Output Only] The gateway address for default routes to reach destination addresses outside this subnetwork.
@@ -142,7 +142,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -202,7 +202,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -217,7 +217,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -229,7 +229,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, region, subnetwork)</code>
-  <pre>Returns the specified subnetwork.
+  <pre>Returns the specified subnetwork. Get a list of available subnetworks list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -243,7 +243,7 @@
       "kind": "compute#subnetwork", # [Output Only] Type of the resource. Always compute#subnetwork for Subnetwork resources.
       "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-      "region": "A String", # [Output Only] URL of the region where the Subnetwork resides.
+      "region": "A String", # URL of the region where the Subnetwork resides.
       "network": "A String", # The URL of the network to which this subnetwork belongs, provided by the client when initially creating the subnetwork. Only networks that are in the distributed mode can have subnetworks.
       "ipCidrRange": "A String", # The range of internal addresses that are owned by this subnetwork. Provide this property when you create the subnetwork. For example, 10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network.
       "gatewayAddress": "A String", # [Output Only] The gateway address for default routes to reach destination addresses outside this subnetwork.
@@ -267,7 +267,7 @@
     "kind": "compute#subnetwork", # [Output Only] Type of the resource. Always compute#subnetwork for Subnetwork resources.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-    "region": "A String", # [Output Only] URL of the region where the Subnetwork resides.
+    "region": "A String", # URL of the region where the Subnetwork resides.
     "network": "A String", # The URL of the network to which this subnetwork belongs, provided by the client when initially creating the subnetwork. Only networks that are in the distributed mode can have subnetworks.
     "ipCidrRange": "A String", # The range of internal addresses that are owned by this subnetwork. Provide this property when you create the subnetwork. For example, 10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network.
     "gatewayAddress": "A String", # [Output Only] The gateway address for default routes to reach destination addresses outside this subnetwork.
@@ -302,7 +302,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -317,7 +317,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -340,11 +340,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -356,7 +356,7 @@
           "kind": "compute#subnetwork", # [Output Only] Type of the resource. Always compute#subnetwork for Subnetwork resources.
           "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
-          "region": "A String", # [Output Only] URL of the region where the Subnetwork resides.
+          "region": "A String", # URL of the region where the Subnetwork resides.
           "network": "A String", # The URL of the network to which this subnetwork belongs, provided by the client when initially creating the subnetwork. Only networks that are in the distributed mode can have subnetworks.
           "ipCidrRange": "A String", # The range of internal addresses that are owned by this subnetwork. Provide this property when you create the subnetwork. For example, 10.0.0.0/8 or 192.168.0.0/16. Ranges must be unique and non-overlapping within a network.
           "gatewayAddress": "A String", # [Output Only] The gateway address for default routes to reach destination addresses outside this subnetwork.
diff --git a/docs/dyn/compute_v1.targetHttpProxies.html b/docs/dyn/compute_v1.targetHttpProxies.html
index e517791..80b1beb 100644
--- a/docs/dyn/compute_v1.targetHttpProxies.html
+++ b/docs/dyn/compute_v1.targetHttpProxies.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified TargetHttpProxy resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, targetHttpProxy)</a></code></p>
-<p class="firstline">Returns the specified TargetHttpProxy resource.</p>
+<p class="firstline">Returns the specified TargetHttpProxy resource. Get a list of available target HTTP proxies by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates a TargetHttpProxy resource in the specified project using the data included in the request.</p>
@@ -126,7 +126,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -141,7 +141,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -153,7 +153,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, targetHttpProxy)</code>
-  <pre>Returns the specified TargetHttpProxy resource.
+  <pre>Returns the specified TargetHttpProxy resource. Get a list of available target HTTP proxies by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -169,7 +169,7 @@
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
       "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
       "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-      "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+      "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
     }</pre>
 </div>
 
@@ -189,7 +189,7 @@
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
 
@@ -218,7 +218,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -233,7 +233,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -255,11 +255,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -274,7 +274,7 @@
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
           "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
           "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-          "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+          "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
         },
     ],
     "kind": "compute#targetHttpProxyList", # Type of resource. Always compute#targetHttpProxyList for lists of target HTTP proxies.
@@ -303,7 +303,7 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  targetHttpProxy: string, The name of the TargetHttpProxy resource to set a URL map for. (required)
+  targetHttpProxy: string, Name of the TargetHttpProxy to set a URL map for. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
@@ -337,7 +337,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -352,7 +352,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.targetHttpsProxies.html b/docs/dyn/compute_v1.targetHttpsProxies.html
index 69fd4c8..c811c28 100644
--- a/docs/dyn/compute_v1.targetHttpsProxies.html
+++ b/docs/dyn/compute_v1.targetHttpsProxies.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified TargetHttpsProxy resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, targetHttpsProxy)</a></code></p>
-<p class="firstline">Returns the specified TargetHttpsProxy resource.</p>
+<p class="firstline">Returns the specified TargetHttpsProxy resource. Get a list of available target HTTPS proxies by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates a TargetHttpsProxy resource in the specified project using the data included in the request.</p>
@@ -129,7 +129,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -144,7 +144,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -156,7 +156,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, targetHttpsProxy)</code>
-  <pre>Returns the specified TargetHttpsProxy resource.
+  <pre>Returns the specified TargetHttpsProxy resource. Get a list of available target HTTPS proxies by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -166,7 +166,7 @@
   An object of the form:
 
     { # A TargetHttpsProxy resource. This resource defines an HTTPS proxy.
-      "kind": "compute#targetHttpsProxy", # [Output Only] Type of the resource. Always compute#targetHttpsProxy for target HTTPS proxies.
+      "kind": "compute#targetHttpsProxy", # [Output Only] Type of resource. Always compute#targetHttpsProxy for target HTTPS proxies.
       "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
       "sslCertificates": [ # URLs to SslCertificate resources that are used to authenticate connections between users and the load balancer. Currently, exactly one SSL certificate must be specified.
         "A String",
@@ -192,7 +192,7 @@
     The object takes the form of:
 
 { # A TargetHttpsProxy resource. This resource defines an HTTPS proxy.
-    "kind": "compute#targetHttpsProxy", # [Output Only] Type of the resource. Always compute#targetHttpsProxy for target HTTPS proxies.
+    "kind": "compute#targetHttpsProxy", # [Output Only] Type of resource. Always compute#targetHttpsProxy for target HTTPS proxies.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "sslCertificates": [ # URLs to SslCertificate resources that are used to authenticate connections between users and the load balancer. Currently, exactly one SSL certificate must be specified.
       "A String",
@@ -233,7 +233,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -248,7 +248,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -270,11 +270,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -283,7 +283,7 @@
     "nextPageToken": "A String", # [Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.
     "items": [ # A list of TargetHttpsProxy resources.
       { # A TargetHttpsProxy resource. This resource defines an HTTPS proxy.
-          "kind": "compute#targetHttpsProxy", # [Output Only] Type of the resource. Always compute#targetHttpsProxy for target HTTPS proxies.
+          "kind": "compute#targetHttpsProxy", # [Output Only] Type of resource. Always compute#targetHttpsProxy for target HTTPS proxies.
           "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
           "sslCertificates": [ # URLs to SslCertificate resources that are used to authenticate connections between users and the load balancer. Currently, exactly one SSL certificate must be specified.
             "A String",
@@ -298,7 +298,7 @@
           "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
         },
     ],
-    "kind": "compute#targetHttpsProxyList", # Type of resource.
+    "kind": "compute#targetHttpsProxyList", # Type of resource. Always compute#targetHttpsProxyList for lists of target HTTPS proxies.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for this resource.
   }</pre>
@@ -324,12 +324,12 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  targetHttpsProxy: string, Name of the TargetHttpsProxy resource to set an SSL certificate for. (required)
+  targetHttpsProxy: string, Name of the TargetHttpsProxy resource to set an SslCertificates resource for. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
 {
-    "sslCertificates": [ # New set of URLs to SslCertificate resources to associate with this TargetHttpProxy. Currently exactly one SSL certificate must be specified.
+    "sslCertificates": [ # New set of SslCertificate resources to associate with this TargetHttpsProxy resource. Currently exactly one SslCertificate resource must be specified.
       "A String",
     ],
   }
@@ -360,7 +360,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -375,7 +375,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -425,7 +425,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -440,7 +440,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.targetInstances.html b/docs/dyn/compute_v1.targetInstances.html
index 9720c48..c9e8c52 100644
--- a/docs/dyn/compute_v1.targetInstances.html
+++ b/docs/dyn/compute_v1.targetInstances.html
@@ -85,7 +85,7 @@
 <p class="firstline">Deletes the specified TargetInstance resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, zone, targetInstance)</a></code></p>
-<p class="firstline">Returns the specified TargetInstance resource.</p>
+<p class="firstline">Returns the specified TargetInstance resource. Get a list of available target instances by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, zone, body)</a></code></p>
 <p class="firstline">Creates a TargetInstance resource in the specified project and zone using the data included in the request.</p>
@@ -108,11 +108,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -144,7 +144,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -204,7 +204,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -219,7 +219,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -231,7 +231,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, zone, targetInstance)</code>
-  <pre>Returns the specified TargetInstance resource.
+  <pre>Returns the specified TargetInstance resource. Get a list of available target instances by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -308,7 +308,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -323,7 +323,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -346,11 +346,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/compute_v1.targetPools.html b/docs/dyn/compute_v1.targetPools.html
index 7839108..14fcdfd 100644
--- a/docs/dyn/compute_v1.targetPools.html
+++ b/docs/dyn/compute_v1.targetPools.html
@@ -91,7 +91,7 @@
 <p class="firstline">Deletes the specified target pool.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, region, targetPool)</a></code></p>
-<p class="firstline">Returns the specified target pool.</p>
+<p class="firstline">Returns the specified target pool. Get a list of available target pools by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#getHealth">getHealth(project, region, targetPool, body)</a></code></p>
 <p class="firstline">Gets the most recent health check results for each IP for the instance that is referenced by the given target pool.</p>
@@ -162,7 +162,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -177,7 +177,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -235,7 +235,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -250,7 +250,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -272,11 +272,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -292,7 +292,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -383,7 +383,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -398,7 +398,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -410,7 +410,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, region, targetPool)</code>
-  <pre>Returns the specified target pool.
+  <pre>Returns the specified target pool. Get a list of available target pools by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -549,7 +549,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -564,7 +564,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -587,11 +587,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -700,7 +700,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -715,7 +715,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -770,7 +770,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -785,7 +785,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -837,7 +837,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -852,7 +852,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/compute_v1.targetVpnGateways.html b/docs/dyn/compute_v1.targetVpnGateways.html
index e2414b0..603fdcc 100644
--- a/docs/dyn/compute_v1.targetVpnGateways.html
+++ b/docs/dyn/compute_v1.targetVpnGateways.html
@@ -85,7 +85,7 @@
 <p class="firstline">Deletes the specified target VPN gateway.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, region, targetVpnGateway)</a></code></p>
-<p class="firstline">Returns the specified target VPN gateway.</p>
+<p class="firstline">Returns the specified target VPN gateway. Get a list of available target VPN gateways by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, region, body)</a></code></p>
 <p class="firstline">Creates a target VPN gateway in the specified project and region using the data included in the request.</p>
@@ -108,11 +108,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -137,7 +137,7 @@
               "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
               "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
               "network": "A String", # URL of the network to which this VPN gateway is attached. Provided by the client when the VPN gateway is created.
-              "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+              "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
             },
         ],
         "warning": { # [Output Only] Informational warning which replaces the list of addresses when the list is empty.
@@ -147,7 +147,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -179,7 +179,7 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   targetVpnGateway: string, Name of the target VPN gateway to delete. (required)
 
 Returns:
@@ -207,7 +207,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -222,7 +222,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -234,11 +234,11 @@
 
 <div class="method">
     <code class="details" id="get">get(project, region, targetVpnGateway)</code>
-  <pre>Returns the specified target VPN gateway.
+  <pre>Returns the specified target VPN gateway. Get a list of available target VPN gateways by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   targetVpnGateway: string, Name of the target VPN gateway to return. (required)
 
 Returns:
@@ -259,7 +259,7 @@
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
       "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
       "network": "A String", # URL of the network to which this VPN gateway is attached. Provided by the client when the VPN gateway is created.
-      "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+      "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
     }</pre>
 </div>
 
@@ -269,7 +269,7 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
@@ -288,7 +288,7 @@
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "network": "A String", # URL of the network to which this VPN gateway is attached. Provided by the client when the VPN gateway is created.
-    "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
 
@@ -317,7 +317,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -332,7 +332,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -348,18 +348,18 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
   pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
   filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -382,7 +382,7 @@
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
           "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
           "network": "A String", # URL of the network to which this VPN gateway is attached. Provided by the client when the VPN gateway is created.
-          "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+          "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
         },
     ],
     "kind": "compute#targetVpnGatewayList", # [Output Only] Type of resource. Always compute#targetVpnGateway for target VPN gateways.
diff --git a/docs/dyn/compute_v1.urlMaps.html b/docs/dyn/compute_v1.urlMaps.html
index 4e67887..d1e664f 100644
--- a/docs/dyn/compute_v1.urlMaps.html
+++ b/docs/dyn/compute_v1.urlMaps.html
@@ -79,7 +79,7 @@
 <p class="firstline">Deletes the specified UrlMap resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, urlMap)</a></code></p>
-<p class="firstline">Returns the specified UrlMap resource.</p>
+<p class="firstline">Returns the specified UrlMap resource. Get a list of available URL maps by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, body)</a></code></p>
 <p class="firstline">Creates a UrlMap resource in the specified project using the data included in the request.</p>
@@ -132,7 +132,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -147,7 +147,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -159,7 +159,7 @@
 
 <div class="method">
     <code class="details" id="get">get(project, urlMap)</code>
-  <pre>Returns the specified UrlMap resource.
+  <pre>Returns the specified UrlMap resource. Get a list of available URL maps by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -172,7 +172,7 @@
       "kind": "compute#urlMap", # [Output Only] Type of the resource. Always compute#urlMaps for url maps.
       "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
       "defaultService": "A String", # The URL of the BackendService resource if none of the hostRules match.
-      "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only all of the test cases pass.
+      "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only if all of the test cases pass.
         { # Message for the expected URL mappings.
           "path": "A String", # Path portion of the URL.
           "host": "A String", # Host portion of the URL.
@@ -228,7 +228,7 @@
     "kind": "compute#urlMap", # [Output Only] Type of the resource. Always compute#urlMaps for url maps.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "defaultService": "A String", # The URL of the BackendService resource if none of the hostRules match.
-    "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only all of the test cases pass.
+    "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only if all of the test cases pass.
       { # Message for the expected URL mappings.
         "path": "A String", # Path portion of the URL.
         "host": "A String", # Host portion of the URL.
@@ -296,7 +296,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -311,7 +311,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -333,11 +333,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -349,7 +349,7 @@
           "kind": "compute#urlMap", # [Output Only] Type of the resource. Always compute#urlMaps for url maps.
           "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
           "defaultService": "A String", # The URL of the BackendService resource if none of the hostRules match.
-          "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only all of the test cases pass.
+          "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only if all of the test cases pass.
             { # Message for the expected URL mappings.
               "path": "A String", # Path portion of the URL.
               "host": "A String", # Host portion of the URL.
@@ -425,7 +425,7 @@
     "kind": "compute#urlMap", # [Output Only] Type of the resource. Always compute#urlMaps for url maps.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "defaultService": "A String", # The URL of the BackendService resource if none of the hostRules match.
-    "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only all of the test cases pass.
+    "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only if all of the test cases pass.
       { # Message for the expected URL mappings.
         "path": "A String", # Path portion of the URL.
         "host": "A String", # Host portion of the URL.
@@ -493,7 +493,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -508,7 +508,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -532,7 +532,7 @@
     "kind": "compute#urlMap", # [Output Only] Type of the resource. Always compute#urlMaps for url maps.
     "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
     "defaultService": "A String", # The URL of the BackendService resource if none of the hostRules match.
-    "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only all of the test cases pass.
+    "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only if all of the test cases pass.
       { # Message for the expected URL mappings.
         "path": "A String", # Path portion of the URL.
         "host": "A String", # Host portion of the URL.
@@ -600,7 +600,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -615,7 +615,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -640,7 +640,7 @@
         "kind": "compute#urlMap", # [Output Only] Type of the resource. Always compute#urlMaps for url maps.
         "description": "A String", # An optional description of this resource. Provide this property when you create the resource.
         "defaultService": "A String", # The URL of the BackendService resource if none of the hostRules match.
-        "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only all of the test cases pass.
+        "tests": [ # The list of expected URL mappings. Request to update this UrlMap will succeed only if all of the test cases pass.
           { # Message for the expected URL mappings.
             "path": "A String", # Path portion of the URL.
             "host": "A String", # Host portion of the URL.
diff --git a/docs/dyn/compute_v1.vpnTunnels.html b/docs/dyn/compute_v1.vpnTunnels.html
index fa129e8..6ec4e17 100644
--- a/docs/dyn/compute_v1.vpnTunnels.html
+++ b/docs/dyn/compute_v1.vpnTunnels.html
@@ -85,7 +85,7 @@
 <p class="firstline">Deletes the specified VpnTunnel resource.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, region, vpnTunnel)</a></code></p>
-<p class="firstline">Returns the specified VpnTunnel resource.</p>
+<p class="firstline">Returns the specified VpnTunnel resource. Get a list of available VPN tunnels by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#insert">insert(project, region, body)</a></code></p>
 <p class="firstline">Creates a VpnTunnel resource in the specified project and region using the data included in the request.</p>
@@ -108,11 +108,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -134,12 +134,12 @@
               ],
               "status": "A String", # [Output Only] The status of the VPN tunnel.
               "sharedSecretHash": "A String", # Hash of the shared secret.
-              "targetVpnGateway": "A String", # URL of the VPN gateway to which this VPN tunnel is associated. Provided by the client when the VPN tunnel is created.
+              "targetVpnGateway": "A String", # URL of the VPN gateway with which this VPN tunnel is associated. Provided by the client when the VPN tunnel is created.
               "sharedSecret": "A String", # Shared secret used to set the secure session between the Cloud VPN gateway and the peer VPN gateway.
               "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
               "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
               "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-              "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+              "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
             },
         ],
         "warning": { # Informational warning which replaces the list of addresses when the list is empty.
@@ -149,7 +149,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -181,7 +181,7 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   vpnTunnel: string, Name of the VpnTunnel resource to delete. (required)
 
 Returns:
@@ -209,7 +209,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -224,7 +224,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -236,11 +236,11 @@
 
 <div class="method">
     <code class="details" id="get">get(project, region, vpnTunnel)</code>
-  <pre>Returns the specified VpnTunnel resource.
+  <pre>Returns the specified VpnTunnel resource. Get a list of available VPN tunnels by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   vpnTunnel: string, Name of the VpnTunnel resource to return. (required)
 
 Returns:
@@ -258,12 +258,12 @@
       ],
       "status": "A String", # [Output Only] The status of the VPN tunnel.
       "sharedSecretHash": "A String", # Hash of the shared secret.
-      "targetVpnGateway": "A String", # URL of the VPN gateway to which this VPN tunnel is associated. Provided by the client when the VPN tunnel is created.
+      "targetVpnGateway": "A String", # URL of the VPN gateway with which this VPN tunnel is associated. Provided by the client when the VPN tunnel is created.
       "sharedSecret": "A String", # Shared secret used to set the secure session between the Cloud VPN gateway and the peer VPN gateway.
       "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
       "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
       "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-      "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+      "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
     }</pre>
 </div>
 
@@ -273,7 +273,7 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
@@ -289,12 +289,12 @@
     ],
     "status": "A String", # [Output Only] The status of the VPN tunnel.
     "sharedSecretHash": "A String", # Hash of the shared secret.
-    "targetVpnGateway": "A String", # URL of the VPN gateway to which this VPN tunnel is associated. Provided by the client when the VPN tunnel is created.
+    "targetVpnGateway": "A String", # URL of the VPN gateway with which this VPN tunnel is associated. Provided by the client when the VPN tunnel is created.
     "sharedSecret": "A String", # Shared secret used to set the secure session between the Cloud VPN gateway and the peer VPN gateway.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+    "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
 
@@ -323,7 +323,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -338,7 +338,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -354,18 +354,18 @@
 
 Args:
   project: string, Project ID for this request. (required)
-  region: string, The name of the region for this request. (required)
+  region: string, Name of the region for this request. (required)
   maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
   pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
   filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -385,12 +385,12 @@
           ],
           "status": "A String", # [Output Only] The status of the VPN tunnel.
           "sharedSecretHash": "A String", # Hash of the shared secret.
-          "targetVpnGateway": "A String", # URL of the VPN gateway to which this VPN tunnel is associated. Provided by the client when the VPN tunnel is created.
+          "targetVpnGateway": "A String", # URL of the VPN gateway with which this VPN tunnel is associated. Provided by the client when the VPN tunnel is created.
           "sharedSecret": "A String", # Shared secret used to set the secure session between the Cloud VPN gateway and the peer VPN gateway.
           "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
           "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
           "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-          "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
+          "name": "A String", # Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
         },
     ],
     "kind": "compute#vpnTunnelList", # [Output Only] Type of resource. Always compute#vpnTunnel for VPN tunnels.
diff --git a/docs/dyn/compute_v1.zoneOperations.html b/docs/dyn/compute_v1.zoneOperations.html
index 9629730..4696231 100644
--- a/docs/dyn/compute_v1.zoneOperations.html
+++ b/docs/dyn/compute_v1.zoneOperations.html
@@ -132,7 +132,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -147,7 +147,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -170,11 +170,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -204,7 +204,7 @@
                 # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
               {
                 "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
               },
             ],
           },
@@ -219,7 +219,7 @@
             {
               "message": "A String", # [Output Only] An optional, human-readable error message.
               "code": "A String", # [Output Only] The error type identifier for this error.
-              "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+              "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
             },
           ],
         },
diff --git a/docs/dyn/compute_v1.zones.html b/docs/dyn/compute_v1.zones.html
index 3c1ed9a..eea5ecc 100644
--- a/docs/dyn/compute_v1.zones.html
+++ b/docs/dyn/compute_v1.zones.html
@@ -76,17 +76,17 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#get">get(project, zone)</a></code></p>
-<p class="firstline">Returns the specified zone resource.</p>
+<p class="firstline">Returns the specified Zone resource. Get a list of available zones by making a list() request.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, maxResults=None, pageToken=None, filter=None)</a></code></p>
-<p class="firstline">Retrieves the list of zone resources available to the specified project.</p>
+<p class="firstline">Retrieves the list of Zone resources available to the specified project.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="get">get(project, zone)</code>
-  <pre>Returns the specified zone resource.
+  <pre>Returns the specified Zone resource. Get a list of available zones by making a list() request.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -99,14 +99,6 @@
     "status": "A String", # [Output Only] Status of the zone, either UP or DOWN.
     "kind": "compute#zone", # [Output Only] Type of the resource. Always compute#zone for zones.
     "description": "A String", # [Output Only] Textual description of the resource.
-    "maintenanceWindows": [ # [Output Only] Any scheduled maintenance windows for this zone. When the zone is in a maintenance window, all resources which reside in the zone will be unavailable. For more information, see Maintenance Windows
-      {
-        "endTime": "A String", # [Output Only] Ending time of the maintenance window, in RFC3339 format.
-        "beginTime": "A String", # [Output Only] Starting time of the maintenance window, in RFC3339 format.
-        "name": "A String", # [Output Only] Name of the maintenance window.
-        "description": "A String", # [Output Only] Textual description of the maintenance window.
-      },
-    ],
     "deprecated": { # Deprecation status for a public resource. # [Output Only] The deprecation status associated with this zone.
       "deleted": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED.
       "deprecated": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED.
@@ -124,7 +116,7 @@
 
 <div class="method">
     <code class="details" id="list">list(project, maxResults=None, pageToken=None, filter=None)</code>
-  <pre>Retrieves the list of zone resources available to the specified project.
+  <pre>Retrieves the list of Zone resources available to the specified project.
 
 Args:
   project: string, Project ID for this request. (required)
@@ -134,11 +126,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -150,14 +142,6 @@
         "status": "A String", # [Output Only] Status of the zone, either UP or DOWN.
         "kind": "compute#zone", # [Output Only] Type of the resource. Always compute#zone for zones.
         "description": "A String", # [Output Only] Textual description of the resource.
-        "maintenanceWindows": [ # [Output Only] Any scheduled maintenance windows for this zone. When the zone is in a maintenance window, all resources which reside in the zone will be unavailable. For more information, see Maintenance Windows
-          {
-            "endTime": "A String", # [Output Only] Ending time of the maintenance window, in RFC3339 format.
-            "beginTime": "A String", # [Output Only] Starting time of the maintenance window, in RFC3339 format.
-            "name": "A String", # [Output Only] Name of the maintenance window.
-            "description": "A String", # [Output Only] Textual description of the maintenance window.
-          },
-        ],
         "deprecated": { # Deprecation status for a public resource. # [Output Only] The deprecation status associated with this zone.
           "deleted": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED.
           "deprecated": "A String", # An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED.
diff --git a/docs/dyn/consumersurveys_v2.html b/docs/dyn/consumersurveys_v2.html
new file mode 100644
index 0000000..8da9c3e
--- /dev/null
+++ b/docs/dyn/consumersurveys_v2.html
@@ -0,0 +1,108 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="consumersurveys_v2.html">Consumer Surveys API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="consumersurveys_v2.results.html">results()</a></code>
+</p>
+<p class="firstline">Returns the results Resource.</p>
+
+<p class="toc_element">
+  <code><a href="consumersurveys_v2.surveys.html">surveys()</a></code>
+</p>
+<p class="firstline">Returns the surveys Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/consumersurveys_v2.results.html b/docs/dyn/consumersurveys_v2.results.html
new file mode 100644
index 0000000..6557b08
--- /dev/null
+++ b/docs/dyn/consumersurveys_v2.results.html
@@ -0,0 +1,113 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="consumersurveys_v2.html">Consumer Surveys API</a> . <a href="consumersurveys_v2.results.html">results</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(surveyUrlId)</a></code></p>
+<p class="firstline">Retrieves any survey results that have been produced so far. Results are formatted as an Excel file.</p>
+<p class="toc_element">
+  <code><a href="#get_media">get_media(surveyUrlId)</a></code></p>
+<p class="firstline">Retrieves any survey results that have been produced so far. Results are formatted as an Excel file.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(surveyUrlId)</code>
+  <pre>Retrieves any survey results that have been produced so far. Results are formatted as an Excel file.
+
+Args:
+  surveyUrlId: string, External URL ID for the survey. (required)
+
+Returns:
+  An object of the form:
+
+    { # Reference to the current results for a given survey.
+    "status": "A String", # Human readable string describing the status of the request.
+    "surveyUrlId": "A String", # External survey ID as viewable by survey owners in the editor view.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get_media">get_media(surveyUrlId)</code>
+  <pre>Retrieves any survey results that have been produced so far. Results are formatted as an Excel file.
+
+Args:
+  surveyUrlId: string, External URL ID for the survey. (required)
+
+Returns:
+  The media object as a string.
+
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/consumersurveys_v2.surveys.html b/docs/dyn/consumersurveys_v2.surveys.html
new file mode 100644
index 0000000..a529380
--- /dev/null
+++ b/docs/dyn/consumersurveys_v2.surveys.html
@@ -0,0 +1,716 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="consumersurveys_v2.html">Consumer Surveys API</a> . <a href="consumersurveys_v2.surveys.html">surveys</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(surveyUrlId)</a></code></p>
+<p class="firstline">Retrieves information about the specified survey.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(body)</a></code></p>
+<p class="firstline">Creates a survey.</p>
+<p class="toc_element">
+  <code><a href="#list">list(startIndex=None, maxResults=None, token=None)</a></code></p>
+<p class="firstline">Lists the surveys owned by the authenticated user.</p>
+<p class="toc_element">
+  <code><a href="#start">start(resourceId, body)</a></code></p>
+<p class="firstline">Begins running a survey.</p>
+<p class="toc_element">
+  <code><a href="#stop">stop(resourceId)</a></code></p>
+<p class="firstline">Stops a running survey.</p>
+<p class="toc_element">
+  <code><a href="#update">update(surveyUrlId, body)</a></code></p>
+<p class="firstline">Updates a survey. Currently the only property that can be updated is the owners property.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(surveyUrlId)</code>
+  <pre>Retrieves information about the specified survey.
+
+Args:
+  surveyUrlId: string, External URL ID for the survey. (required)
+
+Returns:
+  An object of the form:
+
+    { # Representation of an individual survey object.
+      "owners": [ # List of email addresses for survey owners. Must contain at least the address of the user making the API call.
+        "A String",
+      ],
+      "description": "A String", # Text description of the survey.
+      "title": "A String", # Optional name that will be given to the survey.
+      "customerData": "A String", # Additional information to store on behalf of the API consumer and associate with this question. This binary blob is treated as opaque. This field is limited to 64K bytes.
+      "state": "A String", # State that the survey is in. Can be modified to start, stop, or pause survey.
+      "audience": { # Specifications for the target audience of a survey run through the API. # Targeting-criteria message containing demographic information
+        "countrySubdivision": "A String", # Country subdivision (states/provinces/etc) that surveys should be targeted to. For all countries except GB, ISO-3166-2 subdivision code is required (eg. 'US-OH' for Ohio, United States). For GB, NUTS 1 statistical region codes for the United Kingdom is required (eg. 'UK-UKC' for North East England).
+        "mobileAppPanelId": "A String", # Key for predefined panel that causes survey to be sent to a predefined set of Opinion Rewards App users. PopulationSource must be set to ANDROID_APP_PANEL to use this field.
+        "country": "A String", # Required country code that surveys should be targeted to. Accepts standard ISO 3166-1 2 character language codes. For instance, 'US' for the United States, and 'GB' for the United Kingdom.
+        "ages": [ # Optional list of age buckets to target. Supported age buckets are: ['18-24', '25-34', '35-44', '45-54', '55-64', '65+']
+          "A String",
+        ],
+        "populationSource": "A String", # Online population source where the respondents are sampled from.
+        "languages": [ # Language code that surveys should be targeted to. For instance, 'en-US'. Surveys may target bilingual users by specifying a list of language codes (for example, 'de' and 'en-US'). In that case, all languages will be used for targeting users but the survey content (which is displayed) must match the first language listed. Accepts standard BCP47 language codes. See specification.
+          "A String",
+        ],
+        "gender": "A String", # Optional gender to target.
+      },
+      "cost": { # Message defining the cost to run a given survey through API. # Cost to run the survey and collect the necessary number of responses.
+        "nanos": "A String", # Cost of survey in nano units of the given currency. DEPRECATED in favor of cost_per_response_nanos
+        "currencyCode": "A String", # Currency code that the cost is given in.
+        "autostartMaxCostPerResponse": "A String", # Threshold to start a survey automically if the quoted prices is at most this value. When a survey has a Screener (threshold) question, it must go through an incidence pricing test to determine the final cost per response. Typically the API consumer would have to make a followup call to start the survey given the (previously not) known cost. If the survey has no threshold_answers, setting this property will return an error. This property allows API callers to indicate the max price per response they'd be willing to pay in advance of that test. If the price turns out to be lower than the specified autostart_max, the survey should begin immediately and the user will be charged at the rate determined by the Incidence pricing test. If the price turns out to be greater than the specified autostart_max the survey will not be started and the user will instead be notified what price was determined by the incidence test. At that point they must raise the value of this property to be greater than or equal to that cost before attempting to start the survey again. This will immediately start the survey as long the incidence test was run within the last 21 days.
+        "costPerResponseNanos": "A String", # Cost per survey response in nano units of the given currency. To get the total cost for a survey, multiply this value by wanted_response_count.
+      },
+      "surveyUrlId": "A String", # Unique survey ID, that is viewable in the URL of the Survey Creator UI
+      "questions": [ # List of questions defining the survey.
+        { # Message defining the question specifications.
+          "highValueLabel": "A String", # For rating questions, the text for the higher end of the scale, such as 'Best'. For numeric questions, a string representing a floating-point that is the maximum allowed number for a response.
+          "mustPickSuggestion": True or False, # Option to force the user to pick one of the open text suggestions. This requires that suggestions are provided for this question.
+          "thresholdAnswers": [ # The threshold/screener answer options, which will screen a user into the rest of the survey. These will be a subset of the answer option strings.
+            "A String",
+          ],
+          "sentimentText": "A String", # Used by the Rating Scale with Text question type. This text goes along with the question field that is presented to the respondent, and is the actual text that the respondent is asked to rate.
+          "question": "A String", # Required question text shown to the respondent.
+          "numStars": "A String", # Number of stars to use for ratings questions.
+          "lowValueLabel": "A String", # For rating questions, the text for the lower end of the scale, such as 'Worst'. For numeric questions, a string representing a floating-point that is the minimum allowed number for a response.
+          "videoId": "A String", # The YouTube video ID to be show in video questions.
+          "answers": [ # Required list of answer options for a question.
+            "A String",
+          ],
+          "lastAnswerPositionPinned": True or False, # Currently only support pinning an answer option to the last position.
+          "hasOther": True or False, # Option to allow open-ended text box for Single Answer and Multiple Answer question types. This can be used with SINGLE_ANSWER, SINGLE_ANSWER_WITH_IMAGE, MULTIPLE_ANSWERS, and MULTIPLE_ANSWERS_WITH_IMAGE question types.
+          "unitOfMeasurementLabel": "A String", # Optional unit of measurement for display (for example: hours, people, miles).
+          "images": [
+            { # Container object for image data and alt_text.
+              "url": "A String", # The read-only URL for the hosted images.
+              "altText": "A String", # The alt text property used in image tags is required for all images.
+              "data": "A String", # Inline jpeg, gif, tiff, bmp, or png image raw bytes for an image question types.
+            },
+          ],
+          "singleLineResponse": True or False, # Option to allow multiple line open text responses instead of a single line response. Note that we don't show auto-complete suggestions with multiple line responses.
+          "openTextSuggestions": [ # A list of suggested answers for open text question auto-complete. This is only valid if single_line_response is true.
+            "A String",
+          ],
+          "type": "A String", # Required field defining the question type. For details about configuring different type of questions, consult the question configuration guide.
+          "answerOrder": "A String", # The randomization option for multiple choice and multi-select questions. If not specified, this option defaults to randomize.
+          "openTextPlaceholder": "A String", # Placeholder text for an open text question.
+        },
+      ],
+      "wantedResponseCount": 42, # Number of responses desired for the survey.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(body)</code>
+  <pre>Creates a survey.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Representation of an individual survey object.
+    "owners": [ # List of email addresses for survey owners. Must contain at least the address of the user making the API call.
+      "A String",
+    ],
+    "description": "A String", # Text description of the survey.
+    "title": "A String", # Optional name that will be given to the survey.
+    "customerData": "A String", # Additional information to store on behalf of the API consumer and associate with this question. This binary blob is treated as opaque. This field is limited to 64K bytes.
+    "state": "A String", # State that the survey is in. Can be modified to start, stop, or pause survey.
+    "audience": { # Specifications for the target audience of a survey run through the API. # Targeting-criteria message containing demographic information
+      "countrySubdivision": "A String", # Country subdivision (states/provinces/etc) that surveys should be targeted to. For all countries except GB, ISO-3166-2 subdivision code is required (eg. 'US-OH' for Ohio, United States). For GB, NUTS 1 statistical region codes for the United Kingdom is required (eg. 'UK-UKC' for North East England).
+      "mobileAppPanelId": "A String", # Key for predefined panel that causes survey to be sent to a predefined set of Opinion Rewards App users. PopulationSource must be set to ANDROID_APP_PANEL to use this field.
+      "country": "A String", # Required country code that surveys should be targeted to. Accepts standard ISO 3166-1 2 character language codes. For instance, 'US' for the United States, and 'GB' for the United Kingdom.
+      "ages": [ # Optional list of age buckets to target. Supported age buckets are: ['18-24', '25-34', '35-44', '45-54', '55-64', '65+']
+        "A String",
+      ],
+      "populationSource": "A String", # Online population source where the respondents are sampled from.
+      "languages": [ # Language code that surveys should be targeted to. For instance, 'en-US'. Surveys may target bilingual users by specifying a list of language codes (for example, 'de' and 'en-US'). In that case, all languages will be used for targeting users but the survey content (which is displayed) must match the first language listed. Accepts standard BCP47 language codes. See specification.
+        "A String",
+      ],
+      "gender": "A String", # Optional gender to target.
+    },
+    "cost": { # Message defining the cost to run a given survey through API. # Cost to run the survey and collect the necessary number of responses.
+      "nanos": "A String", # Cost of survey in nano units of the given currency. DEPRECATED in favor of cost_per_response_nanos
+      "currencyCode": "A String", # Currency code that the cost is given in.
+      "autostartMaxCostPerResponse": "A String", # Threshold to start a survey automically if the quoted prices is at most this value. When a survey has a Screener (threshold) question, it must go through an incidence pricing test to determine the final cost per response. Typically the API consumer would have to make a followup call to start the survey given the (previously not) known cost. If the survey has no threshold_answers, setting this property will return an error. This property allows API callers to indicate the max price per response they'd be willing to pay in advance of that test. If the price turns out to be lower than the specified autostart_max, the survey should begin immediately and the user will be charged at the rate determined by the Incidence pricing test. If the price turns out to be greater than the specified autostart_max the survey will not be started and the user will instead be notified what price was determined by the incidence test. At that point they must raise the value of this property to be greater than or equal to that cost before attempting to start the survey again. This will immediately start the survey as long the incidence test was run within the last 21 days.
+      "costPerResponseNanos": "A String", # Cost per survey response in nano units of the given currency. To get the total cost for a survey, multiply this value by wanted_response_count.
+    },
+    "surveyUrlId": "A String", # Unique survey ID, that is viewable in the URL of the Survey Creator UI
+    "questions": [ # List of questions defining the survey.
+      { # Message defining the question specifications.
+        "highValueLabel": "A String", # For rating questions, the text for the higher end of the scale, such as 'Best'. For numeric questions, a string representing a floating-point that is the maximum allowed number for a response.
+        "mustPickSuggestion": True or False, # Option to force the user to pick one of the open text suggestions. This requires that suggestions are provided for this question.
+        "thresholdAnswers": [ # The threshold/screener answer options, which will screen a user into the rest of the survey. These will be a subset of the answer option strings.
+          "A String",
+        ],
+        "sentimentText": "A String", # Used by the Rating Scale with Text question type. This text goes along with the question field that is presented to the respondent, and is the actual text that the respondent is asked to rate.
+        "question": "A String", # Required question text shown to the respondent.
+        "numStars": "A String", # Number of stars to use for ratings questions.
+        "lowValueLabel": "A String", # For rating questions, the text for the lower end of the scale, such as 'Worst'. For numeric questions, a string representing a floating-point that is the minimum allowed number for a response.
+        "videoId": "A String", # The YouTube video ID to be show in video questions.
+        "answers": [ # Required list of answer options for a question.
+          "A String",
+        ],
+        "lastAnswerPositionPinned": True or False, # Currently only support pinning an answer option to the last position.
+        "hasOther": True or False, # Option to allow open-ended text box for Single Answer and Multiple Answer question types. This can be used with SINGLE_ANSWER, SINGLE_ANSWER_WITH_IMAGE, MULTIPLE_ANSWERS, and MULTIPLE_ANSWERS_WITH_IMAGE question types.
+        "unitOfMeasurementLabel": "A String", # Optional unit of measurement for display (for example: hours, people, miles).
+        "images": [
+          { # Container object for image data and alt_text.
+            "url": "A String", # The read-only URL for the hosted images.
+            "altText": "A String", # The alt text property used in image tags is required for all images.
+            "data": "A String", # Inline jpeg, gif, tiff, bmp, or png image raw bytes for an image question types.
+          },
+        ],
+        "singleLineResponse": True or False, # Option to allow multiple line open text responses instead of a single line response. Note that we don't show auto-complete suggestions with multiple line responses.
+        "openTextSuggestions": [ # A list of suggested answers for open text question auto-complete. This is only valid if single_line_response is true.
+          "A String",
+        ],
+        "type": "A String", # Required field defining the question type. For details about configuring different type of questions, consult the question configuration guide.
+        "answerOrder": "A String", # The randomization option for multiple choice and multi-select questions. If not specified, this option defaults to randomize.
+        "openTextPlaceholder": "A String", # Placeholder text for an open text question.
+      },
+    ],
+    "wantedResponseCount": 42, # Number of responses desired for the survey.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Representation of an individual survey object.
+      "owners": [ # List of email addresses for survey owners. Must contain at least the address of the user making the API call.
+        "A String",
+      ],
+      "description": "A String", # Text description of the survey.
+      "title": "A String", # Optional name that will be given to the survey.
+      "customerData": "A String", # Additional information to store on behalf of the API consumer and associate with this question. This binary blob is treated as opaque. This field is limited to 64K bytes.
+      "state": "A String", # State that the survey is in. Can be modified to start, stop, or pause survey.
+      "audience": { # Specifications for the target audience of a survey run through the API. # Targeting-criteria message containing demographic information
+        "countrySubdivision": "A String", # Country subdivision (states/provinces/etc) that surveys should be targeted to. For all countries except GB, ISO-3166-2 subdivision code is required (eg. 'US-OH' for Ohio, United States). For GB, NUTS 1 statistical region codes for the United Kingdom is required (eg. 'UK-UKC' for North East England).
+        "mobileAppPanelId": "A String", # Key for predefined panel that causes survey to be sent to a predefined set of Opinion Rewards App users. PopulationSource must be set to ANDROID_APP_PANEL to use this field.
+        "country": "A String", # Required country code that surveys should be targeted to. Accepts standard ISO 3166-1 2 character language codes. For instance, 'US' for the United States, and 'GB' for the United Kingdom.
+        "ages": [ # Optional list of age buckets to target. Supported age buckets are: ['18-24', '25-34', '35-44', '45-54', '55-64', '65+']
+          "A String",
+        ],
+        "populationSource": "A String", # Online population source where the respondents are sampled from.
+        "languages": [ # Language code that surveys should be targeted to. For instance, 'en-US'. Surveys may target bilingual users by specifying a list of language codes (for example, 'de' and 'en-US'). In that case, all languages will be used for targeting users but the survey content (which is displayed) must match the first language listed. Accepts standard BCP47 language codes. See specification.
+          "A String",
+        ],
+        "gender": "A String", # Optional gender to target.
+      },
+      "cost": { # Message defining the cost to run a given survey through API. # Cost to run the survey and collect the necessary number of responses.
+        "nanos": "A String", # Cost of survey in nano units of the given currency. DEPRECATED in favor of cost_per_response_nanos
+        "currencyCode": "A String", # Currency code that the cost is given in.
+        "autostartMaxCostPerResponse": "A String", # Threshold to start a survey automically if the quoted prices is at most this value. When a survey has a Screener (threshold) question, it must go through an incidence pricing test to determine the final cost per response. Typically the API consumer would have to make a followup call to start the survey given the (previously not) known cost. If the survey has no threshold_answers, setting this property will return an error. This property allows API callers to indicate the max price per response they'd be willing to pay in advance of that test. If the price turns out to be lower than the specified autostart_max, the survey should begin immediately and the user will be charged at the rate determined by the Incidence pricing test. If the price turns out to be greater than the specified autostart_max the survey will not be started and the user will instead be notified what price was determined by the incidence test. At that point they must raise the value of this property to be greater than or equal to that cost before attempting to start the survey again. This will immediately start the survey as long the incidence test was run within the last 21 days.
+        "costPerResponseNanos": "A String", # Cost per survey response in nano units of the given currency. To get the total cost for a survey, multiply this value by wanted_response_count.
+      },
+      "surveyUrlId": "A String", # Unique survey ID, that is viewable in the URL of the Survey Creator UI
+      "questions": [ # List of questions defining the survey.
+        { # Message defining the question specifications.
+          "highValueLabel": "A String", # For rating questions, the text for the higher end of the scale, such as 'Best'. For numeric questions, a string representing a floating-point that is the maximum allowed number for a response.
+          "mustPickSuggestion": True or False, # Option to force the user to pick one of the open text suggestions. This requires that suggestions are provided for this question.
+          "thresholdAnswers": [ # The threshold/screener answer options, which will screen a user into the rest of the survey. These will be a subset of the answer option strings.
+            "A String",
+          ],
+          "sentimentText": "A String", # Used by the Rating Scale with Text question type. This text goes along with the question field that is presented to the respondent, and is the actual text that the respondent is asked to rate.
+          "question": "A String", # Required question text shown to the respondent.
+          "numStars": "A String", # Number of stars to use for ratings questions.
+          "lowValueLabel": "A String", # For rating questions, the text for the lower end of the scale, such as 'Worst'. For numeric questions, a string representing a floating-point that is the minimum allowed number for a response.
+          "videoId": "A String", # The YouTube video ID to be show in video questions.
+          "answers": [ # Required list of answer options for a question.
+            "A String",
+          ],
+          "lastAnswerPositionPinned": True or False, # Currently only support pinning an answer option to the last position.
+          "hasOther": True or False, # Option to allow open-ended text box for Single Answer and Multiple Answer question types. This can be used with SINGLE_ANSWER, SINGLE_ANSWER_WITH_IMAGE, MULTIPLE_ANSWERS, and MULTIPLE_ANSWERS_WITH_IMAGE question types.
+          "unitOfMeasurementLabel": "A String", # Optional unit of measurement for display (for example: hours, people, miles).
+          "images": [
+            { # Container object for image data and alt_text.
+              "url": "A String", # The read-only URL for the hosted images.
+              "altText": "A String", # The alt text property used in image tags is required for all images.
+              "data": "A String", # Inline jpeg, gif, tiff, bmp, or png image raw bytes for an image question types.
+            },
+          ],
+          "singleLineResponse": True or False, # Option to allow multiple line open text responses instead of a single line response. Note that we don't show auto-complete suggestions with multiple line responses.
+          "openTextSuggestions": [ # A list of suggested answers for open text question auto-complete. This is only valid if single_line_response is true.
+            "A String",
+          ],
+          "type": "A String", # Required field defining the question type. For details about configuring different type of questions, consult the question configuration guide.
+          "answerOrder": "A String", # The randomization option for multiple choice and multi-select questions. If not specified, this option defaults to randomize.
+          "openTextPlaceholder": "A String", # Placeholder text for an open text question.
+        },
+      ],
+      "wantedResponseCount": 42, # Number of responses desired for the survey.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(startIndex=None, maxResults=None, token=None)</code>
+  <pre>Lists the surveys owned by the authenticated user.
+
+Args:
+  startIndex: integer, A parameter
+  maxResults: integer, A parameter
+  token: string, A parameter
+
+Returns:
+  An object of the form:
+
+    {
+    "tokenPagination": {
+      "nextPageToken": "A String",
+      "previousPageToken": "A String",
+    },
+    "pageInfo": {
+      "totalResults": 42,
+      "startIndex": 42,
+      "resultPerPage": 42,
+    },
+    "resources": [ # An individual survey resource.
+      { # Representation of an individual survey object.
+          "owners": [ # List of email addresses for survey owners. Must contain at least the address of the user making the API call.
+            "A String",
+          ],
+          "description": "A String", # Text description of the survey.
+          "title": "A String", # Optional name that will be given to the survey.
+          "customerData": "A String", # Additional information to store on behalf of the API consumer and associate with this question. This binary blob is treated as opaque. This field is limited to 64K bytes.
+          "state": "A String", # State that the survey is in. Can be modified to start, stop, or pause survey.
+          "audience": { # Specifications for the target audience of a survey run through the API. # Targeting-criteria message containing demographic information
+            "countrySubdivision": "A String", # Country subdivision (states/provinces/etc) that surveys should be targeted to. For all countries except GB, ISO-3166-2 subdivision code is required (eg. 'US-OH' for Ohio, United States). For GB, NUTS 1 statistical region codes for the United Kingdom is required (eg. 'UK-UKC' for North East England).
+            "mobileAppPanelId": "A String", # Key for predefined panel that causes survey to be sent to a predefined set of Opinion Rewards App users. PopulationSource must be set to ANDROID_APP_PANEL to use this field.
+            "country": "A String", # Required country code that surveys should be targeted to. Accepts standard ISO 3166-1 2 character language codes. For instance, 'US' for the United States, and 'GB' for the United Kingdom.
+            "ages": [ # Optional list of age buckets to target. Supported age buckets are: ['18-24', '25-34', '35-44', '45-54', '55-64', '65+']
+              "A String",
+            ],
+            "populationSource": "A String", # Online population source where the respondents are sampled from.
+            "languages": [ # Language code that surveys should be targeted to. For instance, 'en-US'. Surveys may target bilingual users by specifying a list of language codes (for example, 'de' and 'en-US'). In that case, all languages will be used for targeting users but the survey content (which is displayed) must match the first language listed. Accepts standard BCP47 language codes. See specification.
+              "A String",
+            ],
+            "gender": "A String", # Optional gender to target.
+          },
+          "cost": { # Message defining the cost to run a given survey through API. # Cost to run the survey and collect the necessary number of responses.
+            "nanos": "A String", # Cost of survey in nano units of the given currency. DEPRECATED in favor of cost_per_response_nanos
+            "currencyCode": "A String", # Currency code that the cost is given in.
+            "autostartMaxCostPerResponse": "A String", # Threshold to start a survey automically if the quoted prices is at most this value. When a survey has a Screener (threshold) question, it must go through an incidence pricing test to determine the final cost per response. Typically the API consumer would have to make a followup call to start the survey given the (previously not) known cost. If the survey has no threshold_answers, setting this property will return an error. This property allows API callers to indicate the max price per response they'd be willing to pay in advance of that test. If the price turns out to be lower than the specified autostart_max, the survey should begin immediately and the user will be charged at the rate determined by the Incidence pricing test. If the price turns out to be greater than the specified autostart_max the survey will not be started and the user will instead be notified what price was determined by the incidence test. At that point they must raise the value of this property to be greater than or equal to that cost before attempting to start the survey again. This will immediately start the survey as long the incidence test was run within the last 21 days.
+            "costPerResponseNanos": "A String", # Cost per survey response in nano units of the given currency. To get the total cost for a survey, multiply this value by wanted_response_count.
+          },
+          "surveyUrlId": "A String", # Unique survey ID, that is viewable in the URL of the Survey Creator UI
+          "questions": [ # List of questions defining the survey.
+            { # Message defining the question specifications.
+              "highValueLabel": "A String", # For rating questions, the text for the higher end of the scale, such as 'Best'. For numeric questions, a string representing a floating-point that is the maximum allowed number for a response.
+              "mustPickSuggestion": True or False, # Option to force the user to pick one of the open text suggestions. This requires that suggestions are provided for this question.
+              "thresholdAnswers": [ # The threshold/screener answer options, which will screen a user into the rest of the survey. These will be a subset of the answer option strings.
+                "A String",
+              ],
+              "sentimentText": "A String", # Used by the Rating Scale with Text question type. This text goes along with the question field that is presented to the respondent, and is the actual text that the respondent is asked to rate.
+              "question": "A String", # Required question text shown to the respondent.
+              "numStars": "A String", # Number of stars to use for ratings questions.
+              "lowValueLabel": "A String", # For rating questions, the text for the lower end of the scale, such as 'Worst'. For numeric questions, a string representing a floating-point that is the minimum allowed number for a response.
+              "videoId": "A String", # The YouTube video ID to be show in video questions.
+              "answers": [ # Required list of answer options for a question.
+                "A String",
+              ],
+              "lastAnswerPositionPinned": True or False, # Currently only support pinning an answer option to the last position.
+              "hasOther": True or False, # Option to allow open-ended text box for Single Answer and Multiple Answer question types. This can be used with SINGLE_ANSWER, SINGLE_ANSWER_WITH_IMAGE, MULTIPLE_ANSWERS, and MULTIPLE_ANSWERS_WITH_IMAGE question types.
+              "unitOfMeasurementLabel": "A String", # Optional unit of measurement for display (for example: hours, people, miles).
+              "images": [
+                { # Container object for image data and alt_text.
+                  "url": "A String", # The read-only URL for the hosted images.
+                  "altText": "A String", # The alt text property used in image tags is required for all images.
+                  "data": "A String", # Inline jpeg, gif, tiff, bmp, or png image raw bytes for an image question types.
+                },
+              ],
+              "singleLineResponse": True or False, # Option to allow multiple line open text responses instead of a single line response. Note that we don't show auto-complete suggestions with multiple line responses.
+              "openTextSuggestions": [ # A list of suggested answers for open text question auto-complete. This is only valid if single_line_response is true.
+                "A String",
+              ],
+              "type": "A String", # Required field defining the question type. For details about configuring different type of questions, consult the question configuration guide.
+              "answerOrder": "A String", # The randomization option for multiple choice and multi-select questions. If not specified, this option defaults to randomize.
+              "openTextPlaceholder": "A String", # Placeholder text for an open text question.
+            },
+          ],
+          "wantedResponseCount": 42, # Number of responses desired for the survey.
+        },
+    ],
+    "requestId": "A String", # Unique request ID used for logging and debugging. Please include in any error reporting or troubleshooting requests.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="start">start(resourceId, body)</code>
+  <pre>Begins running a survey.
+
+Args:
+  resourceId: string, A parameter (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{
+    "autostartMaxCostPerResponse": "A String", # Threshold to start a survey automically if the quoted prices is less than or equal to this value. See Survey.Cost for more details.
+  }
+
+
+Returns:
+  An object of the form:
+
+    {
+    "resource": { # Representation of an individual survey object. # Survey object containing the specification of the started Survey.
+        "owners": [ # List of email addresses for survey owners. Must contain at least the address of the user making the API call.
+          "A String",
+        ],
+        "description": "A String", # Text description of the survey.
+        "title": "A String", # Optional name that will be given to the survey.
+        "customerData": "A String", # Additional information to store on behalf of the API consumer and associate with this question. This binary blob is treated as opaque. This field is limited to 64K bytes.
+        "state": "A String", # State that the survey is in. Can be modified to start, stop, or pause survey.
+        "audience": { # Specifications for the target audience of a survey run through the API. # Targeting-criteria message containing demographic information
+          "countrySubdivision": "A String", # Country subdivision (states/provinces/etc) that surveys should be targeted to. For all countries except GB, ISO-3166-2 subdivision code is required (eg. 'US-OH' for Ohio, United States). For GB, NUTS 1 statistical region codes for the United Kingdom is required (eg. 'UK-UKC' for North East England).
+          "mobileAppPanelId": "A String", # Key for predefined panel that causes survey to be sent to a predefined set of Opinion Rewards App users. PopulationSource must be set to ANDROID_APP_PANEL to use this field.
+          "country": "A String", # Required country code that surveys should be targeted to. Accepts standard ISO 3166-1 2 character language codes. For instance, 'US' for the United States, and 'GB' for the United Kingdom.
+          "ages": [ # Optional list of age buckets to target. Supported age buckets are: ['18-24', '25-34', '35-44', '45-54', '55-64', '65+']
+            "A String",
+          ],
+          "populationSource": "A String", # Online population source where the respondents are sampled from.
+          "languages": [ # Language code that surveys should be targeted to. For instance, 'en-US'. Surveys may target bilingual users by specifying a list of language codes (for example, 'de' and 'en-US'). In that case, all languages will be used for targeting users but the survey content (which is displayed) must match the first language listed. Accepts standard BCP47 language codes. See specification.
+            "A String",
+          ],
+          "gender": "A String", # Optional gender to target.
+        },
+        "cost": { # Message defining the cost to run a given survey through API. # Cost to run the survey and collect the necessary number of responses.
+          "nanos": "A String", # Cost of survey in nano units of the given currency. DEPRECATED in favor of cost_per_response_nanos
+          "currencyCode": "A String", # Currency code that the cost is given in.
+          "autostartMaxCostPerResponse": "A String", # Threshold to start a survey automically if the quoted prices is at most this value. When a survey has a Screener (threshold) question, it must go through an incidence pricing test to determine the final cost per response. Typically the API consumer would have to make a followup call to start the survey given the (previously not) known cost. If the survey has no threshold_answers, setting this property will return an error. This property allows API callers to indicate the max price per response they'd be willing to pay in advance of that test. If the price turns out to be lower than the specified autostart_max, the survey should begin immediately and the user will be charged at the rate determined by the Incidence pricing test. If the price turns out to be greater than the specified autostart_max the survey will not be started and the user will instead be notified what price was determined by the incidence test. At that point they must raise the value of this property to be greater than or equal to that cost before attempting to start the survey again. This will immediately start the survey as long the incidence test was run within the last 21 days.
+          "costPerResponseNanos": "A String", # Cost per survey response in nano units of the given currency. To get the total cost for a survey, multiply this value by wanted_response_count.
+        },
+        "surveyUrlId": "A String", # Unique survey ID, that is viewable in the URL of the Survey Creator UI
+        "questions": [ # List of questions defining the survey.
+          { # Message defining the question specifications.
+            "highValueLabel": "A String", # For rating questions, the text for the higher end of the scale, such as 'Best'. For numeric questions, a string representing a floating-point that is the maximum allowed number for a response.
+            "mustPickSuggestion": True or False, # Option to force the user to pick one of the open text suggestions. This requires that suggestions are provided for this question.
+            "thresholdAnswers": [ # The threshold/screener answer options, which will screen a user into the rest of the survey. These will be a subset of the answer option strings.
+              "A String",
+            ],
+            "sentimentText": "A String", # Used by the Rating Scale with Text question type. This text goes along with the question field that is presented to the respondent, and is the actual text that the respondent is asked to rate.
+            "question": "A String", # Required question text shown to the respondent.
+            "numStars": "A String", # Number of stars to use for ratings questions.
+            "lowValueLabel": "A String", # For rating questions, the text for the lower end of the scale, such as 'Worst'. For numeric questions, a string representing a floating-point that is the minimum allowed number for a response.
+            "videoId": "A String", # The YouTube video ID to be show in video questions.
+            "answers": [ # Required list of answer options for a question.
+              "A String",
+            ],
+            "lastAnswerPositionPinned": True or False, # Currently only support pinning an answer option to the last position.
+            "hasOther": True or False, # Option to allow open-ended text box for Single Answer and Multiple Answer question types. This can be used with SINGLE_ANSWER, SINGLE_ANSWER_WITH_IMAGE, MULTIPLE_ANSWERS, and MULTIPLE_ANSWERS_WITH_IMAGE question types.
+            "unitOfMeasurementLabel": "A String", # Optional unit of measurement for display (for example: hours, people, miles).
+            "images": [
+              { # Container object for image data and alt_text.
+                "url": "A String", # The read-only URL for the hosted images.
+                "altText": "A String", # The alt text property used in image tags is required for all images.
+                "data": "A String", # Inline jpeg, gif, tiff, bmp, or png image raw bytes for an image question types.
+              },
+            ],
+            "singleLineResponse": True or False, # Option to allow multiple line open text responses instead of a single line response. Note that we don't show auto-complete suggestions with multiple line responses.
+            "openTextSuggestions": [ # A list of suggested answers for open text question auto-complete. This is only valid if single_line_response is true.
+              "A String",
+            ],
+            "type": "A String", # Required field defining the question type. For details about configuring different type of questions, consult the question configuration guide.
+            "answerOrder": "A String", # The randomization option for multiple choice and multi-select questions. If not specified, this option defaults to randomize.
+            "openTextPlaceholder": "A String", # Placeholder text for an open text question.
+          },
+        ],
+        "wantedResponseCount": 42, # Number of responses desired for the survey.
+      },
+    "requestId": "A String", # Unique request ID used for logging and debugging. Please include in any error reporting or troubleshooting requests.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="stop">stop(resourceId)</code>
+  <pre>Stops a running survey.
+
+Args:
+  resourceId: string, A parameter (required)
+
+Returns:
+  An object of the form:
+
+    {
+    "resource": { # Representation of an individual survey object. # Survey object containing the specification of the stopped Survey.
+        "owners": [ # List of email addresses for survey owners. Must contain at least the address of the user making the API call.
+          "A String",
+        ],
+        "description": "A String", # Text description of the survey.
+        "title": "A String", # Optional name that will be given to the survey.
+        "customerData": "A String", # Additional information to store on behalf of the API consumer and associate with this question. This binary blob is treated as opaque. This field is limited to 64K bytes.
+        "state": "A String", # State that the survey is in. Can be modified to start, stop, or pause survey.
+        "audience": { # Specifications for the target audience of a survey run through the API. # Targeting-criteria message containing demographic information
+          "countrySubdivision": "A String", # Country subdivision (states/provinces/etc) that surveys should be targeted to. For all countries except GB, ISO-3166-2 subdivision code is required (eg. 'US-OH' for Ohio, United States). For GB, NUTS 1 statistical region codes for the United Kingdom is required (eg. 'UK-UKC' for North East England).
+          "mobileAppPanelId": "A String", # Key for predefined panel that causes survey to be sent to a predefined set of Opinion Rewards App users. PopulationSource must be set to ANDROID_APP_PANEL to use this field.
+          "country": "A String", # Required country code that surveys should be targeted to. Accepts standard ISO 3166-1 2 character language codes. For instance, 'US' for the United States, and 'GB' for the United Kingdom.
+          "ages": [ # Optional list of age buckets to target. Supported age buckets are: ['18-24', '25-34', '35-44', '45-54', '55-64', '65+']
+            "A String",
+          ],
+          "populationSource": "A String", # Online population source where the respondents are sampled from.
+          "languages": [ # Language code that surveys should be targeted to. For instance, 'en-US'. Surveys may target bilingual users by specifying a list of language codes (for example, 'de' and 'en-US'). In that case, all languages will be used for targeting users but the survey content (which is displayed) must match the first language listed. Accepts standard BCP47 language codes. See specification.
+            "A String",
+          ],
+          "gender": "A String", # Optional gender to target.
+        },
+        "cost": { # Message defining the cost to run a given survey through API. # Cost to run the survey and collect the necessary number of responses.
+          "nanos": "A String", # Cost of survey in nano units of the given currency. DEPRECATED in favor of cost_per_response_nanos
+          "currencyCode": "A String", # Currency code that the cost is given in.
+          "autostartMaxCostPerResponse": "A String", # Threshold to start a survey automically if the quoted prices is at most this value. When a survey has a Screener (threshold) question, it must go through an incidence pricing test to determine the final cost per response. Typically the API consumer would have to make a followup call to start the survey given the (previously not) known cost. If the survey has no threshold_answers, setting this property will return an error. This property allows API callers to indicate the max price per response they'd be willing to pay in advance of that test. If the price turns out to be lower than the specified autostart_max, the survey should begin immediately and the user will be charged at the rate determined by the Incidence pricing test. If the price turns out to be greater than the specified autostart_max the survey will not be started and the user will instead be notified what price was determined by the incidence test. At that point they must raise the value of this property to be greater than or equal to that cost before attempting to start the survey again. This will immediately start the survey as long the incidence test was run within the last 21 days.
+          "costPerResponseNanos": "A String", # Cost per survey response in nano units of the given currency. To get the total cost for a survey, multiply this value by wanted_response_count.
+        },
+        "surveyUrlId": "A String", # Unique survey ID, that is viewable in the URL of the Survey Creator UI
+        "questions": [ # List of questions defining the survey.
+          { # Message defining the question specifications.
+            "highValueLabel": "A String", # For rating questions, the text for the higher end of the scale, such as 'Best'. For numeric questions, a string representing a floating-point that is the maximum allowed number for a response.
+            "mustPickSuggestion": True or False, # Option to force the user to pick one of the open text suggestions. This requires that suggestions are provided for this question.
+            "thresholdAnswers": [ # The threshold/screener answer options, which will screen a user into the rest of the survey. These will be a subset of the answer option strings.
+              "A String",
+            ],
+            "sentimentText": "A String", # Used by the Rating Scale with Text question type. This text goes along with the question field that is presented to the respondent, and is the actual text that the respondent is asked to rate.
+            "question": "A String", # Required question text shown to the respondent.
+            "numStars": "A String", # Number of stars to use for ratings questions.
+            "lowValueLabel": "A String", # For rating questions, the text for the lower end of the scale, such as 'Worst'. For numeric questions, a string representing a floating-point that is the minimum allowed number for a response.
+            "videoId": "A String", # The YouTube video ID to be show in video questions.
+            "answers": [ # Required list of answer options for a question.
+              "A String",
+            ],
+            "lastAnswerPositionPinned": True or False, # Currently only support pinning an answer option to the last position.
+            "hasOther": True or False, # Option to allow open-ended text box for Single Answer and Multiple Answer question types. This can be used with SINGLE_ANSWER, SINGLE_ANSWER_WITH_IMAGE, MULTIPLE_ANSWERS, and MULTIPLE_ANSWERS_WITH_IMAGE question types.
+            "unitOfMeasurementLabel": "A String", # Optional unit of measurement for display (for example: hours, people, miles).
+            "images": [
+              { # Container object for image data and alt_text.
+                "url": "A String", # The read-only URL for the hosted images.
+                "altText": "A String", # The alt text property used in image tags is required for all images.
+                "data": "A String", # Inline jpeg, gif, tiff, bmp, or png image raw bytes for an image question types.
+              },
+            ],
+            "singleLineResponse": True or False, # Option to allow multiple line open text responses instead of a single line response. Note that we don't show auto-complete suggestions with multiple line responses.
+            "openTextSuggestions": [ # A list of suggested answers for open text question auto-complete. This is only valid if single_line_response is true.
+              "A String",
+            ],
+            "type": "A String", # Required field defining the question type. For details about configuring different type of questions, consult the question configuration guide.
+            "answerOrder": "A String", # The randomization option for multiple choice and multi-select questions. If not specified, this option defaults to randomize.
+            "openTextPlaceholder": "A String", # Placeholder text for an open text question.
+          },
+        ],
+        "wantedResponseCount": 42, # Number of responses desired for the survey.
+      },
+    "requestId": "A String", # Unique request ID used for logging and debugging. Please include in any error reporting or troubleshooting requests.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(surveyUrlId, body)</code>
+  <pre>Updates a survey. Currently the only property that can be updated is the owners property.
+
+Args:
+  surveyUrlId: string, External URL ID for the survey. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Representation of an individual survey object.
+    "owners": [ # List of email addresses for survey owners. Must contain at least the address of the user making the API call.
+      "A String",
+    ],
+    "description": "A String", # Text description of the survey.
+    "title": "A String", # Optional name that will be given to the survey.
+    "customerData": "A String", # Additional information to store on behalf of the API consumer and associate with this question. This binary blob is treated as opaque. This field is limited to 64K bytes.
+    "state": "A String", # State that the survey is in. Can be modified to start, stop, or pause survey.
+    "audience": { # Specifications for the target audience of a survey run through the API. # Targeting-criteria message containing demographic information
+      "countrySubdivision": "A String", # Country subdivision (states/provinces/etc) that surveys should be targeted to. For all countries except GB, ISO-3166-2 subdivision code is required (eg. 'US-OH' for Ohio, United States). For GB, NUTS 1 statistical region codes for the United Kingdom is required (eg. 'UK-UKC' for North East England).
+      "mobileAppPanelId": "A String", # Key for predefined panel that causes survey to be sent to a predefined set of Opinion Rewards App users. PopulationSource must be set to ANDROID_APP_PANEL to use this field.
+      "country": "A String", # Required country code that surveys should be targeted to. Accepts standard ISO 3166-1 2 character language codes. For instance, 'US' for the United States, and 'GB' for the United Kingdom.
+      "ages": [ # Optional list of age buckets to target. Supported age buckets are: ['18-24', '25-34', '35-44', '45-54', '55-64', '65+']
+        "A String",
+      ],
+      "populationSource": "A String", # Online population source where the respondents are sampled from.
+      "languages": [ # Language code that surveys should be targeted to. For instance, 'en-US'. Surveys may target bilingual users by specifying a list of language codes (for example, 'de' and 'en-US'). In that case, all languages will be used for targeting users but the survey content (which is displayed) must match the first language listed. Accepts standard BCP47 language codes. See specification.
+        "A String",
+      ],
+      "gender": "A String", # Optional gender to target.
+    },
+    "cost": { # Message defining the cost to run a given survey through API. # Cost to run the survey and collect the necessary number of responses.
+      "nanos": "A String", # Cost of survey in nano units of the given currency. DEPRECATED in favor of cost_per_response_nanos
+      "currencyCode": "A String", # Currency code that the cost is given in.
+      "autostartMaxCostPerResponse": "A String", # Threshold to start a survey automically if the quoted prices is at most this value. When a survey has a Screener (threshold) question, it must go through an incidence pricing test to determine the final cost per response. Typically the API consumer would have to make a followup call to start the survey given the (previously not) known cost. If the survey has no threshold_answers, setting this property will return an error. This property allows API callers to indicate the max price per response they'd be willing to pay in advance of that test. If the price turns out to be lower than the specified autostart_max, the survey should begin immediately and the user will be charged at the rate determined by the Incidence pricing test. If the price turns out to be greater than the specified autostart_max the survey will not be started and the user will instead be notified what price was determined by the incidence test. At that point they must raise the value of this property to be greater than or equal to that cost before attempting to start the survey again. This will immediately start the survey as long the incidence test was run within the last 21 days.
+      "costPerResponseNanos": "A String", # Cost per survey response in nano units of the given currency. To get the total cost for a survey, multiply this value by wanted_response_count.
+    },
+    "surveyUrlId": "A String", # Unique survey ID, that is viewable in the URL of the Survey Creator UI
+    "questions": [ # List of questions defining the survey.
+      { # Message defining the question specifications.
+        "highValueLabel": "A String", # For rating questions, the text for the higher end of the scale, such as 'Best'. For numeric questions, a string representing a floating-point that is the maximum allowed number for a response.
+        "mustPickSuggestion": True or False, # Option to force the user to pick one of the open text suggestions. This requires that suggestions are provided for this question.
+        "thresholdAnswers": [ # The threshold/screener answer options, which will screen a user into the rest of the survey. These will be a subset of the answer option strings.
+          "A String",
+        ],
+        "sentimentText": "A String", # Used by the Rating Scale with Text question type. This text goes along with the question field that is presented to the respondent, and is the actual text that the respondent is asked to rate.
+        "question": "A String", # Required question text shown to the respondent.
+        "numStars": "A String", # Number of stars to use for ratings questions.
+        "lowValueLabel": "A String", # For rating questions, the text for the lower end of the scale, such as 'Worst'. For numeric questions, a string representing a floating-point that is the minimum allowed number for a response.
+        "videoId": "A String", # The YouTube video ID to be show in video questions.
+        "answers": [ # Required list of answer options for a question.
+          "A String",
+        ],
+        "lastAnswerPositionPinned": True or False, # Currently only support pinning an answer option to the last position.
+        "hasOther": True or False, # Option to allow open-ended text box for Single Answer and Multiple Answer question types. This can be used with SINGLE_ANSWER, SINGLE_ANSWER_WITH_IMAGE, MULTIPLE_ANSWERS, and MULTIPLE_ANSWERS_WITH_IMAGE question types.
+        "unitOfMeasurementLabel": "A String", # Optional unit of measurement for display (for example: hours, people, miles).
+        "images": [
+          { # Container object for image data and alt_text.
+            "url": "A String", # The read-only URL for the hosted images.
+            "altText": "A String", # The alt text property used in image tags is required for all images.
+            "data": "A String", # Inline jpeg, gif, tiff, bmp, or png image raw bytes for an image question types.
+          },
+        ],
+        "singleLineResponse": True or False, # Option to allow multiple line open text responses instead of a single line response. Note that we don't show auto-complete suggestions with multiple line responses.
+        "openTextSuggestions": [ # A list of suggested answers for open text question auto-complete. This is only valid if single_line_response is true.
+          "A String",
+        ],
+        "type": "A String", # Required field defining the question type. For details about configuring different type of questions, consult the question configuration guide.
+        "answerOrder": "A String", # The randomization option for multiple choice and multi-select questions. If not specified, this option defaults to randomize.
+        "openTextPlaceholder": "A String", # Placeholder text for an open text question.
+      },
+    ],
+    "wantedResponseCount": 42, # Number of responses desired for the survey.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Representation of an individual survey object.
+      "owners": [ # List of email addresses for survey owners. Must contain at least the address of the user making the API call.
+        "A String",
+      ],
+      "description": "A String", # Text description of the survey.
+      "title": "A String", # Optional name that will be given to the survey.
+      "customerData": "A String", # Additional information to store on behalf of the API consumer and associate with this question. This binary blob is treated as opaque. This field is limited to 64K bytes.
+      "state": "A String", # State that the survey is in. Can be modified to start, stop, or pause survey.
+      "audience": { # Specifications for the target audience of a survey run through the API. # Targeting-criteria message containing demographic information
+        "countrySubdivision": "A String", # Country subdivision (states/provinces/etc) that surveys should be targeted to. For all countries except GB, ISO-3166-2 subdivision code is required (eg. 'US-OH' for Ohio, United States). For GB, NUTS 1 statistical region codes for the United Kingdom is required (eg. 'UK-UKC' for North East England).
+        "mobileAppPanelId": "A String", # Key for predefined panel that causes survey to be sent to a predefined set of Opinion Rewards App users. PopulationSource must be set to ANDROID_APP_PANEL to use this field.
+        "country": "A String", # Required country code that surveys should be targeted to. Accepts standard ISO 3166-1 2 character language codes. For instance, 'US' for the United States, and 'GB' for the United Kingdom.
+        "ages": [ # Optional list of age buckets to target. Supported age buckets are: ['18-24', '25-34', '35-44', '45-54', '55-64', '65+']
+          "A String",
+        ],
+        "populationSource": "A String", # Online population source where the respondents are sampled from.
+        "languages": [ # Language code that surveys should be targeted to. For instance, 'en-US'. Surveys may target bilingual users by specifying a list of language codes (for example, 'de' and 'en-US'). In that case, all languages will be used for targeting users but the survey content (which is displayed) must match the first language listed. Accepts standard BCP47 language codes. See specification.
+          "A String",
+        ],
+        "gender": "A String", # Optional gender to target.
+      },
+      "cost": { # Message defining the cost to run a given survey through API. # Cost to run the survey and collect the necessary number of responses.
+        "nanos": "A String", # Cost of survey in nano units of the given currency. DEPRECATED in favor of cost_per_response_nanos
+        "currencyCode": "A String", # Currency code that the cost is given in.
+        "autostartMaxCostPerResponse": "A String", # Threshold to start a survey automically if the quoted prices is at most this value. When a survey has a Screener (threshold) question, it must go through an incidence pricing test to determine the final cost per response. Typically the API consumer would have to make a followup call to start the survey given the (previously not) known cost. If the survey has no threshold_answers, setting this property will return an error. This property allows API callers to indicate the max price per response they'd be willing to pay in advance of that test. If the price turns out to be lower than the specified autostart_max, the survey should begin immediately and the user will be charged at the rate determined by the Incidence pricing test. If the price turns out to be greater than the specified autostart_max the survey will not be started and the user will instead be notified what price was determined by the incidence test. At that point they must raise the value of this property to be greater than or equal to that cost before attempting to start the survey again. This will immediately start the survey as long the incidence test was run within the last 21 days.
+        "costPerResponseNanos": "A String", # Cost per survey response in nano units of the given currency. To get the total cost for a survey, multiply this value by wanted_response_count.
+      },
+      "surveyUrlId": "A String", # Unique survey ID, that is viewable in the URL of the Survey Creator UI
+      "questions": [ # List of questions defining the survey.
+        { # Message defining the question specifications.
+          "highValueLabel": "A String", # For rating questions, the text for the higher end of the scale, such as 'Best'. For numeric questions, a string representing a floating-point that is the maximum allowed number for a response.
+          "mustPickSuggestion": True or False, # Option to force the user to pick one of the open text suggestions. This requires that suggestions are provided for this question.
+          "thresholdAnswers": [ # The threshold/screener answer options, which will screen a user into the rest of the survey. These will be a subset of the answer option strings.
+            "A String",
+          ],
+          "sentimentText": "A String", # Used by the Rating Scale with Text question type. This text goes along with the question field that is presented to the respondent, and is the actual text that the respondent is asked to rate.
+          "question": "A String", # Required question text shown to the respondent.
+          "numStars": "A String", # Number of stars to use for ratings questions.
+          "lowValueLabel": "A String", # For rating questions, the text for the lower end of the scale, such as 'Worst'. For numeric questions, a string representing a floating-point that is the minimum allowed number for a response.
+          "videoId": "A String", # The YouTube video ID to be show in video questions.
+          "answers": [ # Required list of answer options for a question.
+            "A String",
+          ],
+          "lastAnswerPositionPinned": True or False, # Currently only support pinning an answer option to the last position.
+          "hasOther": True or False, # Option to allow open-ended text box for Single Answer and Multiple Answer question types. This can be used with SINGLE_ANSWER, SINGLE_ANSWER_WITH_IMAGE, MULTIPLE_ANSWERS, and MULTIPLE_ANSWERS_WITH_IMAGE question types.
+          "unitOfMeasurementLabel": "A String", # Optional unit of measurement for display (for example: hours, people, miles).
+          "images": [
+            { # Container object for image data and alt_text.
+              "url": "A String", # The read-only URL for the hosted images.
+              "altText": "A String", # The alt text property used in image tags is required for all images.
+              "data": "A String", # Inline jpeg, gif, tiff, bmp, or png image raw bytes for an image question types.
+            },
+          ],
+          "singleLineResponse": True or False, # Option to allow multiple line open text responses instead of a single line response. Note that we don't show auto-complete suggestions with multiple line responses.
+          "openTextSuggestions": [ # A list of suggested answers for open text question auto-complete. This is only valid if single_line_response is true.
+            "A String",
+          ],
+          "type": "A String", # Required field defining the question type. For details about configuring different type of questions, consult the question configuration guide.
+          "answerOrder": "A String", # The randomization option for multiple choice and multi-select questions. If not specified, this option defaults to randomize.
+          "openTextPlaceholder": "A String", # Placeholder text for an open text question.
+        },
+      ],
+      "wantedResponseCount": 42, # Number of responses desired for the survey.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/container_v1.projects.zones.clusters.html b/docs/dyn/container_v1.projects.zones.clusters.html
index 529e2cd..2f8e954 100644
--- a/docs/dyn/container_v1.projects.zones.clusters.html
+++ b/docs/dyn/container_v1.projects.zones.clusters.html
@@ -75,68 +75,112 @@
 <h1><a href="container_v1.html">Google Container Engine API</a> . <a href="container_v1.projects.html">projects</a> . <a href="container_v1.projects.zones.html">zones</a> . <a href="container_v1.projects.zones.clusters.html">clusters</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
+  <code><a href="container_v1.projects.zones.clusters.nodePools.html">nodePools()</a></code>
+</p>
+<p class="firstline">Returns the nodePools Resource.</p>
+
+<p class="toc_element">
   <code><a href="#create">create(projectId, zone, body, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a cluster, consisting of the specified number and type of Google Compute Engine instances, plus a Kubernetes master endpoint. By default, the cluster is created in the project's [default network](/compute/docs/networking#networks_1). One firewall is added for the cluster. After cluster creation, the cluster creates routes for each node to allow the containers on that node to communicate with all other instances in the cluster. Finally, an entry is added to the project's global metadata indicating which CIDR range is being used by the cluster.</p>
+<p class="firstline">Creates a cluster, consisting of the specified number and type of Google Compute Engine instances. By default, the cluster is created in the project's [default network](/compute/docs/networks-and-firewalls#networks). One firewall is added for the cluster. After cluster creation, the cluster creates routes for each node to allow the containers on that node to communicate with all other instances in the cluster. Finally, an entry is added to the project's global metadata indicating which CIDR range is being used by the cluster.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(projectId, zone, clusterId, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes the cluster, including the Kubernetes endpoint and all worker nodes. Firewalls and routes that were configured during cluster creation are also deleted.</p>
+<p class="firstline">Deletes the cluster, including the Kubernetes endpoint and all worker nodes. Firewalls and routes that were configured during cluster creation are also deleted. Other Google Compute Engine resources that might be in use by the cluster (e.g. load balancer resources) will not be deleted if they weren't present at the initial create time.</p>
 <p class="toc_element">
   <code><a href="#get">get(projectId, zone, clusterId, x__xgafv=None)</a></code></p>
-<p class="firstline">Gets a specific cluster.</p>
+<p class="firstline">Gets the details of a specific cluster.</p>
 <p class="toc_element">
   <code><a href="#list">list(projectId, zone, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists all clusters owned by a project in either the specified zone or all zones.</p>
 <p class="toc_element">
   <code><a href="#update">update(projectId, zone, clusterId, body, x__xgafv=None)</a></code></p>
-<p class="firstline">Update settings of a specific cluster.</p>
+<p class="firstline">Updates the settings of a specific cluster.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="create">create(projectId, zone, body, x__xgafv=None)</code>
-  <pre>Creates a cluster, consisting of the specified number and type of Google Compute Engine instances, plus a Kubernetes master endpoint. By default, the cluster is created in the project's [default network](/compute/docs/networking#networks_1). One firewall is added for the cluster. After cluster creation, the cluster creates routes for each node to allow the containers on that node to communicate with all other instances in the cluster. Finally, an entry is added to the project's global metadata indicating which CIDR range is being used by the cluster.
+  <pre>Creates a cluster, consisting of the specified number and type of Google Compute Engine instances. By default, the cluster is created in the project's [default network](/compute/docs/networks-and-firewalls#networks). One firewall is added for the cluster. After cluster creation, the cluster creates routes for each node to allow the containers on that node to communicate with all other instances in the cluster. Finally, an entry is added to the project's global metadata indicating which CIDR range is being used by the cluster.
 
 Args:
-  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  projectId: string, The Google Developers Console [project ID or project number](https://support.google.com/cloud/answer/6158840). (required)
   zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
 { # CreateClusterRequest creates a cluster.
     "cluster": { # A Google Container Engine cluster. # A [cluster resource](/container-engine/reference/rest/v1/projects.zones.clusters)
-      "status": "A String", # [Output only] The current status of this cluster.
-      "nodeIpv4CidrSize": 42, # [Output only] The size of the address space on each node for hosting containers. This is provisioned from within the container_ipv4_cidr range.
-      "statusMessage": "A String", # [Output only] Additional information about the current status of this cluster, if available.
-      "endpoint": "A String", # [Output only] The IP address of this cluster's Kubernetes master endpoint. The endpoint can be accessed from the internet at `https://username:password@endpoint/`. See the `masterAuth` property of this resource for username and password information.
-      "name": "A String", # The name of this cluster. The name must be unique within this project and zone, and can be up to 40 characters with the following restrictions: * Lowercase letters, numbers, and hyphens only. * Must start with a letter. * Must end with a number or a letter.
-      "loggingService": "A String", # The logging service that the cluster should write logs to. Currently available options: * "logging.googleapis.com" - the Google Cloud Logging service * "none" - no logs will be exported from the cluster * "" - default value; the default is "logging.googleapis.com"
-      "currentNodeVersion": "A String", # [Output only] The current version of the node software components. If they are currently at different versions because they're in the process of being upgraded, this reflects the minimum version of any of them.
+      "nodeIpv4CidrSize": 42, # [Output only] The size of the address space on each node for hosting containers. This is provisioned from within the `container_ipv4_cidr` range.
+      "addonsConfig": { # Configuration for the addons that can be automatically spun up in the cluster, enabling additional functionality. # Configurations for the various addons available to run in the cluster.
+        "httpLoadBalancing": { # Configuration options for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster. # Configuration for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster.
+          "disabled": True or False, # Whether the HTTP Load Balancing controller is enabled in the cluster. When enabled, it runs a small pod in the cluster that manages the load balancers.
+        },
+        "horizontalPodAutoscaling": { # Configuration options for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods. # Configuration for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods.
+          "disabled": True or False, # Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. When enabled, it ensures that a Heapster pod is running in the cluster, which is also used by the Cloud Monitoring service.
+        },
+      },
+      "locations": [ # The list of Google Compute Engine [locations](/compute/docs/zones#available) in which the cluster's nodes should be located.
+        "A String",
+      ],
+      "network": "A String", # The name of the Google Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the cluster is connected. If left unspecified, the `default` network will be used.
+      "loggingService": "A String", # The logging service the cluster should use to write logs. Currently available options: * `logging.googleapis.com` - the Google Cloud Logging service. * `none` - no logs will be exported from the cluster. * if left as an empty string,`logging.googleapis.com` will be used.
       "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this cluster.
         "A String",
       ],
+      "zone": "A String", # [Output only] The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.
+      "statusMessage": "A String", # [Output only] Additional information about the current status of this cluster, if available.
+      "servicesIpv4Cidr": "A String", # [Output only] The IP address range of the Kubernetes services in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `1.2.3.4/29`). Service addresses are typically put in the last `/16` from the container CIDR.
+      "status": "A String", # [Output only] The current status of this cluster.
+      "description": "A String", # An optional description of this cluster.
+      "currentNodeVersion": "A String", # [Output only] The current version of the node software components. If they are currently at multiple versions because they're in the process of being upgraded, this reflects the minimum version of all nodes.
       "currentMasterVersion": "A String", # [Output only] The current software version of the master endpoint.
-      "servicesIpv4Cidr": "A String", # [Output only] The IP address range of the Kubernetes services in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `1.2.3.4/29`). Service addresses are typically put in the last /16 from the container CIDR.
-      "masterAuth": { # The authentication information for accessing the master endpoint. Authentication can be done using HTTP basic auth or using client certificates. # The authentication information for accessing the master.
-        "username": "A String", # The username to use for HTTP basic authentication when accessing the Kubernetes master endpoint.
-        "password": "A String", # The password to use for HTTP basic authentication when accessing the Kubernetes master endpoint. Because the master endpoint is open to the internet, you should create a strong password.
-        "clientKey": "A String", # [Output only] Base64 encoded private key used by clients to authenticate to the cluster endpoint.
-        "clientCertificate": "A String", # [Output only] Base64 encoded public certificate used by clients to authenticate to the cluster endpoint.
-        "clusterCaCertificate": "A String", # [Output only] Base64 encoded public certificate that is the root of trust for the cluster.
+      "masterAuth": { # The authentication information for accessing the master endpoint. Authentication can be done using HTTP basic auth or using client certificates. # The authentication information for accessing the master endpoint.
+        "username": "A String", # The username to use for HTTP basic authentication to the master endpoint.
+        "password": "A String", # The password to use for HTTP basic authentication to the master endpoint. Because the master endpoint is open to the Internet, you should create a strong password.
+        "clientKey": "A String", # [Output only] Base64-encoded private key used by clients to authenticate to the cluster endpoint.
+        "clientCertificate": "A String", # [Output only] Base64-encoded public certificate used by clients to authenticate to the cluster endpoint.
+        "clusterCaCertificate": "A String", # [Output only] Base64-encoded public certificate that is the root of trust for the cluster.
       },
-      "network": "A String", # The name of the Google Compute Engine [network](/compute/docs/networking#networks_1) to which the cluster is connected. If left unspecified, the "default" network will be used.
-      "initialClusterVersion": "A String", # [Output only] The software version of Kubernetes master and kubelets used in the cluster when it was first created. The version can be upgraded over time.
-      "nodeConfig": { # Per-node parameters. # Parameters used in creating the cluster's nodes. See the descriptions of the child properties of `nodeConfig`. If unspecified, the defaults for all child properties are used.
+      "initialNodeCount": 42, # The number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota. For requests, this field should only be used in lieu of a "node_pool" object, since this configuration (along with the "node_config") will be used to create a "NodePool" object with an auto-generated name. Do not use this and a node_pool at the same time.
+      "nodePools": [ # The node pools associated with this cluster. When creating a new cluster, only a single node pool should be specified. This field should not be set if "node_config" or "initial_node_count" are specified.
+        { # NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes (i.e. VM's), with a common configuration and specification, under the control of the cluster master. They may have a set of Kubernetes labels applied to them, which may be used to reference them during pod scheduling. They may also be resized up or down, to accommodate the workload.
+          "status": "A String", # The status of the nodes in this pool instance.
+          "statusMessage": "A String", # [Output only] Additional information about the current status of this node pool instance, if available.
+          "name": "A String", # The name of the node pool.
+          "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this node pool.
+            "A String",
+          ],
+          "version": "A String", # The version of the Kubernetes of this node.
+          "initialNodeCount": 42, # The initial node count for the pool. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.
+          "config": { # Parameters that describe the nodes in a cluster. # The node configuration of the pool.
+            "diskSizeGb": 42, # Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
+            "machineType": "A String", # The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g. `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.
+            "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.
+              "A String",
+            ],
+            "metadata": { # The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-data" Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB. The total size of all keys and values must be less than 512 KB.
+              "a_key": "A String",
+            },
+          },
+          "selfLink": "A String", # Server-defined URL for the resource.
+        },
+      ],
+      "monitoringService": "A String", # The monitoring service the cluster should use to write metrics. Currently available options: * `monitoring.googleapis.com` - the Google Cloud Monitoring service. * `none` - no metrics will be exported from the cluster. * if left as an empty string, `monitoring.googleapis.com` will be used.
+      "createTime": "A String", # [Output only] The time the cluster was created, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
+      "endpoint": "A String", # [Output only] The IP address of this cluster's master endpoint. The endpoint can be accessed from the internet at `https://username:password@endpoint/`. See the `masterAuth` property of this resource for username and password information.
+      "currentNodeCount": 42, # [Output only] The number of nodes currently in the cluster.
+      "name": "A String", # The name of this cluster. The name must be unique within this project and zone, and can be up to 40 characters with the following restrictions: * Lowercase letters, numbers, and hyphens only. * Must start with a letter. * Must end with a number or a letter.
+      "initialClusterVersion": "A String", # [Output only] The software version of the master endpoint and kubelets used in the cluster when it was first created. The version can be upgraded over time.
+      "nodeConfig": { # Parameters that describe the nodes in a cluster. # Parameters used in creating the cluster's nodes. See `nodeConfig` for the description of its properties. For requests, this field should only be used in lieu of a "node_pool" object, since this configuration (along with the "initial_node_count") will be used to create a "NodePool" object with an auto-generated name. Do not use this and a node_pool at the same time. For responses, this field will be populated with the node configuration of the first node pool. If unspecified, the defaults are used.
         "diskSizeGb": 42, # Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
         "machineType": "A String", # The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g. `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.
-        "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with *gcr.io*. If unspecified, no scopes are added.
+        "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.
           "A String",
         ],
+        "metadata": { # The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-data" Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB. The total size of all keys and values must be less than 512 KB.
+          "a_key": "A String",
+        },
       },
-      "initialNodeCount": 42, # The number of nodes to create in this cluster. You must ensure that your Compute Engine [resource quota](/compute/docs/resource-quotas) is sufficient for this number of instances. You must also have available firewall and routes quota.
       "clusterIpv4Cidr": "A String", # The IP address range of the container pods in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`). Leave blank to have one automatically chosen or specify a `/14` block in `10.0.0.0/8`.
-      "monitoringService": "A String", # The monitoring service that the cluster should write metrics to. Currently available options: * "monitoring.googleapis.com" - the Google Cloud Monitoring service * "none" - no metrics will be exported from the cluster * "" - default value; the default is "monitoring.googleapis.com"
-      "zone": "A String", # [Output only] The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.
-      "createTime": "A String", # [Output only] The time the cluster was created, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
+      "subnetwork": "A String", # The name of the Google Compute Engine [subnetwork](/compute/docs/subnetworks) to which the cluster is connected.
       "selfLink": "A String", # [Output only] Server-defined URL for the resource.
-      "description": "A String", # An optional description of this cluster.
     },
   }
 
@@ -145,23 +189,24 @@
 Returns:
   An object of the form:
 
-    { # Defines the operation resource. All fields are output only.
+    { # This operation resource represents operations that may have happened or are happening on the cluster. All fields are output only.
     "status": "A String", # The current status of the operation.
     "name": "A String", # The server-assigned ID for the operation.
     "zone": "A String", # The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the operation is taking place.
-    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
-    "operationType": "A String", # The operation type.
+    "detail": "A String", # Detailed operation progress, if available.
     "selfLink": "A String", # Server-defined URL for the resource.
+    "operationType": "A String", # The operation type.
+    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
     "targetLink": "A String", # Server-defined URL for the target of the operation.
   }</pre>
 </div>
 
 <div class="method">
     <code class="details" id="delete">delete(projectId, zone, clusterId, x__xgafv=None)</code>
-  <pre>Deletes the cluster, including the Kubernetes endpoint and all worker nodes. Firewalls and routes that were configured during cluster creation are also deleted.
+  <pre>Deletes the cluster, including the Kubernetes endpoint and all worker nodes. Firewalls and routes that were configured during cluster creation are also deleted. Other Google Compute Engine resources that might be in use by the cluster (e.g. load balancer resources) will not be deleted if they weren't present at the initial create time.
 
 Args:
-  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  projectId: string, The Google Developers Console [project ID or project number](https://support.google.com/cloud/answer/6158840). (required)
   zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides. (required)
   clusterId: string, The name of the cluster to delete. (required)
   x__xgafv: string, V1 error format.
@@ -169,23 +214,24 @@
 Returns:
   An object of the form:
 
-    { # Defines the operation resource. All fields are output only.
+    { # This operation resource represents operations that may have happened or are happening on the cluster. All fields are output only.
     "status": "A String", # The current status of the operation.
     "name": "A String", # The server-assigned ID for the operation.
     "zone": "A String", # The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the operation is taking place.
-    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
-    "operationType": "A String", # The operation type.
+    "detail": "A String", # Detailed operation progress, if available.
     "selfLink": "A String", # Server-defined URL for the resource.
+    "operationType": "A String", # The operation type.
+    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
     "targetLink": "A String", # Server-defined URL for the target of the operation.
   }</pre>
 </div>
 
 <div class="method">
     <code class="details" id="get">get(projectId, zone, clusterId, x__xgafv=None)</code>
-  <pre>Gets a specific cluster.
+  <pre>Gets the details of a specific cluster.
 
 Args:
-  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  projectId: string, The Google Developers Console [project ID or project number](https://support.google.com/cloud/answer/6158840). (required)
   zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides. (required)
   clusterId: string, The name of the cluster to retrieve. (required)
   x__xgafv: string, V1 error format.
@@ -194,41 +240,80 @@
   An object of the form:
 
     { # A Google Container Engine cluster.
-    "status": "A String", # [Output only] The current status of this cluster.
-    "nodeIpv4CidrSize": 42, # [Output only] The size of the address space on each node for hosting containers. This is provisioned from within the container_ipv4_cidr range.
-    "statusMessage": "A String", # [Output only] Additional information about the current status of this cluster, if available.
-    "endpoint": "A String", # [Output only] The IP address of this cluster's Kubernetes master endpoint. The endpoint can be accessed from the internet at `https://username:password@endpoint/`. See the `masterAuth` property of this resource for username and password information.
-    "name": "A String", # The name of this cluster. The name must be unique within this project and zone, and can be up to 40 characters with the following restrictions: * Lowercase letters, numbers, and hyphens only. * Must start with a letter. * Must end with a number or a letter.
-    "loggingService": "A String", # The logging service that the cluster should write logs to. Currently available options: * "logging.googleapis.com" - the Google Cloud Logging service * "none" - no logs will be exported from the cluster * "" - default value; the default is "logging.googleapis.com"
-    "currentNodeVersion": "A String", # [Output only] The current version of the node software components. If they are currently at different versions because they're in the process of being upgraded, this reflects the minimum version of any of them.
+    "nodeIpv4CidrSize": 42, # [Output only] The size of the address space on each node for hosting containers. This is provisioned from within the `container_ipv4_cidr` range.
+    "addonsConfig": { # Configuration for the addons that can be automatically spun up in the cluster, enabling additional functionality. # Configurations for the various addons available to run in the cluster.
+      "httpLoadBalancing": { # Configuration options for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster. # Configuration for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster.
+        "disabled": True or False, # Whether the HTTP Load Balancing controller is enabled in the cluster. When enabled, it runs a small pod in the cluster that manages the load balancers.
+      },
+      "horizontalPodAutoscaling": { # Configuration options for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods. # Configuration for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods.
+        "disabled": True or False, # Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. When enabled, it ensures that a Heapster pod is running in the cluster, which is also used by the Cloud Monitoring service.
+      },
+    },
+    "locations": [ # The list of Google Compute Engine [locations](/compute/docs/zones#available) in which the cluster's nodes should be located.
+      "A String",
+    ],
+    "network": "A String", # The name of the Google Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the cluster is connected. If left unspecified, the `default` network will be used.
+    "loggingService": "A String", # The logging service the cluster should use to write logs. Currently available options: * `logging.googleapis.com` - the Google Cloud Logging service. * `none` - no logs will be exported from the cluster. * if left as an empty string,`logging.googleapis.com` will be used.
     "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this cluster.
       "A String",
     ],
+    "zone": "A String", # [Output only] The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.
+    "statusMessage": "A String", # [Output only] Additional information about the current status of this cluster, if available.
+    "servicesIpv4Cidr": "A String", # [Output only] The IP address range of the Kubernetes services in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `1.2.3.4/29`). Service addresses are typically put in the last `/16` from the container CIDR.
+    "status": "A String", # [Output only] The current status of this cluster.
+    "description": "A String", # An optional description of this cluster.
+    "currentNodeVersion": "A String", # [Output only] The current version of the node software components. If they are currently at multiple versions because they're in the process of being upgraded, this reflects the minimum version of all nodes.
     "currentMasterVersion": "A String", # [Output only] The current software version of the master endpoint.
-    "servicesIpv4Cidr": "A String", # [Output only] The IP address range of the Kubernetes services in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `1.2.3.4/29`). Service addresses are typically put in the last /16 from the container CIDR.
-    "masterAuth": { # The authentication information for accessing the master endpoint. Authentication can be done using HTTP basic auth or using client certificates. # The authentication information for accessing the master.
-      "username": "A String", # The username to use for HTTP basic authentication when accessing the Kubernetes master endpoint.
-      "password": "A String", # The password to use for HTTP basic authentication when accessing the Kubernetes master endpoint. Because the master endpoint is open to the internet, you should create a strong password.
-      "clientKey": "A String", # [Output only] Base64 encoded private key used by clients to authenticate to the cluster endpoint.
-      "clientCertificate": "A String", # [Output only] Base64 encoded public certificate used by clients to authenticate to the cluster endpoint.
-      "clusterCaCertificate": "A String", # [Output only] Base64 encoded public certificate that is the root of trust for the cluster.
+    "masterAuth": { # The authentication information for accessing the master endpoint. Authentication can be done using HTTP basic auth or using client certificates. # The authentication information for accessing the master endpoint.
+      "username": "A String", # The username to use for HTTP basic authentication to the master endpoint.
+      "password": "A String", # The password to use for HTTP basic authentication to the master endpoint. Because the master endpoint is open to the Internet, you should create a strong password.
+      "clientKey": "A String", # [Output only] Base64-encoded private key used by clients to authenticate to the cluster endpoint.
+      "clientCertificate": "A String", # [Output only] Base64-encoded public certificate used by clients to authenticate to the cluster endpoint.
+      "clusterCaCertificate": "A String", # [Output only] Base64-encoded public certificate that is the root of trust for the cluster.
     },
-    "network": "A String", # The name of the Google Compute Engine [network](/compute/docs/networking#networks_1) to which the cluster is connected. If left unspecified, the "default" network will be used.
-    "initialClusterVersion": "A String", # [Output only] The software version of Kubernetes master and kubelets used in the cluster when it was first created. The version can be upgraded over time.
-    "nodeConfig": { # Per-node parameters. # Parameters used in creating the cluster's nodes. See the descriptions of the child properties of `nodeConfig`. If unspecified, the defaults for all child properties are used.
+    "initialNodeCount": 42, # The number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota. For requests, this field should only be used in lieu of a "node_pool" object, since this configuration (along with the "node_config") will be used to create a "NodePool" object with an auto-generated name. Do not use this and a node_pool at the same time.
+    "nodePools": [ # The node pools associated with this cluster. When creating a new cluster, only a single node pool should be specified. This field should not be set if "node_config" or "initial_node_count" are specified.
+      { # NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes (i.e. VM's), with a common configuration and specification, under the control of the cluster master. They may have a set of Kubernetes labels applied to them, which may be used to reference them during pod scheduling. They may also be resized up or down, to accommodate the workload.
+        "status": "A String", # The status of the nodes in this pool instance.
+        "statusMessage": "A String", # [Output only] Additional information about the current status of this node pool instance, if available.
+        "name": "A String", # The name of the node pool.
+        "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this node pool.
+          "A String",
+        ],
+        "version": "A String", # The version of the Kubernetes of this node.
+        "initialNodeCount": 42, # The initial node count for the pool. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.
+        "config": { # Parameters that describe the nodes in a cluster. # The node configuration of the pool.
+          "diskSizeGb": 42, # Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
+          "machineType": "A String", # The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g. `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.
+          "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.
+            "A String",
+          ],
+          "metadata": { # The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-data" Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB. The total size of all keys and values must be less than 512 KB.
+            "a_key": "A String",
+          },
+        },
+        "selfLink": "A String", # Server-defined URL for the resource.
+      },
+    ],
+    "monitoringService": "A String", # The monitoring service the cluster should use to write metrics. Currently available options: * `monitoring.googleapis.com` - the Google Cloud Monitoring service. * `none` - no metrics will be exported from the cluster. * if left as an empty string, `monitoring.googleapis.com` will be used.
+    "createTime": "A String", # [Output only] The time the cluster was created, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
+    "endpoint": "A String", # [Output only] The IP address of this cluster's master endpoint. The endpoint can be accessed from the internet at `https://username:password@endpoint/`. See the `masterAuth` property of this resource for username and password information.
+    "currentNodeCount": 42, # [Output only] The number of nodes currently in the cluster.
+    "name": "A String", # The name of this cluster. The name must be unique within this project and zone, and can be up to 40 characters with the following restrictions: * Lowercase letters, numbers, and hyphens only. * Must start with a letter. * Must end with a number or a letter.
+    "initialClusterVersion": "A String", # [Output only] The software version of the master endpoint and kubelets used in the cluster when it was first created. The version can be upgraded over time.
+    "nodeConfig": { # Parameters that describe the nodes in a cluster. # Parameters used in creating the cluster's nodes. See `nodeConfig` for the description of its properties. For requests, this field should only be used in lieu of a "node_pool" object, since this configuration (along with the "initial_node_count") will be used to create a "NodePool" object with an auto-generated name. Do not use this and a node_pool at the same time. For responses, this field will be populated with the node configuration of the first node pool. If unspecified, the defaults are used.
       "diskSizeGb": 42, # Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
       "machineType": "A String", # The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g. `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.
-      "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with *gcr.io*. If unspecified, no scopes are added.
+      "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.
         "A String",
       ],
+      "metadata": { # The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-data" Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB. The total size of all keys and values must be less than 512 KB.
+        "a_key": "A String",
+      },
     },
-    "initialNodeCount": 42, # The number of nodes to create in this cluster. You must ensure that your Compute Engine [resource quota](/compute/docs/resource-quotas) is sufficient for this number of instances. You must also have available firewall and routes quota.
     "clusterIpv4Cidr": "A String", # The IP address range of the container pods in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`). Leave blank to have one automatically chosen or specify a `/14` block in `10.0.0.0/8`.
-    "monitoringService": "A String", # The monitoring service that the cluster should write metrics to. Currently available options: * "monitoring.googleapis.com" - the Google Cloud Monitoring service * "none" - no metrics will be exported from the cluster * "" - default value; the default is "monitoring.googleapis.com"
-    "zone": "A String", # [Output only] The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.
-    "createTime": "A String", # [Output only] The time the cluster was created, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
+    "subnetwork": "A String", # The name of the Google Compute Engine [subnetwork](/compute/docs/subnetworks) to which the cluster is connected.
     "selfLink": "A String", # [Output only] Server-defined URL for the resource.
-    "description": "A String", # An optional description of this cluster.
   }</pre>
 </div>
 
@@ -237,7 +322,7 @@
   <pre>Lists all clusters owned by a project in either the specified zone or all zones.
 
 Args:
-  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  projectId: string, The Google Developers Console [project ID or project number](https://support.google.com/cloud/answer/6158840). (required)
   zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides, or "-" for all zones. (required)
   x__xgafv: string, V1 error format.
 
@@ -247,60 +332,113 @@
     { # ListClustersResponse is the result of ListClustersRequest.
     "clusters": [ # A list of clusters in the project in the specified zone, or across all ones.
       { # A Google Container Engine cluster.
-        "status": "A String", # [Output only] The current status of this cluster.
-        "nodeIpv4CidrSize": 42, # [Output only] The size of the address space on each node for hosting containers. This is provisioned from within the container_ipv4_cidr range.
-        "statusMessage": "A String", # [Output only] Additional information about the current status of this cluster, if available.
-        "endpoint": "A String", # [Output only] The IP address of this cluster's Kubernetes master endpoint. The endpoint can be accessed from the internet at `https://username:password@endpoint/`. See the `masterAuth` property of this resource for username and password information.
-        "name": "A String", # The name of this cluster. The name must be unique within this project and zone, and can be up to 40 characters with the following restrictions: * Lowercase letters, numbers, and hyphens only. * Must start with a letter. * Must end with a number or a letter.
-        "loggingService": "A String", # The logging service that the cluster should write logs to. Currently available options: * "logging.googleapis.com" - the Google Cloud Logging service * "none" - no logs will be exported from the cluster * "" - default value; the default is "logging.googleapis.com"
-        "currentNodeVersion": "A String", # [Output only] The current version of the node software components. If they are currently at different versions because they're in the process of being upgraded, this reflects the minimum version of any of them.
+        "nodeIpv4CidrSize": 42, # [Output only] The size of the address space on each node for hosting containers. This is provisioned from within the `container_ipv4_cidr` range.
+        "addonsConfig": { # Configuration for the addons that can be automatically spun up in the cluster, enabling additional functionality. # Configurations for the various addons available to run in the cluster.
+          "httpLoadBalancing": { # Configuration options for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster. # Configuration for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster.
+            "disabled": True or False, # Whether the HTTP Load Balancing controller is enabled in the cluster. When enabled, it runs a small pod in the cluster that manages the load balancers.
+          },
+          "horizontalPodAutoscaling": { # Configuration options for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods. # Configuration for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods.
+            "disabled": True or False, # Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. When enabled, it ensures that a Heapster pod is running in the cluster, which is also used by the Cloud Monitoring service.
+          },
+        },
+        "locations": [ # The list of Google Compute Engine [locations](/compute/docs/zones#available) in which the cluster's nodes should be located.
+          "A String",
+        ],
+        "network": "A String", # The name of the Google Compute Engine [network](/compute/docs/networks-and-firewalls#networks) to which the cluster is connected. If left unspecified, the `default` network will be used.
+        "loggingService": "A String", # The logging service the cluster should use to write logs. Currently available options: * `logging.googleapis.com` - the Google Cloud Logging service. * `none` - no logs will be exported from the cluster. * if left as an empty string,`logging.googleapis.com` will be used.
         "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this cluster.
           "A String",
         ],
+        "zone": "A String", # [Output only] The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.
+        "statusMessage": "A String", # [Output only] Additional information about the current status of this cluster, if available.
+        "servicesIpv4Cidr": "A String", # [Output only] The IP address range of the Kubernetes services in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `1.2.3.4/29`). Service addresses are typically put in the last `/16` from the container CIDR.
+        "status": "A String", # [Output only] The current status of this cluster.
+        "description": "A String", # An optional description of this cluster.
+        "currentNodeVersion": "A String", # [Output only] The current version of the node software components. If they are currently at multiple versions because they're in the process of being upgraded, this reflects the minimum version of all nodes.
         "currentMasterVersion": "A String", # [Output only] The current software version of the master endpoint.
-        "servicesIpv4Cidr": "A String", # [Output only] The IP address range of the Kubernetes services in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `1.2.3.4/29`). Service addresses are typically put in the last /16 from the container CIDR.
-        "masterAuth": { # The authentication information for accessing the master endpoint. Authentication can be done using HTTP basic auth or using client certificates. # The authentication information for accessing the master.
-          "username": "A String", # The username to use for HTTP basic authentication when accessing the Kubernetes master endpoint.
-          "password": "A String", # The password to use for HTTP basic authentication when accessing the Kubernetes master endpoint. Because the master endpoint is open to the internet, you should create a strong password.
-          "clientKey": "A String", # [Output only] Base64 encoded private key used by clients to authenticate to the cluster endpoint.
-          "clientCertificate": "A String", # [Output only] Base64 encoded public certificate used by clients to authenticate to the cluster endpoint.
-          "clusterCaCertificate": "A String", # [Output only] Base64 encoded public certificate that is the root of trust for the cluster.
+        "masterAuth": { # The authentication information for accessing the master endpoint. Authentication can be done using HTTP basic auth or using client certificates. # The authentication information for accessing the master endpoint.
+          "username": "A String", # The username to use for HTTP basic authentication to the master endpoint.
+          "password": "A String", # The password to use for HTTP basic authentication to the master endpoint. Because the master endpoint is open to the Internet, you should create a strong password.
+          "clientKey": "A String", # [Output only] Base64-encoded private key used by clients to authenticate to the cluster endpoint.
+          "clientCertificate": "A String", # [Output only] Base64-encoded public certificate used by clients to authenticate to the cluster endpoint.
+          "clusterCaCertificate": "A String", # [Output only] Base64-encoded public certificate that is the root of trust for the cluster.
         },
-        "network": "A String", # The name of the Google Compute Engine [network](/compute/docs/networking#networks_1) to which the cluster is connected. If left unspecified, the "default" network will be used.
-        "initialClusterVersion": "A String", # [Output only] The software version of Kubernetes master and kubelets used in the cluster when it was first created. The version can be upgraded over time.
-        "nodeConfig": { # Per-node parameters. # Parameters used in creating the cluster's nodes. See the descriptions of the child properties of `nodeConfig`. If unspecified, the defaults for all child properties are used.
+        "initialNodeCount": 42, # The number of nodes to create in this cluster. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota. For requests, this field should only be used in lieu of a "node_pool" object, since this configuration (along with the "node_config") will be used to create a "NodePool" object with an auto-generated name. Do not use this and a node_pool at the same time.
+        "nodePools": [ # The node pools associated with this cluster. When creating a new cluster, only a single node pool should be specified. This field should not be set if "node_config" or "initial_node_count" are specified.
+          { # NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes (i.e. VM's), with a common configuration and specification, under the control of the cluster master. They may have a set of Kubernetes labels applied to them, which may be used to reference them during pod scheduling. They may also be resized up or down, to accommodate the workload.
+            "status": "A String", # The status of the nodes in this pool instance.
+            "statusMessage": "A String", # [Output only] Additional information about the current status of this node pool instance, if available.
+            "name": "A String", # The name of the node pool.
+            "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this node pool.
+              "A String",
+            ],
+            "version": "A String", # The version of the Kubernetes of this node.
+            "initialNodeCount": 42, # The initial node count for the pool. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.
+            "config": { # Parameters that describe the nodes in a cluster. # The node configuration of the pool.
+              "diskSizeGb": 42, # Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
+              "machineType": "A String", # The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g. `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.
+              "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.
+                "A String",
+              ],
+              "metadata": { # The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-data" Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB. The total size of all keys and values must be less than 512 KB.
+                "a_key": "A String",
+              },
+            },
+            "selfLink": "A String", # Server-defined URL for the resource.
+          },
+        ],
+        "monitoringService": "A String", # The monitoring service the cluster should use to write metrics. Currently available options: * `monitoring.googleapis.com` - the Google Cloud Monitoring service. * `none` - no metrics will be exported from the cluster. * if left as an empty string, `monitoring.googleapis.com` will be used.
+        "createTime": "A String", # [Output only] The time the cluster was created, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
+        "endpoint": "A String", # [Output only] The IP address of this cluster's master endpoint. The endpoint can be accessed from the internet at `https://username:password@endpoint/`. See the `masterAuth` property of this resource for username and password information.
+        "currentNodeCount": 42, # [Output only] The number of nodes currently in the cluster.
+        "name": "A String", # The name of this cluster. The name must be unique within this project and zone, and can be up to 40 characters with the following restrictions: * Lowercase letters, numbers, and hyphens only. * Must start with a letter. * Must end with a number or a letter.
+        "initialClusterVersion": "A String", # [Output only] The software version of the master endpoint and kubelets used in the cluster when it was first created. The version can be upgraded over time.
+        "nodeConfig": { # Parameters that describe the nodes in a cluster. # Parameters used in creating the cluster's nodes. See `nodeConfig` for the description of its properties. For requests, this field should only be used in lieu of a "node_pool" object, since this configuration (along with the "initial_node_count") will be used to create a "NodePool" object with an auto-generated name. Do not use this and a node_pool at the same time. For responses, this field will be populated with the node configuration of the first node pool. If unspecified, the defaults are used.
           "diskSizeGb": 42, # Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
           "machineType": "A String", # The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g. `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.
-          "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with *gcr.io*. If unspecified, no scopes are added.
+          "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.
             "A String",
           ],
+          "metadata": { # The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-data" Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB. The total size of all keys and values must be less than 512 KB.
+            "a_key": "A String",
+          },
         },
-        "initialNodeCount": 42, # The number of nodes to create in this cluster. You must ensure that your Compute Engine [resource quota](/compute/docs/resource-quotas) is sufficient for this number of instances. You must also have available firewall and routes quota.
         "clusterIpv4Cidr": "A String", # The IP address range of the container pods in this cluster, in [CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing) notation (e.g. `10.96.0.0/14`). Leave blank to have one automatically chosen or specify a `/14` block in `10.0.0.0/8`.
-        "monitoringService": "A String", # The monitoring service that the cluster should write metrics to. Currently available options: * "monitoring.googleapis.com" - the Google Cloud Monitoring service * "none" - no metrics will be exported from the cluster * "" - default value; the default is "monitoring.googleapis.com"
-        "zone": "A String", # [Output only] The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides.
-        "createTime": "A String", # [Output only] The time the cluster was created, in [RFC3339](https://www.ietf.org/rfc/rfc3339.txt) text format.
+        "subnetwork": "A String", # The name of the Google Compute Engine [subnetwork](/compute/docs/subnetworks) to which the cluster is connected.
         "selfLink": "A String", # [Output only] Server-defined URL for the resource.
-        "description": "A String", # An optional description of this cluster.
       },
     ],
+    "missingZones": [ # If any zones are listed here, the list of clusters returned may be missing those zones.
+      "A String",
+    ],
   }</pre>
 </div>
 
 <div class="method">
     <code class="details" id="update">update(projectId, zone, clusterId, body, x__xgafv=None)</code>
-  <pre>Update settings of a specific cluster.
+  <pre>Updates the settings of a specific cluster.
 
 Args:
-  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  projectId: string, The Google Developers Console [project ID or project number](https://support.google.com/cloud/answer/6158840). (required)
   zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides. (required)
   clusterId: string, The name of the cluster to upgrade. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
-{ # UpdateClusterRequest updates a cluster.
-    "update": { # ClusterUpdate describes an update to the cluster. # A description of the update.
-      "desiredNodeVersion": "A String", # The Kubernetes version to change the nodes to (typically an upgrade). Use "-" to upgrade to the latest version supported by the server.
+{ # UpdateClusterRequest updates the settings of a cluster.
+    "update": { # ClusterUpdate describes an update to the cluster. Exactly one update can be applied to a cluster with each request, so at most one field can be provided. # A description of the update.
+      "desiredMasterVersion": "A String", # The Kubernetes version to change the master to. The only valid value is the latest supported version. Use "-" to have the server automatically select the latest version.
+      "desiredNodePoolId": "A String", # The node pool to be upgraded. This field is mandatory if the "desired_node_version" or "desired_image_family" is specified and there is more than one node pool on the cluster.
+      "desiredNodeVersion": "A String", # The Kubernetes version to change the nodes to (typically an upgrade). Use `-` to upgrade to the latest version supported by the server.
+      "desiredMonitoringService": "A String", # The monitoring service the cluster should use to write metrics. Currently available options: * "monitoring.googleapis.com" - the Google Cloud Monitoring service * "none" - no metrics will be exported from the cluster
+      "desiredAddonsConfig": { # Configuration for the addons that can be automatically spun up in the cluster, enabling additional functionality. # Configurations for the various addons available to run in the cluster.
+        "httpLoadBalancing": { # Configuration options for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster. # Configuration for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster.
+          "disabled": True or False, # Whether the HTTP Load Balancing controller is enabled in the cluster. When enabled, it runs a small pod in the cluster that manages the load balancers.
+        },
+        "horizontalPodAutoscaling": { # Configuration options for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods. # Configuration for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods.
+          "disabled": True or False, # Whether the Horizontal Pod Autoscaling feature is enabled in the cluster. When enabled, it ensures that a Heapster pod is running in the cluster, which is also used by the Cloud Monitoring service.
+        },
+      },
     },
   }
 
@@ -309,13 +447,14 @@
 Returns:
   An object of the form:
 
-    { # Defines the operation resource. All fields are output only.
+    { # This operation resource represents operations that may have happened or are happening on the cluster. All fields are output only.
     "status": "A String", # The current status of the operation.
     "name": "A String", # The server-assigned ID for the operation.
     "zone": "A String", # The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the operation is taking place.
-    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
-    "operationType": "A String", # The operation type.
+    "detail": "A String", # Detailed operation progress, if available.
     "selfLink": "A String", # Server-defined URL for the resource.
+    "operationType": "A String", # The operation type.
+    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
     "targetLink": "A String", # Server-defined URL for the target of the operation.
   }</pre>
 </div>
diff --git a/docs/dyn/container_v1.projects.zones.clusters.nodePools.html b/docs/dyn/container_v1.projects.zones.clusters.nodePools.html
new file mode 100644
index 0000000..f8308e1
--- /dev/null
+++ b/docs/dyn/container_v1.projects.zones.clusters.nodePools.html
@@ -0,0 +1,245 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="container_v1.html">Google Container Engine API</a> . <a href="container_v1.projects.html">projects</a> . <a href="container_v1.projects.zones.html">zones</a> . <a href="container_v1.projects.zones.clusters.html">clusters</a> . <a href="container_v1.projects.zones.clusters.nodePools.html">nodePools</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(projectId, zone, clusterId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a node pool for a cluster.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(projectId, zone, clusterId, nodePoolId, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes a node pool from a cluster.</p>
+<p class="toc_element">
+  <code><a href="#get">get(projectId, zone, clusterId, nodePoolId, x__xgafv=None)</a></code></p>
+<p class="firstline">Retrieves the node pool requested.</p>
+<p class="toc_element">
+  <code><a href="#list">list(projectId, zone, clusterId, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists the node pools for a cluster.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(projectId, zone, clusterId, body, x__xgafv=None)</code>
+  <pre>Creates a node pool for a cluster.
+
+Args:
+  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides. (required)
+  clusterId: string, The name of the cluster. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # CreateNodePoolRequest creates a node pool for a cluster.
+    "nodePool": { # NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes (i.e. VM's), with a common configuration and specification, under the control of the cluster master. They may have a set of Kubernetes labels applied to them, which may be used to reference them during pod scheduling. They may also be resized up or down, to accommodate the workload. # The node pool to create.
+      "status": "A String", # The status of the nodes in this pool instance.
+      "statusMessage": "A String", # [Output only] Additional information about the current status of this node pool instance, if available.
+      "name": "A String", # The name of the node pool.
+      "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this node pool.
+        "A String",
+      ],
+      "version": "A String", # The version of the Kubernetes of this node.
+      "initialNodeCount": 42, # The initial node count for the pool. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.
+      "config": { # Parameters that describe the nodes in a cluster. # The node configuration of the pool.
+        "diskSizeGb": 42, # Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
+        "machineType": "A String", # The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g. `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.
+        "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.
+          "A String",
+        ],
+        "metadata": { # The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-data" Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB. The total size of all keys and values must be less than 512 KB.
+          "a_key": "A String",
+        },
+      },
+      "selfLink": "A String", # Server-defined URL for the resource.
+    },
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # This operation resource represents operations that may have happened or are happening on the cluster. All fields are output only.
+    "status": "A String", # The current status of the operation.
+    "name": "A String", # The server-assigned ID for the operation.
+    "zone": "A String", # The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the operation is taking place.
+    "detail": "A String", # Detailed operation progress, if available.
+    "selfLink": "A String", # Server-defined URL for the resource.
+    "operationType": "A String", # The operation type.
+    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
+    "targetLink": "A String", # Server-defined URL for the target of the operation.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(projectId, zone, clusterId, nodePoolId, x__xgafv=None)</code>
+  <pre>Deletes a node pool from a cluster.
+
+Args:
+  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides. (required)
+  clusterId: string, The name of the cluster. (required)
+  nodePoolId: string, The name of the node pool to delete. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # This operation resource represents operations that may have happened or are happening on the cluster. All fields are output only.
+    "status": "A String", # The current status of the operation.
+    "name": "A String", # The server-assigned ID for the operation.
+    "zone": "A String", # The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the operation is taking place.
+    "detail": "A String", # Detailed operation progress, if available.
+    "selfLink": "A String", # Server-defined URL for the resource.
+    "operationType": "A String", # The operation type.
+    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
+    "targetLink": "A String", # Server-defined URL for the target of the operation.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(projectId, zone, clusterId, nodePoolId, x__xgafv=None)</code>
+  <pre>Retrieves the node pool requested.
+
+Args:
+  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides. (required)
+  clusterId: string, The name of the cluster. (required)
+  nodePoolId: string, The name of the node pool. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes (i.e. VM's), with a common configuration and specification, under the control of the cluster master. They may have a set of Kubernetes labels applied to them, which may be used to reference them during pod scheduling. They may also be resized up or down, to accommodate the workload.
+    "status": "A String", # The status of the nodes in this pool instance.
+    "statusMessage": "A String", # [Output only] Additional information about the current status of this node pool instance, if available.
+    "name": "A String", # The name of the node pool.
+    "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this node pool.
+      "A String",
+    ],
+    "version": "A String", # The version of the Kubernetes of this node.
+    "initialNodeCount": 42, # The initial node count for the pool. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.
+    "config": { # Parameters that describe the nodes in a cluster. # The node configuration of the pool.
+      "diskSizeGb": 42, # Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
+      "machineType": "A String", # The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g. `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.
+      "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.
+        "A String",
+      ],
+      "metadata": { # The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-data" Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB. The total size of all keys and values must be less than 512 KB.
+        "a_key": "A String",
+      },
+    },
+    "selfLink": "A String", # Server-defined URL for the resource.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(projectId, zone, clusterId, x__xgafv=None)</code>
+  <pre>Lists the node pools for a cluster.
+
+Args:
+  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides. (required)
+  clusterId: string, The name of the cluster. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # ListNodePoolsResponse is the result of ListNodePoolsRequest.
+    "nodePools": [ # A list of node pools for a cluster.
+      { # NodePool contains the name and configuration for a cluster's node pool. Node pools are a set of nodes (i.e. VM's), with a common configuration and specification, under the control of the cluster master. They may have a set of Kubernetes labels applied to them, which may be used to reference them during pod scheduling. They may also be resized up or down, to accommodate the workload.
+        "status": "A String", # The status of the nodes in this pool instance.
+        "statusMessage": "A String", # [Output only] Additional information about the current status of this node pool instance, if available.
+        "name": "A String", # The name of the node pool.
+        "instanceGroupUrls": [ # [Output only] The resource URLs of [instance groups](/compute/docs/instance-groups/) associated with this node pool.
+          "A String",
+        ],
+        "version": "A String", # The version of the Kubernetes of this node.
+        "initialNodeCount": 42, # The initial node count for the pool. You must ensure that your Compute Engine resource quota is sufficient for this number of instances. You must also have available firewall and routes quota.
+        "config": { # Parameters that describe the nodes in a cluster. # The node configuration of the pool.
+          "diskSizeGb": 42, # Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. If unspecified, the default disk size is 100GB.
+          "machineType": "A String", # The name of a Google Compute Engine [machine type](/compute/docs/machine-types) (e.g. `n1-standard-1`). If unspecified, the default machine type is `n1-standard-1`.
+          "oauthScopes": [ # The set of Google API scopes to be made available on all of the node VMs under the "default" service account. The following scopes are recommended, but not required, and by default are not included: * `https://www.googleapis.com/auth/compute` is required for mounting persistent storage on your nodes. * `https://www.googleapis.com/auth/devstorage.read_only` is required for communicating with **gcr.io** (the [Google Container Registry](/container-registry/)). If unspecified, no scopes are added, unless Cloud Logging or Cloud Monitoring are enabled, in which case their required scopes will be added.
+            "A String",
+          ],
+          "metadata": { # The metadata key/value pairs assigned to instances in the cluster. Keys must conform to the regexp [a-zA-Z0-9-_]+ and be less than 128 bytes in length. These are reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project or be one of the four reserved keys: "instance-template", "kube-env", "startup-script", and "user-data" Values are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on them is that each value's size must be less than or equal to 32 KB. The total size of all keys and values must be less than 512 KB.
+            "a_key": "A String",
+          },
+        },
+        "selfLink": "A String", # Server-defined URL for the resource.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/container_v1.projects.zones.html b/docs/dyn/container_v1.projects.zones.html
index 9a47dfe..b840f4c 100644
--- a/docs/dyn/container_v1.projects.zones.html
+++ b/docs/dyn/container_v1.projects.zones.html
@@ -93,18 +93,22 @@
   <pre>Returns configuration info about the Container Engine service.
 
 Args:
-  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
-  zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) to return operations for, or "-" for all zones. (required)
+  projectId: string, The Google Developers Console [project ID or project number](https://support.google.com/cloud/answer/6158840). (required)
+  zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) to return operations for. (required)
   x__xgafv: string, V1 error format.
 
 Returns:
   An object of the form:
 
-    { # Container Engine Server configuration.
-    "defaultClusterVersion": "A String", # What version this server deploys by default.
+    { # Container Engine service configuration.
+    "defaultClusterVersion": "A String", # Version of Kubernetes the service deploys by default.
     "validNodeVersions": [ # List of valid node upgrade target versions.
       "A String",
     ],
+    "defaultImageFamily": "A String", # Default image family.
+    "validImageFamilies": [ # List of valid image families.
+      "A String",
+    ],
   }</pre>
 </div>
 
diff --git a/docs/dyn/container_v1.projects.zones.operations.html b/docs/dyn/container_v1.projects.zones.operations.html
index 9846d95..cbade27 100644
--- a/docs/dyn/container_v1.projects.zones.operations.html
+++ b/docs/dyn/container_v1.projects.zones.operations.html
@@ -86,7 +86,7 @@
   <pre>Gets the specified operation.
 
 Args:
-  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
+  projectId: string, The Google Developers Console [project ID or project number](https://support.google.com/cloud/answer/6158840). (required)
   zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the cluster resides. (required)
   operationId: string, The server-assigned `name` of the operation. (required)
   x__xgafv: string, V1 error format.
@@ -94,13 +94,14 @@
 Returns:
   An object of the form:
 
-    { # Defines the operation resource. All fields are output only.
+    { # This operation resource represents operations that may have happened or are happening on the cluster. All fields are output only.
     "status": "A String", # The current status of the operation.
     "name": "A String", # The server-assigned ID for the operation.
     "zone": "A String", # The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the operation is taking place.
-    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
-    "operationType": "A String", # The operation type.
+    "detail": "A String", # Detailed operation progress, if available.
     "selfLink": "A String", # Server-defined URL for the resource.
+    "operationType": "A String", # The operation type.
+    "statusMessage": "A String", # If an error has occurred, a textual description of the error.
     "targetLink": "A String", # Server-defined URL for the target of the operation.
   }</pre>
 </div>
@@ -110,8 +111,8 @@
   <pre>Lists all operations in a project in a specific zone or all zones.
 
 Args:
-  projectId: string, The Google Developers Console [project ID or project number](https://developers.google.com/console/help/new/#projectnumber). (required)
-  zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) to return operations for, or "-" for all zones. (required)
+  projectId: string, The Google Developers Console [project ID or project number](https://support.google.com/cloud/answer/6158840). (required)
+  zone: string, The name of the Google Compute Engine [zone](/compute/docs/zones#available) to return operations for, or `-` for all zones. (required)
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -119,16 +120,20 @@
 
     { # ListOperationsResponse is the result of ListOperationsRequest.
     "operations": [ # A list of operations in the project in the specified zone.
-      { # Defines the operation resource. All fields are output only.
+      { # This operation resource represents operations that may have happened or are happening on the cluster. All fields are output only.
         "status": "A String", # The current status of the operation.
         "name": "A String", # The server-assigned ID for the operation.
         "zone": "A String", # The name of the Google Compute Engine [zone](/compute/docs/zones#available) in which the operation is taking place.
-        "statusMessage": "A String", # If an error has occurred, a textual description of the error.
-        "operationType": "A String", # The operation type.
+        "detail": "A String", # Detailed operation progress, if available.
         "selfLink": "A String", # Server-defined URL for the resource.
+        "operationType": "A String", # The operation type.
+        "statusMessage": "A String", # If an error has occurred, a textual description of the error.
         "targetLink": "A String", # Server-defined URL for the target of the operation.
       },
     ],
+    "missingZones": [ # If any zones are listed here, the list of operations returned may be missing the operations from those zones.
+      "A String",
+    ],
   }</pre>
 </div>
 
diff --git a/docs/dyn/content_v2.datafeeds.html b/docs/dyn/content_v2.datafeeds.html
index a1deeef..e1c5769 100644
--- a/docs/dyn/content_v2.datafeeds.html
+++ b/docs/dyn/content_v2.datafeeds.html
@@ -129,6 +129,7 @@
               "weekday": "A String", # The day of the week the feed file should be fetched.
               "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
               "password": "A String", # An optional password for fetch_url.
+              "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
               "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
             },
             "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
@@ -183,6 +184,7 @@
               "weekday": "A String", # The day of the week the feed file should be fetched.
               "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
               "password": "A String", # An optional password for fetch_url.
+              "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
               "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
             },
             "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
@@ -237,6 +239,7 @@
         "weekday": "A String", # The day of the week the feed file should be fetched.
         "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
         "password": "A String", # An optional password for fetch_url.
+        "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
         "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
       },
       "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
@@ -275,6 +278,7 @@
       "weekday": "A String", # The day of the week the feed file should be fetched.
       "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
       "password": "A String", # An optional password for fetch_url.
+      "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
       "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
     },
     "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
@@ -308,6 +312,7 @@
         "weekday": "A String", # The day of the week the feed file should be fetched.
         "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
         "password": "A String", # An optional password for fetch_url.
+        "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
         "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
       },
       "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
@@ -353,6 +358,7 @@
             "weekday": "A String", # The day of the week the feed file should be fetched.
             "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
             "password": "A String", # An optional password for fetch_url.
+            "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
             "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
           },
           "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
@@ -408,6 +414,7 @@
       "weekday": "A String", # The day of the week the feed file should be fetched.
       "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
       "password": "A String", # An optional password for fetch_url.
+      "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
       "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
     },
     "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
@@ -441,6 +448,7 @@
         "weekday": "A String", # The day of the week the feed file should be fetched.
         "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
         "password": "A String", # An optional password for fetch_url.
+        "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
         "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
       },
       "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
@@ -480,6 +488,7 @@
       "weekday": "A String", # The day of the week the feed file should be fetched.
       "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
       "password": "A String", # An optional password for fetch_url.
+      "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
       "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
     },
     "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
@@ -513,6 +522,7 @@
         "weekday": "A String", # The day of the week the feed file should be fetched.
         "timeZone": "A String", # Time zone used for schedule. UTC by default. E.g., "America/Los_Angeles".
         "password": "A String", # An optional password for fetch_url.
+        "minuteOfHour": 42, # The minute of the hour the feed file should be fetched (0-59). Read-only.
         "dayOfMonth": 42, # The day of the month the feed file should be fetched (1-31).
       },
       "targetCountry": "A String", # The country where the items in the feed will be included in the search index, represented as a CLDR territory code.
diff --git a/docs/dyn/content_v2.orders.html b/docs/dyn/content_v2.orders.html
index c41153b..a5db27b 100644
--- a/docs/dyn/content_v2.orders.html
+++ b/docs/dyn/content_v2.orders.html
@@ -233,7 +233,7 @@
 {
     "testOrder": { # The test order to create.
       "customer": { # The details of the customer who placed the order.
-        "explicitMarketingPreference": True or False, # If set, this indicates the user had a choice to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow. Optional.
+        "explicitMarketingPreference": True or False, # If set, this indicates the user explicitly chose to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow. Optional.
         "fullName": "A String", # Full name of the customer.
         "email": "A String", # Email address of the customer.
       },
@@ -433,7 +433,7 @@
         },
         "order": { # The retrieved order. Only defined if the method is get and if the request was successful.
           "customer": { # The details of the customer who placed the order.
-            "explicitMarketingPreference": True or False, # If set, this indicates the user had a choice to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow.
+            "explicitMarketingPreference": True or False, # If set, this indicates the user explicitly chose to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow.
             "fullName": "A String", # Full name of the customer.
             "email": "A String", # Email address of the customer.
           },
@@ -599,7 +599,7 @@
               },
               "cancellations": [ # Cancellations of the line item.
                 {
-                  "reason": "A String", # The reason for the cancellation.
+                  "reason": "A String", # The reason for the cancellation. Orders that are cancelled with a noIventory reason will lead to the removal of the product from POG until you make an update to that product. This will not affect your Shopping ads.
                   "creationDate": "A String", # Date on which the cancellation has been created, in ISO 8601 format.
                   "reasonText": "A String", # The explanation of the reason.
                   "actor": "A String", # The actor that created the cancellation.
@@ -657,7 +657,7 @@
 
     {
     "customer": { # The details of the customer who placed the order.
-      "explicitMarketingPreference": True or False, # If set, this indicates the user had a choice to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow.
+      "explicitMarketingPreference": True or False, # If set, this indicates the user explicitly chose to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow.
       "fullName": "A String", # Full name of the customer.
       "email": "A String", # Email address of the customer.
     },
@@ -823,7 +823,7 @@
         },
         "cancellations": [ # Cancellations of the line item.
           {
-            "reason": "A String", # The reason for the cancellation.
+            "reason": "A String", # The reason for the cancellation. Orders that are cancelled with a noIventory reason will lead to the removal of the product from POG until you make an update to that product. This will not affect your Shopping ads.
             "creationDate": "A String", # Date on which the cancellation has been created, in ISO 8601 format.
             "reasonText": "A String", # The explanation of the reason.
             "actor": "A String", # The actor that created the cancellation.
@@ -879,7 +879,7 @@
     "kind": "content#ordersGetByMerchantOrderIdResponse", # Identifies what kind of resource this is. Value: the fixed string "content#ordersGetByMerchantOrderIdResponse".
     "order": { # The requested order.
       "customer": { # The details of the customer who placed the order.
-        "explicitMarketingPreference": True or False, # If set, this indicates the user had a choice to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow.
+        "explicitMarketingPreference": True or False, # If set, this indicates the user explicitly chose to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow.
         "fullName": "A String", # Full name of the customer.
         "email": "A String", # Email address of the customer.
       },
@@ -1045,7 +1045,7 @@
           },
           "cancellations": [ # Cancellations of the line item.
             {
-              "reason": "A String", # The reason for the cancellation.
+              "reason": "A String", # The reason for the cancellation. Orders that are cancelled with a noIventory reason will lead to the removal of the product from POG until you make an update to that product. This will not affect your Shopping ads.
               "creationDate": "A String", # Date on which the cancellation has been created, in ISO 8601 format.
               "reasonText": "A String", # The explanation of the reason.
               "actor": "A String", # The actor that created the cancellation.
@@ -1107,7 +1107,7 @@
     "kind": "content#ordersGetTestOrderTemplateResponse", # Identifies what kind of resource this is. Value: the fixed string "content#ordersGetTestOrderTemplateResponse".
     "template": { # The requested test order template.
       "customer": { # The details of the customer who placed the order.
-        "explicitMarketingPreference": True or False, # If set, this indicates the user had a choice to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow. Optional.
+        "explicitMarketingPreference": True or False, # If set, this indicates the user explicitly chose to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow. Optional.
         "fullName": "A String", # Full name of the customer.
         "email": "A String", # Email address of the customer.
       },
@@ -1248,7 +1248,7 @@
     "resources": [
       {
         "customer": { # The details of the customer who placed the order.
-          "explicitMarketingPreference": True or False, # If set, this indicates the user had a choice to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow.
+          "explicitMarketingPreference": True or False, # If set, this indicates the user explicitly chose to opt in or out of providing marketing rights to the merchant. If unset, this indicates the user has already made this choice in a previous purchase, and was thus not shown the marketing right opt in/out checkbox during the Purchases on Google checkout flow.
           "fullName": "A String", # Full name of the customer.
           "email": "A String", # Email address of the customer.
         },
@@ -1414,7 +1414,7 @@
             },
             "cancellations": [ # Cancellations of the line item.
               {
-                "reason": "A String", # The reason for the cancellation.
+                "reason": "A String", # The reason for the cancellation. Orders that are cancelled with a noIventory reason will lead to the removal of the product from POG until you make an update to that product. This will not affect your Shopping ads.
                 "creationDate": "A String", # Date on which the cancellation has been created, in ISO 8601 format.
                 "reasonText": "A String", # The explanation of the reason.
                 "actor": "A String", # The actor that created the cancellation.
diff --git a/docs/dyn/content_v2.products.html b/docs/dyn/content_v2.products.html
index 4daaa36..c1f20d3 100644
--- a/docs/dyn/content_v2.products.html
+++ b/docs/dyn/content_v2.products.html
@@ -136,7 +136,7 @@
             ],
             "targetCountry": "A String", # The CLDR territory code for the item.
             "sizeType": "A String", # The cut of the item. Recommended for apparel items.
-            "offerId": "A String", # An identifier of the item.
+            "offerId": "A String", # An identifier of the item. Leading and trailing whitespaces are stripped and multiple whitespaces are replaced by a single whitespace upon submission. Only valid unicode characters are accepted. See the products feed specification for details.
             "shippingWidth": { # Width of the item for shipping.
               "value": 3.14, # The dimension of the product used to calculate the shipping cost of the item.
               "unit": "A String", # The unit of value.
@@ -186,7 +186,7 @@
               },
             ],
             "mpn": "A String", # Manufacturer Part Number (MPN) of the item.
-            "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see product feed specifications).
+            "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see products feed specification).
             "brand": "A String", # Brand of the item.
             "material": "A String", # The material of which the item is made.
             "shippingLength": { # Length of the item for shipping.
@@ -287,7 +287,7 @@
               "currency": "A String", # The currency of the price.
               "value": "A String", # The price represented as a number.
             },
-            "productType": "A String", # Your category of the item (formatted as in product feeds specification).
+            "productType": "A String", # Your category of the item (formatted as in products feed specification).
             "displayAdsSimilarIds": [ # Advertiser-specified recommendations.
               "A String",
             ],
@@ -354,7 +354,7 @@
             ],
             "targetCountry": "A String", # The CLDR territory code for the item.
             "sizeType": "A String", # The cut of the item. Recommended for apparel items.
-            "offerId": "A String", # An identifier of the item.
+            "offerId": "A String", # An identifier of the item. Leading and trailing whitespaces are stripped and multiple whitespaces are replaced by a single whitespace upon submission. Only valid unicode characters are accepted. See the products feed specification for details.
             "shippingWidth": { # Width of the item for shipping.
               "value": 3.14, # The dimension of the product used to calculate the shipping cost of the item.
               "unit": "A String", # The unit of value.
@@ -404,7 +404,7 @@
               },
             ],
             "mpn": "A String", # Manufacturer Part Number (MPN) of the item.
-            "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see product feed specifications).
+            "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see products feed specification).
             "brand": "A String", # Brand of the item.
             "material": "A String", # The material of which the item is made.
             "shippingLength": { # Length of the item for shipping.
@@ -505,7 +505,7 @@
               "currency": "A String", # The currency of the price.
               "value": "A String", # The price represented as a number.
             },
-            "productType": "A String", # Your category of the item (formatted as in product feeds specification).
+            "productType": "A String", # Your category of the item (formatted as in products feed specification).
             "displayAdsSimilarIds": [ # Advertiser-specified recommendations.
               "A String",
             ],
@@ -570,7 +570,7 @@
       ],
       "targetCountry": "A String", # The CLDR territory code for the item.
       "sizeType": "A String", # The cut of the item. Recommended for apparel items.
-      "offerId": "A String", # An identifier of the item.
+      "offerId": "A String", # An identifier of the item. Leading and trailing whitespaces are stripped and multiple whitespaces are replaced by a single whitespace upon submission. Only valid unicode characters are accepted. See the products feed specification for details.
       "shippingWidth": { # Width of the item for shipping.
         "value": 3.14, # The dimension of the product used to calculate the shipping cost of the item.
         "unit": "A String", # The unit of value.
@@ -620,7 +620,7 @@
         },
       ],
       "mpn": "A String", # Manufacturer Part Number (MPN) of the item.
-      "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see product feed specifications).
+      "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see products feed specification).
       "brand": "A String", # Brand of the item.
       "material": "A String", # The material of which the item is made.
       "shippingLength": { # Length of the item for shipping.
@@ -721,7 +721,7 @@
         "currency": "A String", # The currency of the price.
         "value": "A String", # The price represented as a number.
       },
-      "productType": "A String", # Your category of the item (formatted as in product feeds specification).
+      "productType": "A String", # Your category of the item (formatted as in products feed specification).
       "displayAdsSimilarIds": [ # Advertiser-specified recommendations.
         "A String",
       ],
@@ -770,7 +770,7 @@
     ],
     "targetCountry": "A String", # The CLDR territory code for the item.
     "sizeType": "A String", # The cut of the item. Recommended for apparel items.
-    "offerId": "A String", # An identifier of the item.
+    "offerId": "A String", # An identifier of the item. Leading and trailing whitespaces are stripped and multiple whitespaces are replaced by a single whitespace upon submission. Only valid unicode characters are accepted. See the products feed specification for details.
     "shippingWidth": { # Width of the item for shipping.
       "value": 3.14, # The dimension of the product used to calculate the shipping cost of the item.
       "unit": "A String", # The unit of value.
@@ -820,7 +820,7 @@
       },
     ],
     "mpn": "A String", # Manufacturer Part Number (MPN) of the item.
-    "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see product feed specifications).
+    "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see products feed specification).
     "brand": "A String", # Brand of the item.
     "material": "A String", # The material of which the item is made.
     "shippingLength": { # Length of the item for shipping.
@@ -921,7 +921,7 @@
       "currency": "A String", # The currency of the price.
       "value": "A String", # The price represented as a number.
     },
-    "productType": "A String", # Your category of the item (formatted as in product feeds specification).
+    "productType": "A String", # Your category of the item (formatted as in products feed specification).
     "displayAdsSimilarIds": [ # Advertiser-specified recommendations.
       "A String",
     ],
@@ -965,7 +965,7 @@
       ],
       "targetCountry": "A String", # The CLDR territory code for the item.
       "sizeType": "A String", # The cut of the item. Recommended for apparel items.
-      "offerId": "A String", # An identifier of the item.
+      "offerId": "A String", # An identifier of the item. Leading and trailing whitespaces are stripped and multiple whitespaces are replaced by a single whitespace upon submission. Only valid unicode characters are accepted. See the products feed specification for details.
       "shippingWidth": { # Width of the item for shipping.
         "value": 3.14, # The dimension of the product used to calculate the shipping cost of the item.
         "unit": "A String", # The unit of value.
@@ -1015,7 +1015,7 @@
         },
       ],
       "mpn": "A String", # Manufacturer Part Number (MPN) of the item.
-      "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see product feed specifications).
+      "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see products feed specification).
       "brand": "A String", # Brand of the item.
       "material": "A String", # The material of which the item is made.
       "shippingLength": { # Length of the item for shipping.
@@ -1116,7 +1116,7 @@
         "currency": "A String", # The currency of the price.
         "value": "A String", # The price represented as a number.
       },
-      "productType": "A String", # Your category of the item (formatted as in product feeds specification).
+      "productType": "A String", # Your category of the item (formatted as in products feed specification).
       "displayAdsSimilarIds": [ # Advertiser-specified recommendations.
         "A String",
       ],
@@ -1173,7 +1173,7 @@
           ],
           "targetCountry": "A String", # The CLDR territory code for the item.
           "sizeType": "A String", # The cut of the item. Recommended for apparel items.
-          "offerId": "A String", # An identifier of the item.
+          "offerId": "A String", # An identifier of the item. Leading and trailing whitespaces are stripped and multiple whitespaces are replaced by a single whitespace upon submission. Only valid unicode characters are accepted. See the products feed specification for details.
           "shippingWidth": { # Width of the item for shipping.
             "value": 3.14, # The dimension of the product used to calculate the shipping cost of the item.
             "unit": "A String", # The unit of value.
@@ -1223,7 +1223,7 @@
             },
           ],
           "mpn": "A String", # Manufacturer Part Number (MPN) of the item.
-          "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see product feed specifications).
+          "salePriceEffectiveDate": "A String", # Date range during which the item is on sale (see products feed specification).
           "brand": "A String", # Brand of the item.
           "material": "A String", # The material of which the item is made.
           "shippingLength": { # Length of the item for shipping.
@@ -1324,7 +1324,7 @@
             "currency": "A String", # The currency of the price.
             "value": "A String", # The price represented as a number.
           },
-          "productType": "A String", # Your category of the item (formatted as in product feeds specification).
+          "productType": "A String", # Your category of the item (formatted as in products feed specification).
           "displayAdsSimilarIds": [ # Advertiser-specified recommendations.
             "A String",
           ],
diff --git a/docs/dyn/dataflow_v1b3.projects.jobs.html b/docs/dyn/dataflow_v1b3.projects.jobs.html
index d26949e..c1835f8 100644
--- a/docs/dyn/dataflow_v1b3.projects.jobs.html
+++ b/docs/dyn/dataflow_v1b3.projects.jobs.html
@@ -94,7 +94,7 @@
   <code><a href="#getMetrics">getMetrics(projectId, jobId, startTime=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Request the job status.</p>
 <p class="toc_element">
-  <code><a href="#list">list(projectId, pageSize=None, pageToken=None, x__xgafv=None, view=None)</a></code></p>
+  <code><a href="#list">list(projectId, pageSize=None, filter=None, pageToken=None, x__xgafv=None, view=None)</a></code></p>
 <p class="firstline">List the jobs of a project</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
@@ -178,6 +178,7 @@
           "machineType": "A String", # Machine type (e.g. "n1-standard-1"). If empty or unspecified, the service will attempt to choose a reasonable default.
           "network": "A String", # Network to which VMs will be assigned. If empty or unspecified, the service will use the network "default".
           "zone": "A String", # Zone to run the worker pools in. If empty or unspecified, the service will attempt to choose a reasonable default.
+          "numThreadsPerWorker": 42, # The number of threads per worker harness. If empty or unspecified, the service will choose a number of threads (according to the number of cores on the selected machine type for batch, or 1 by convention for streaming).
           "onHostMaintenance": "A String", # The action to take on host maintenance, as defined by the Google Compute Engine API.
           "diskType": "A String", # Type of root disk for VMs. If empty or unspecified, the service will attempt to choose a reasonable default.
           "teardownPolicy": "A String", # Sets the policy for determining when to turndown worker pool. Allowed values are: TEARDOWN_ALWAYS, TEARDOWN_ON_SUCCESS, and TEARDOWN_NEVER. TEARDOWN_ALWAYS means workers are always torn down regardless of whether the job succeeds. TEARDOWN_ON_SUCCESS means workers are torn down if the job succeeds. TEARDOWN_NEVER means the workers are never torn down. If the workers are not torn down by the service, they will continue to run and use Google Compute Engine VM resources in the user's project until they are explicitly terminated by the user. Because of this, Google recommends using the TEARDOWN_ALWAYS policy except for small, manually supervised test jobs. If unknown or unspecified, the service will attempt to choose a reasonable default.
@@ -201,6 +202,7 @@
             "maxNumWorkers": 42, # The maximum number of workers to cap scaling at.
             "algorithm": "A String", # The algorithm to use for autoscaling.
           },
+          "subnetwork": "A String", # Subnetwork to which VMs will be assigned, if desired. Expected to be of the form "zones/ZONE/subnetworks/SUBNETWORK".
           "dataDisks": [ # Data disks that are used by a VM in this workflow.
             { # Describes the data disk used by a workflow job.
               "mountPoint": "A String", # Directory in a VM where disk is mounted.
@@ -313,6 +315,7 @@
             "machineType": "A String", # Machine type (e.g. "n1-standard-1"). If empty or unspecified, the service will attempt to choose a reasonable default.
             "network": "A String", # Network to which VMs will be assigned. If empty or unspecified, the service will use the network "default".
             "zone": "A String", # Zone to run the worker pools in. If empty or unspecified, the service will attempt to choose a reasonable default.
+            "numThreadsPerWorker": 42, # The number of threads per worker harness. If empty or unspecified, the service will choose a number of threads (according to the number of cores on the selected machine type for batch, or 1 by convention for streaming).
             "onHostMaintenance": "A String", # The action to take on host maintenance, as defined by the Google Compute Engine API.
             "diskType": "A String", # Type of root disk for VMs. If empty or unspecified, the service will attempt to choose a reasonable default.
             "teardownPolicy": "A String", # Sets the policy for determining when to turndown worker pool. Allowed values are: TEARDOWN_ALWAYS, TEARDOWN_ON_SUCCESS, and TEARDOWN_NEVER. TEARDOWN_ALWAYS means workers are always torn down regardless of whether the job succeeds. TEARDOWN_ON_SUCCESS means workers are torn down if the job succeeds. TEARDOWN_NEVER means the workers are never torn down. If the workers are not torn down by the service, they will continue to run and use Google Compute Engine VM resources in the user's project until they are explicitly terminated by the user. Because of this, Google recommends using the TEARDOWN_ALWAYS policy except for small, manually supervised test jobs. If unknown or unspecified, the service will attempt to choose a reasonable default.
@@ -336,6 +339,7 @@
               "maxNumWorkers": 42, # The maximum number of workers to cap scaling at.
               "algorithm": "A String", # The algorithm to use for autoscaling.
             },
+            "subnetwork": "A String", # Subnetwork to which VMs will be assigned, if desired. Expected to be of the form "zones/ZONE/subnetworks/SUBNETWORK".
             "dataDisks": [ # Data disks that are used by a VM in this workflow.
               { # Describes the data disk used by a workflow job.
                 "mountPoint": "A String", # Directory in a VM where disk is mounted.
@@ -455,6 +459,7 @@
             "machineType": "A String", # Machine type (e.g. "n1-standard-1"). If empty or unspecified, the service will attempt to choose a reasonable default.
             "network": "A String", # Network to which VMs will be assigned. If empty or unspecified, the service will use the network "default".
             "zone": "A String", # Zone to run the worker pools in. If empty or unspecified, the service will attempt to choose a reasonable default.
+            "numThreadsPerWorker": 42, # The number of threads per worker harness. If empty or unspecified, the service will choose a number of threads (according to the number of cores on the selected machine type for batch, or 1 by convention for streaming).
             "onHostMaintenance": "A String", # The action to take on host maintenance, as defined by the Google Compute Engine API.
             "diskType": "A String", # Type of root disk for VMs. If empty or unspecified, the service will attempt to choose a reasonable default.
             "teardownPolicy": "A String", # Sets the policy for determining when to turndown worker pool. Allowed values are: TEARDOWN_ALWAYS, TEARDOWN_ON_SUCCESS, and TEARDOWN_NEVER. TEARDOWN_ALWAYS means workers are always torn down regardless of whether the job succeeds. TEARDOWN_ON_SUCCESS means workers are torn down if the job succeeds. TEARDOWN_NEVER means the workers are never torn down. If the workers are not torn down by the service, they will continue to run and use Google Compute Engine VM resources in the user's project until they are explicitly terminated by the user. Because of this, Google recommends using the TEARDOWN_ALWAYS policy except for small, manually supervised test jobs. If unknown or unspecified, the service will attempt to choose a reasonable default.
@@ -478,6 +483,7 @@
               "maxNumWorkers": 42, # The maximum number of workers to cap scaling at.
               "algorithm": "A String", # The algorithm to use for autoscaling.
             },
+            "subnetwork": "A String", # Subnetwork to which VMs will be assigned, if desired. Expected to be of the form "zones/ZONE/subnetworks/SUBNETWORK".
             "dataDisks": [ # Data disks that are used by a VM in this workflow.
               { # Describes the data disk used by a workflow job.
                 "mountPoint": "A String", # Directory in a VM where disk is mounted.
@@ -557,12 +563,13 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(projectId, pageSize=None, pageToken=None, x__xgafv=None, view=None)</code>
+    <code class="details" id="list">list(projectId, pageSize=None, filter=None, pageToken=None, x__xgafv=None, view=None)</code>
   <pre>List the jobs of a project
 
 Args:
   projectId: string, The project which owns the jobs. (required)
   pageSize: integer, If there are many jobs, limit response to at most this many. The actual number of jobs returned will be the lesser of max_responses and an unspecified server-defined limit.
+  filter: string, The kind of filter to use.
   pageToken: string, Set this to the 'next_page_token' field of a previous response to request additional results in a long list.
   x__xgafv: string, V1 error format.
   view: string, Level of information requested in response. Default is SUMMARY.
@@ -639,6 +646,7 @@
                 "machineType": "A String", # Machine type (e.g. "n1-standard-1"). If empty or unspecified, the service will attempt to choose a reasonable default.
                 "network": "A String", # Network to which VMs will be assigned. If empty or unspecified, the service will use the network "default".
                 "zone": "A String", # Zone to run the worker pools in. If empty or unspecified, the service will attempt to choose a reasonable default.
+                "numThreadsPerWorker": 42, # The number of threads per worker harness. If empty or unspecified, the service will choose a number of threads (according to the number of cores on the selected machine type for batch, or 1 by convention for streaming).
                 "onHostMaintenance": "A String", # The action to take on host maintenance, as defined by the Google Compute Engine API.
                 "diskType": "A String", # Type of root disk for VMs. If empty or unspecified, the service will attempt to choose a reasonable default.
                 "teardownPolicy": "A String", # Sets the policy for determining when to turndown worker pool. Allowed values are: TEARDOWN_ALWAYS, TEARDOWN_ON_SUCCESS, and TEARDOWN_NEVER. TEARDOWN_ALWAYS means workers are always torn down regardless of whether the job succeeds. TEARDOWN_ON_SUCCESS means workers are torn down if the job succeeds. TEARDOWN_NEVER means the workers are never torn down. If the workers are not torn down by the service, they will continue to run and use Google Compute Engine VM resources in the user's project until they are explicitly terminated by the user. Because of this, Google recommends using the TEARDOWN_ALWAYS policy except for small, manually supervised test jobs. If unknown or unspecified, the service will attempt to choose a reasonable default.
@@ -662,6 +670,7 @@
                   "maxNumWorkers": 42, # The maximum number of workers to cap scaling at.
                   "algorithm": "A String", # The algorithm to use for autoscaling.
                 },
+                "subnetwork": "A String", # Subnetwork to which VMs will be assigned, if desired. Expected to be of the form "zones/ZONE/subnetworks/SUBNETWORK".
                 "dataDisks": [ # Data disks that are used by a VM in this workflow.
                   { # Describes the data disk used by a workflow job.
                     "mountPoint": "A String", # Directory in a VM where disk is mounted.
@@ -794,6 +803,7 @@
           "machineType": "A String", # Machine type (e.g. "n1-standard-1"). If empty or unspecified, the service will attempt to choose a reasonable default.
           "network": "A String", # Network to which VMs will be assigned. If empty or unspecified, the service will use the network "default".
           "zone": "A String", # Zone to run the worker pools in. If empty or unspecified, the service will attempt to choose a reasonable default.
+          "numThreadsPerWorker": 42, # The number of threads per worker harness. If empty or unspecified, the service will choose a number of threads (according to the number of cores on the selected machine type for batch, or 1 by convention for streaming).
           "onHostMaintenance": "A String", # The action to take on host maintenance, as defined by the Google Compute Engine API.
           "diskType": "A String", # Type of root disk for VMs. If empty or unspecified, the service will attempt to choose a reasonable default.
           "teardownPolicy": "A String", # Sets the policy for determining when to turndown worker pool. Allowed values are: TEARDOWN_ALWAYS, TEARDOWN_ON_SUCCESS, and TEARDOWN_NEVER. TEARDOWN_ALWAYS means workers are always torn down regardless of whether the job succeeds. TEARDOWN_ON_SUCCESS means workers are torn down if the job succeeds. TEARDOWN_NEVER means the workers are never torn down. If the workers are not torn down by the service, they will continue to run and use Google Compute Engine VM resources in the user's project until they are explicitly terminated by the user. Because of this, Google recommends using the TEARDOWN_ALWAYS policy except for small, manually supervised test jobs. If unknown or unspecified, the service will attempt to choose a reasonable default.
@@ -817,6 +827,7 @@
             "maxNumWorkers": 42, # The maximum number of workers to cap scaling at.
             "algorithm": "A String", # The algorithm to use for autoscaling.
           },
+          "subnetwork": "A String", # Subnetwork to which VMs will be assigned, if desired. Expected to be of the form "zones/ZONE/subnetworks/SUBNETWORK".
           "dataDisks": [ # Data disks that are used by a VM in this workflow.
             { # Describes the data disk used by a workflow job.
               "mountPoint": "A String", # Directory in a VM where disk is mounted.
@@ -927,6 +938,7 @@
             "machineType": "A String", # Machine type (e.g. "n1-standard-1"). If empty or unspecified, the service will attempt to choose a reasonable default.
             "network": "A String", # Network to which VMs will be assigned. If empty or unspecified, the service will use the network "default".
             "zone": "A String", # Zone to run the worker pools in. If empty or unspecified, the service will attempt to choose a reasonable default.
+            "numThreadsPerWorker": 42, # The number of threads per worker harness. If empty or unspecified, the service will choose a number of threads (according to the number of cores on the selected machine type for batch, or 1 by convention for streaming).
             "onHostMaintenance": "A String", # The action to take on host maintenance, as defined by the Google Compute Engine API.
             "diskType": "A String", # Type of root disk for VMs. If empty or unspecified, the service will attempt to choose a reasonable default.
             "teardownPolicy": "A String", # Sets the policy for determining when to turndown worker pool. Allowed values are: TEARDOWN_ALWAYS, TEARDOWN_ON_SUCCESS, and TEARDOWN_NEVER. TEARDOWN_ALWAYS means workers are always torn down regardless of whether the job succeeds. TEARDOWN_ON_SUCCESS means workers are torn down if the job succeeds. TEARDOWN_NEVER means the workers are never torn down. If the workers are not torn down by the service, they will continue to run and use Google Compute Engine VM resources in the user's project until they are explicitly terminated by the user. Because of this, Google recommends using the TEARDOWN_ALWAYS policy except for small, manually supervised test jobs. If unknown or unspecified, the service will attempt to choose a reasonable default.
@@ -950,6 +962,7 @@
               "maxNumWorkers": 42, # The maximum number of workers to cap scaling at.
               "algorithm": "A String", # The algorithm to use for autoscaling.
             },
+            "subnetwork": "A String", # Subnetwork to which VMs will be assigned, if desired. Expected to be of the form "zones/ZONE/subnetworks/SUBNETWORK".
             "dataDisks": [ # Data disks that are used by a VM in this workflow.
               { # Describes the data disk used by a workflow job.
                 "mountPoint": "A String", # Directory in a VM where disk is mounted.
diff --git a/docs/dyn/dataflow_v1b3.projects.jobs.workItems.html b/docs/dyn/dataflow_v1b3.projects.jobs.workItems.html
index 92ea56f..3a6ca60 100644
--- a/docs/dyn/dataflow_v1b3.projects.jobs.workItems.html
+++ b/docs/dyn/dataflow_v1b3.projects.jobs.workItems.html
@@ -464,6 +464,7 @@
                 ],
               },
             ],
+            "persistentStateVersion": 42, # Version number for persistent state.
             "userStageToComputationNameMap": { # Maps user stage names to stable computation names.
               "a_key": "A String",
             },
diff --git a/docs/dyn/dataproc_v1.html b/docs/dyn/dataproc_v1.html
index 3166115..34f037b 100644
--- a/docs/dyn/dataproc_v1.html
+++ b/docs/dyn/dataproc_v1.html
@@ -75,11 +75,6 @@
 <h1><a href="dataproc_v1.html">Google Cloud Dataproc API</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="dataproc_v1.media.html">media()</a></code>
-</p>
-<p class="firstline">Returns the media Resource.</p>
-
-<p class="toc_element">
   <code><a href="dataproc_v1.projects.html">projects()</a></code>
 </p>
 <p class="firstline">Returns the projects Resource.</p>
diff --git a/docs/dyn/dataproc_v1.projects.regions.clusters.html b/docs/dyn/dataproc_v1.projects.regions.clusters.html
index 13e47a9..0ae70a4 100644
--- a/docs/dyn/dataproc_v1.projects.regions.clusters.html
+++ b/docs/dyn/dataproc_v1.projects.regions.clusters.html
@@ -102,7 +102,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the cluster belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
@@ -113,9 +113,9 @@
     "detail": "A String", # Optional details of cluster's state.
   },
   "clusterUuid": "A String", # [Output-only] A cluster UUID (Unique Universal Identifier). Cloud Dataproc generates this value when it creates the cluster.
-  "clusterName": "A String", # [Required] The cluster name. Cluster names within a project must be unique. Names from deleted clusters can be reused.
+  "clusterName": "A String", # [Required] The cluster name. Cluster names within a project must be unique. Names of deleted clusters can be reused.
   "projectId": "A String", # [Required] The Google Cloud Platform project ID that the cluster belongs to.
-  "statusHistory": [ # [Output-only] Previous cluster statuses.
+  "statusHistory": [ # [Output-only] The previous cluster status.
     { # The status of a cluster and its instances.
       "state": "A String", # The cluster's state.
       "stateStartTime": "A String", # Time when this state was entered.
@@ -125,19 +125,19 @@
   "config": { # The cluster config. # [Required] The cluster config. Note that Cloud Dataproc may set default values, and values may change when clusters are updated.
     "softwareConfig": { # Specifies the selection and config of software inside the cluster. # [Optional] The config settings for software inside the cluster.
       "imageVersion": "A String", # [Optional] The version of software inside the cluster. It must match the regular expression `[0-9]+\.[0-9]+`. If unspecified, it defaults to the latest version (see [Cloud Dataproc Versioning](/dataproc/versioning)).
-      "properties": { # [Optional] The properties to set on daemon config files. Property keys are specified in "prefix:property" format, such as "core:fs.defaultFS". The following are supported prefixes and their mappings: core - core-site.xml hdfs - hdfs-site.xml mapred - mapred-site.xml yarn - yarn-site.xml hive - hive-site.xml pig - pig.properties spark - spark-defaults.conf
+      "properties": { # [Optional] The properties to set on daemon config files. Property keys are specified in `prefix:property` format, such as `core:fs.defaultFS`. The following are supported prefixes and their mappings: * core: `core-site.xml` * hdfs: `hdfs-site.xml` * mapred: `mapred-site.xml` * yarn: `yarn-site.xml` * hive: `hive-site.xml` * pig: `pig.properties` * spark: `spark-defaults.conf`
         "a_key": "A String",
       },
     },
     "configBucket": "A String", # [Optional] A Google Cloud Storage staging bucket used for sharing generated SSH keys and config. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, and then it will create and manage this project-level, per-location bucket for you.
-    "gceClusterConfig": { # Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster. # [Optional] The shared Google Compute Engine config settings for all instances in a cluster.
+    "gceClusterConfig": { # Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster. # [Required] The shared Google Compute Engine config settings for all instances in a cluster.
       "networkUri": "A String", # The Google Compute Engine network to be used for machine communications. Cannot be specified with subnetwork_uri. If neither network_uri nor subnetwork_uri is specified, the "default" network of the project is used, if it exists. Cannot be a "Custom Subnet Network" (see https://cloud.google.com/compute/docs/subnetworks for more information). Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default`.
       "tags": [ # The Google Compute Engine tags to add to all instances.
         "A String",
       ],
       "zoneUri": "A String", # [Required] The zone where the Google Compute Engine cluster will be located. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]`.
       "subnetworkUri": "A String", # The Google Compute Engine subnetwork to be used for machine communications. Cannot be specified with network_uri. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0`.
-      "serviceAccountScopes": [ # The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: - https://www.googleapis.com/auth/cloud.useraccounts.readonly - https://www.googleapis.com/auth/devstorage.read_write - https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: - https://www.googleapis.com/auth/bigquery - https://www.googleapis.com/auth/bigtable.admin.table - https://www.googleapis.com/auth/bigtable.data - https://www.googleapis.com/auth/devstorage.full_control
+      "serviceAccountScopes": [ # The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: * https://www.googleapis.com/auth/cloud.useraccounts.readonly * https://www.googleapis.com/auth/devstorage.read_write * https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: * https://www.googleapis.com/auth/bigquery * https://www.googleapis.com/auth/bigtable.admin.table * https://www.googleapis.com/auth/bigtable.data * https://www.googleapis.com/auth/devstorage.full_control
         "A String",
       ],
       "metadata": { # The Google Compute Engine metadata entries to add to all instances.
@@ -147,7 +147,7 @@
     "workerConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for worker instances in a cluster.
       "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
       "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-      "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+      "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
         "A String",
       ],
       "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -170,7 +170,7 @@
     "secondaryWorkerConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for additional worker instances in a cluster.
       "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
       "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-      "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+      "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
         "A String",
       ],
       "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -187,7 +187,7 @@
     "masterConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for the master instance in a cluster.
       "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
       "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-      "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+      "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
         "A String",
       ],
       "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -223,7 +223,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
@@ -236,7 +236,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the cluster belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   clusterName: string, [Required] The cluster name. (required)
   x__xgafv: string, V1 error format.
 
@@ -257,7 +257,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
@@ -270,7 +270,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the cluster belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   clusterName: string, [Required] The cluster name. (required)
   body: object, The request body. (required)
     The object takes the form of:
@@ -297,7 +297,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
@@ -310,7 +310,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the cluster belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   clusterName: string, [Required] The cluster name. (required)
   x__xgafv: string, V1 error format.
 
@@ -324,9 +324,9 @@
       "detail": "A String", # Optional details of cluster's state.
     },
     "clusterUuid": "A String", # [Output-only] A cluster UUID (Unique Universal Identifier). Cloud Dataproc generates this value when it creates the cluster.
-    "clusterName": "A String", # [Required] The cluster name. Cluster names within a project must be unique. Names from deleted clusters can be reused.
+    "clusterName": "A String", # [Required] The cluster name. Cluster names within a project must be unique. Names of deleted clusters can be reused.
     "projectId": "A String", # [Required] The Google Cloud Platform project ID that the cluster belongs to.
-    "statusHistory": [ # [Output-only] Previous cluster statuses.
+    "statusHistory": [ # [Output-only] The previous cluster status.
       { # The status of a cluster and its instances.
         "state": "A String", # The cluster's state.
         "stateStartTime": "A String", # Time when this state was entered.
@@ -336,19 +336,19 @@
     "config": { # The cluster config. # [Required] The cluster config. Note that Cloud Dataproc may set default values, and values may change when clusters are updated.
       "softwareConfig": { # Specifies the selection and config of software inside the cluster. # [Optional] The config settings for software inside the cluster.
         "imageVersion": "A String", # [Optional] The version of software inside the cluster. It must match the regular expression `[0-9]+\.[0-9]+`. If unspecified, it defaults to the latest version (see [Cloud Dataproc Versioning](/dataproc/versioning)).
-        "properties": { # [Optional] The properties to set on daemon config files. Property keys are specified in "prefix:property" format, such as "core:fs.defaultFS". The following are supported prefixes and their mappings: core - core-site.xml hdfs - hdfs-site.xml mapred - mapred-site.xml yarn - yarn-site.xml hive - hive-site.xml pig - pig.properties spark - spark-defaults.conf
+        "properties": { # [Optional] The properties to set on daemon config files. Property keys are specified in `prefix:property` format, such as `core:fs.defaultFS`. The following are supported prefixes and their mappings: * core: `core-site.xml` * hdfs: `hdfs-site.xml` * mapred: `mapred-site.xml` * yarn: `yarn-site.xml` * hive: `hive-site.xml` * pig: `pig.properties` * spark: `spark-defaults.conf`
           "a_key": "A String",
         },
       },
       "configBucket": "A String", # [Optional] A Google Cloud Storage staging bucket used for sharing generated SSH keys and config. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, and then it will create and manage this project-level, per-location bucket for you.
-      "gceClusterConfig": { # Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster. # [Optional] The shared Google Compute Engine config settings for all instances in a cluster.
+      "gceClusterConfig": { # Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster. # [Required] The shared Google Compute Engine config settings for all instances in a cluster.
         "networkUri": "A String", # The Google Compute Engine network to be used for machine communications. Cannot be specified with subnetwork_uri. If neither network_uri nor subnetwork_uri is specified, the "default" network of the project is used, if it exists. Cannot be a "Custom Subnet Network" (see https://cloud.google.com/compute/docs/subnetworks for more information). Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default`.
         "tags": [ # The Google Compute Engine tags to add to all instances.
           "A String",
         ],
         "zoneUri": "A String", # [Required] The zone where the Google Compute Engine cluster will be located. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]`.
         "subnetworkUri": "A String", # The Google Compute Engine subnetwork to be used for machine communications. Cannot be specified with network_uri. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0`.
-        "serviceAccountScopes": [ # The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: - https://www.googleapis.com/auth/cloud.useraccounts.readonly - https://www.googleapis.com/auth/devstorage.read_write - https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: - https://www.googleapis.com/auth/bigquery - https://www.googleapis.com/auth/bigtable.admin.table - https://www.googleapis.com/auth/bigtable.data - https://www.googleapis.com/auth/devstorage.full_control
+        "serviceAccountScopes": [ # The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: * https://www.googleapis.com/auth/cloud.useraccounts.readonly * https://www.googleapis.com/auth/devstorage.read_write * https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: * https://www.googleapis.com/auth/bigquery * https://www.googleapis.com/auth/bigtable.admin.table * https://www.googleapis.com/auth/bigtable.data * https://www.googleapis.com/auth/devstorage.full_control
           "A String",
         ],
         "metadata": { # The Google Compute Engine metadata entries to add to all instances.
@@ -358,7 +358,7 @@
       "workerConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for worker instances in a cluster.
         "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
         "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-        "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+        "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
           "A String",
         ],
         "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -381,7 +381,7 @@
       "secondaryWorkerConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for additional worker instances in a cluster.
         "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
         "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-        "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+        "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
           "A String",
         ],
         "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -398,7 +398,7 @@
       "masterConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for the master instance in a cluster.
         "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
         "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-        "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+        "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
           "A String",
         ],
         "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -422,7 +422,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the cluster belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   pageSize: integer, The standard List page size.
   pageToken: string, The standard List page token.
   x__xgafv: string, V1 error format.
@@ -431,7 +431,7 @@
   An object of the form:
 
     { # The list of all clusters in a project.
-    "nextPageToken": "A String", # The standard List next-page token.
+    "nextPageToken": "A String", # [Optional] This token is included in the response if there are more results to fetch. To fetch additional results, provide this value as the `page_token` in a subsequent ListClustersRequest.
     "clusters": [ # [Output-only] The clusters in the project.
       { # Describes the identifying information, config, and status of a cluster of Google Compute Engine instances.
         "status": { # The status of a cluster and its instances. # [Output-only] Cluster status.
@@ -440,9 +440,9 @@
           "detail": "A String", # Optional details of cluster's state.
         },
         "clusterUuid": "A String", # [Output-only] A cluster UUID (Unique Universal Identifier). Cloud Dataproc generates this value when it creates the cluster.
-        "clusterName": "A String", # [Required] The cluster name. Cluster names within a project must be unique. Names from deleted clusters can be reused.
+        "clusterName": "A String", # [Required] The cluster name. Cluster names within a project must be unique. Names of deleted clusters can be reused.
         "projectId": "A String", # [Required] The Google Cloud Platform project ID that the cluster belongs to.
-        "statusHistory": [ # [Output-only] Previous cluster statuses.
+        "statusHistory": [ # [Output-only] The previous cluster status.
           { # The status of a cluster and its instances.
             "state": "A String", # The cluster's state.
             "stateStartTime": "A String", # Time when this state was entered.
@@ -452,19 +452,19 @@
         "config": { # The cluster config. # [Required] The cluster config. Note that Cloud Dataproc may set default values, and values may change when clusters are updated.
           "softwareConfig": { # Specifies the selection and config of software inside the cluster. # [Optional] The config settings for software inside the cluster.
             "imageVersion": "A String", # [Optional] The version of software inside the cluster. It must match the regular expression `[0-9]+\.[0-9]+`. If unspecified, it defaults to the latest version (see [Cloud Dataproc Versioning](/dataproc/versioning)).
-            "properties": { # [Optional] The properties to set on daemon config files. Property keys are specified in "prefix:property" format, such as "core:fs.defaultFS". The following are supported prefixes and their mappings: core - core-site.xml hdfs - hdfs-site.xml mapred - mapred-site.xml yarn - yarn-site.xml hive - hive-site.xml pig - pig.properties spark - spark-defaults.conf
+            "properties": { # [Optional] The properties to set on daemon config files. Property keys are specified in `prefix:property` format, such as `core:fs.defaultFS`. The following are supported prefixes and their mappings: * core: `core-site.xml` * hdfs: `hdfs-site.xml` * mapred: `mapred-site.xml` * yarn: `yarn-site.xml` * hive: `hive-site.xml` * pig: `pig.properties` * spark: `spark-defaults.conf`
               "a_key": "A String",
             },
           },
           "configBucket": "A String", # [Optional] A Google Cloud Storage staging bucket used for sharing generated SSH keys and config. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, and then it will create and manage this project-level, per-location bucket for you.
-          "gceClusterConfig": { # Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster. # [Optional] The shared Google Compute Engine config settings for all instances in a cluster.
+          "gceClusterConfig": { # Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster. # [Required] The shared Google Compute Engine config settings for all instances in a cluster.
             "networkUri": "A String", # The Google Compute Engine network to be used for machine communications. Cannot be specified with subnetwork_uri. If neither network_uri nor subnetwork_uri is specified, the "default" network of the project is used, if it exists. Cannot be a "Custom Subnet Network" (see https://cloud.google.com/compute/docs/subnetworks for more information). Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default`.
             "tags": [ # The Google Compute Engine tags to add to all instances.
               "A String",
             ],
             "zoneUri": "A String", # [Required] The zone where the Google Compute Engine cluster will be located. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]`.
             "subnetworkUri": "A String", # The Google Compute Engine subnetwork to be used for machine communications. Cannot be specified with network_uri. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0`.
-            "serviceAccountScopes": [ # The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: - https://www.googleapis.com/auth/cloud.useraccounts.readonly - https://www.googleapis.com/auth/devstorage.read_write - https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: - https://www.googleapis.com/auth/bigquery - https://www.googleapis.com/auth/bigtable.admin.table - https://www.googleapis.com/auth/bigtable.data - https://www.googleapis.com/auth/devstorage.full_control
+            "serviceAccountScopes": [ # The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: * https://www.googleapis.com/auth/cloud.useraccounts.readonly * https://www.googleapis.com/auth/devstorage.read_write * https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: * https://www.googleapis.com/auth/bigquery * https://www.googleapis.com/auth/bigtable.admin.table * https://www.googleapis.com/auth/bigtable.data * https://www.googleapis.com/auth/devstorage.full_control
               "A String",
             ],
             "metadata": { # The Google Compute Engine metadata entries to add to all instances.
@@ -474,7 +474,7 @@
           "workerConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for worker instances in a cluster.
             "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
             "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-            "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+            "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
               "A String",
             ],
             "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -497,7 +497,7 @@
           "secondaryWorkerConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for additional worker instances in a cluster.
             "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
             "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-            "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+            "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
               "A String",
             ],
             "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -514,7 +514,7 @@
           "masterConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for the master instance in a cluster.
             "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
             "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-            "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+            "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
               "A String",
             ],
             "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -554,7 +554,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project the cluster belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   clusterName: string, [Required] The cluster name. (required)
   body: object, The request body. (required)
     The object takes the form of:
@@ -566,9 +566,9 @@
     "detail": "A String", # Optional details of cluster's state.
   },
   "clusterUuid": "A String", # [Output-only] A cluster UUID (Unique Universal Identifier). Cloud Dataproc generates this value when it creates the cluster.
-  "clusterName": "A String", # [Required] The cluster name. Cluster names within a project must be unique. Names from deleted clusters can be reused.
+  "clusterName": "A String", # [Required] The cluster name. Cluster names within a project must be unique. Names of deleted clusters can be reused.
   "projectId": "A String", # [Required] The Google Cloud Platform project ID that the cluster belongs to.
-  "statusHistory": [ # [Output-only] Previous cluster statuses.
+  "statusHistory": [ # [Output-only] The previous cluster status.
     { # The status of a cluster and its instances.
       "state": "A String", # The cluster's state.
       "stateStartTime": "A String", # Time when this state was entered.
@@ -578,19 +578,19 @@
   "config": { # The cluster config. # [Required] The cluster config. Note that Cloud Dataproc may set default values, and values may change when clusters are updated.
     "softwareConfig": { # Specifies the selection and config of software inside the cluster. # [Optional] The config settings for software inside the cluster.
       "imageVersion": "A String", # [Optional] The version of software inside the cluster. It must match the regular expression `[0-9]+\.[0-9]+`. If unspecified, it defaults to the latest version (see [Cloud Dataproc Versioning](/dataproc/versioning)).
-      "properties": { # [Optional] The properties to set on daemon config files. Property keys are specified in "prefix:property" format, such as "core:fs.defaultFS". The following are supported prefixes and their mappings: core - core-site.xml hdfs - hdfs-site.xml mapred - mapred-site.xml yarn - yarn-site.xml hive - hive-site.xml pig - pig.properties spark - spark-defaults.conf
+      "properties": { # [Optional] The properties to set on daemon config files. Property keys are specified in `prefix:property` format, such as `core:fs.defaultFS`. The following are supported prefixes and their mappings: * core: `core-site.xml` * hdfs: `hdfs-site.xml` * mapred: `mapred-site.xml` * yarn: `yarn-site.xml` * hive: `hive-site.xml` * pig: `pig.properties` * spark: `spark-defaults.conf`
         "a_key": "A String",
       },
     },
     "configBucket": "A String", # [Optional] A Google Cloud Storage staging bucket used for sharing generated SSH keys and config. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, and then it will create and manage this project-level, per-location bucket for you.
-    "gceClusterConfig": { # Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster. # [Optional] The shared Google Compute Engine config settings for all instances in a cluster.
+    "gceClusterConfig": { # Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster. # [Required] The shared Google Compute Engine config settings for all instances in a cluster.
       "networkUri": "A String", # The Google Compute Engine network to be used for machine communications. Cannot be specified with subnetwork_uri. If neither network_uri nor subnetwork_uri is specified, the "default" network of the project is used, if it exists. Cannot be a "Custom Subnet Network" (see https://cloud.google.com/compute/docs/subnetworks for more information). Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default`.
       "tags": [ # The Google Compute Engine tags to add to all instances.
         "A String",
       ],
       "zoneUri": "A String", # [Required] The zone where the Google Compute Engine cluster will be located. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]`.
       "subnetworkUri": "A String", # The Google Compute Engine subnetwork to be used for machine communications. Cannot be specified with network_uri. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0`.
-      "serviceAccountScopes": [ # The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: - https://www.googleapis.com/auth/cloud.useraccounts.readonly - https://www.googleapis.com/auth/devstorage.read_write - https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: - https://www.googleapis.com/auth/bigquery - https://www.googleapis.com/auth/bigtable.admin.table - https://www.googleapis.com/auth/bigtable.data - https://www.googleapis.com/auth/devstorage.full_control
+      "serviceAccountScopes": [ # The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: * https://www.googleapis.com/auth/cloud.useraccounts.readonly * https://www.googleapis.com/auth/devstorage.read_write * https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: * https://www.googleapis.com/auth/bigquery * https://www.googleapis.com/auth/bigtable.admin.table * https://www.googleapis.com/auth/bigtable.data * https://www.googleapis.com/auth/devstorage.full_control
         "A String",
       ],
       "metadata": { # The Google Compute Engine metadata entries to add to all instances.
@@ -600,7 +600,7 @@
     "workerConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for worker instances in a cluster.
       "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
       "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-      "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+      "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
         "A String",
       ],
       "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -623,7 +623,7 @@
     "secondaryWorkerConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for additional worker instances in a cluster.
       "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
       "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-      "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+      "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
         "A String",
       ],
       "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -640,7 +640,7 @@
     "masterConfig": { # The config settings for Google Compute Engine resources in an instance group, such as a master or worker group. # [Optional] The Google Compute Engine config settings for the master instance in a cluster.
       "isPreemptible": True or False, # Specifies that this instance group contains Preemptible Instances.
       "machineTypeUri": "A String", # The Google Compute Engine machine type used for cluster instances. Example: `https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2`.
-      "instanceNames": [ # The list of instance names. Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).
+      "instanceNames": [ # The list of instance names. Cloud Dataproc derives the names from `cluster_name`, `num_instances`, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).
         "A String",
       ],
       "diskConfig": { # Specifies the config of disk options for a group of VM instances. # Disk option config settings.
@@ -657,7 +657,7 @@
   },
 }
 
-  updateMask: string, [Required] Specifies the path, relative to Cluster, of the field to update. For example, to change the number of workers in a cluster to 5, the update_mask parameter would be specified as config.worker_config.num_instances, and the `PATCH` request body would specify the new value, as follows: { "config":{ "workerConfig":{ "numInstances":"5" } } } Note: Currently, config.worker_config.num_instances is the only field that can be updated.
+  updateMask: string, [Required] Specifies the path, relative to Cluster, of the field to update. For example, to change the number of workers in a cluster to 5, the update_mask parameter would be specified as config.worker_config.num_instances, and the `PATCH` request body would specify the new value, as follows: { "config":{ "workerConfig":{ "numInstances":"5" } } } Similarly, to change the number of preemptible workers in a cluster to 5, the update_mask parameter would be config.secondary_worker_config.num_instances, and the `PATCH` request body would be set as follows: { "config":{ "secondaryWorkerConfig":{ "numInstances":"5" } } } Note: Currently, config.worker_config.num_instances and config.secondary_worker_config.num_instances are the only fields that can be updated.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -677,7 +677,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
diff --git a/docs/dyn/dataproc_v1.projects.regions.jobs.html b/docs/dyn/dataproc_v1.projects.regions.jobs.html
index 0b7aa51..e3f6df9 100644
--- a/docs/dyn/dataproc_v1.projects.regions.jobs.html
+++ b/docs/dyn/dataproc_v1.projects.regions.jobs.html
@@ -76,7 +76,7 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#cancel">cancel(projectId, region, jobId, body, x__xgafv=None)</a></code></p>
-<p class="firstline">Starts a job cancellation request. To access the job resource after cancellation, call [regions/{region}/jobs.list](/dataproc/reference/rest/v1/projects.regions/{region}/jobs/list) or [regions/{region}/jobs.get](/dataproc/reference/rest/v1/projects.regions/{region}/jobs/get).</p>
+<p class="firstline">Starts a job cancellation request. To access the job resource after cancellation, call [regions/{region}/jobs.list](/dataproc/reference/rest/v1/projects.regions.jobs/list) or [regions/{region}/jobs.get](/dataproc/reference/rest/v1/projects.regions.jobs/get).</p>
 <p class="toc_element">
   <code><a href="#delete">delete(projectId, region, jobId, x__xgafv=None)</a></code></p>
 <p class="firstline">Deletes the job from the project. If the job is active, the delete fails, and the response returns `FAILED_PRECONDITION`.</p>
@@ -95,11 +95,11 @@
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="cancel">cancel(projectId, region, jobId, body, x__xgafv=None)</code>
-  <pre>Starts a job cancellation request. To access the job resource after cancellation, call [regions/{region}/jobs.list](/dataproc/reference/rest/v1/projects.regions/{region}/jobs/list) or [regions/{region}/jobs.get](/dataproc/reference/rest/v1/projects.regions/{region}/jobs/get).
+  <pre>Starts a job cancellation request. To access the job resource after cancellation, call [regions/{region}/jobs.list](/dataproc/reference/rest/v1/projects.regions.jobs/list) or [regions/{region}/jobs.get](/dataproc/reference/rest/v1/projects.regions.jobs/get).
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the job belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   jobId: string, [Required] The job ID. (required)
   body: object, The request body. (required)
     The object takes the form of:
@@ -130,14 +130,14 @@
       "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `-libjars` or `-Dfoo=bar`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
         "A String",
       ],
-      "fileUris": [ # [Optional] HCFS URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
+      "fileUris": [ # [Optional] HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
         "A String",
       ],
       "mainClass": "A String", # The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in `jar_file_uris`.
       "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.
         "A String",
       ],
-      "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
+      "mainJarFileUri": "A String", # The HCFS URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
       "properties": { # [Optional] A mapping of property names to values, used to configure Hadoop. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site and classes in user code.
         "a_key": "A String",
       },
@@ -151,7 +151,7 @@
     ],
     "placement": { # Cloud Dataproc job config. # [Required] Job information, including how, when, and where to run the job.
       "clusterName": "A String", # [Required] The name of the cluster where the job will be submitted.
-      "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Dataproc service when the job is submitted.
+      "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Cloud Dataproc service when the job is submitted.
     },
     "reference": { # Encapsulates the full scoping used to reference a job. # [Optional] The fully qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a job_id.
       "projectId": "A String", # [Required] The ID of the Google Cloud Platform project that the job belongs to.
@@ -223,13 +223,13 @@
       "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Spark drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.
         "A String",
       ],
-      "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file that contains the main class.
+      "mainJarFileUri": "A String", # The HCFS URI of the jar file that contains the main class.
       "properties": { # [Optional] A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.
         "a_key": "A String",
       },
     },
     "pysparkJob": { # A Cloud Dataproc job for running PySpark applications on YARN. # Job is a Pyspark job.
-      "mainPythonFileUri": "A String", # [Required] The Hadoop Compatible Filesystem (HCFS) URI of the main Python file to use as the driver. Must be a .py file.
+      "mainPythonFileUri": "A String", # [Required] The HCFS URI of the main Python file to use as the driver. Must be a .py file.
       "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `--conf`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
         "A String",
       ],
@@ -281,7 +281,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the job belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   jobId: string, [Required] The job ID. (required)
   x__xgafv: string, V1 error format.
 
@@ -298,7 +298,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the job belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   jobId: string, [Required] The job ID. (required)
   x__xgafv: string, V1 error format.
 
@@ -323,14 +323,14 @@
       "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `-libjars` or `-Dfoo=bar`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
         "A String",
       ],
-      "fileUris": [ # [Optional] HCFS URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
+      "fileUris": [ # [Optional] HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
         "A String",
       ],
       "mainClass": "A String", # The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in `jar_file_uris`.
       "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.
         "A String",
       ],
-      "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
+      "mainJarFileUri": "A String", # The HCFS URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
       "properties": { # [Optional] A mapping of property names to values, used to configure Hadoop. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site and classes in user code.
         "a_key": "A String",
       },
@@ -344,7 +344,7 @@
     ],
     "placement": { # Cloud Dataproc job config. # [Required] Job information, including how, when, and where to run the job.
       "clusterName": "A String", # [Required] The name of the cluster where the job will be submitted.
-      "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Dataproc service when the job is submitted.
+      "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Cloud Dataproc service when the job is submitted.
     },
     "reference": { # Encapsulates the full scoping used to reference a job. # [Optional] The fully qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a job_id.
       "projectId": "A String", # [Required] The ID of the Google Cloud Platform project that the job belongs to.
@@ -416,13 +416,13 @@
       "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Spark drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.
         "A String",
       ],
-      "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file that contains the main class.
+      "mainJarFileUri": "A String", # The HCFS URI of the jar file that contains the main class.
       "properties": { # [Optional] A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.
         "a_key": "A String",
       },
     },
     "pysparkJob": { # A Cloud Dataproc job for running PySpark applications on YARN. # Job is a Pyspark job.
-      "mainPythonFileUri": "A String", # [Required] The Hadoop Compatible Filesystem (HCFS) URI of the main Python file to use as the driver. Must be a .py file.
+      "mainPythonFileUri": "A String", # [Required] The HCFS URI of the main Python file to use as the driver. Must be a .py file.
       "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `--conf`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
         "A String",
       ],
@@ -474,7 +474,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the job belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   pageSize: integer, [Optional] The number of results to return in each response.
   x__xgafv: string, V1 error format.
   jobStateMatcher: string, [Optional] Specifies enumerated categories of jobs to list.
@@ -505,14 +505,14 @@
           "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `-libjars` or `-Dfoo=bar`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
             "A String",
           ],
-          "fileUris": [ # [Optional] HCFS URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
+          "fileUris": [ # [Optional] HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
             "A String",
           ],
           "mainClass": "A String", # The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in `jar_file_uris`.
           "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.
             "A String",
           ],
-          "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
+          "mainJarFileUri": "A String", # The HCFS URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
           "properties": { # [Optional] A mapping of property names to values, used to configure Hadoop. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site and classes in user code.
             "a_key": "A String",
           },
@@ -526,7 +526,7 @@
         ],
         "placement": { # Cloud Dataproc job config. # [Required] Job information, including how, when, and where to run the job.
           "clusterName": "A String", # [Required] The name of the cluster where the job will be submitted.
-          "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Dataproc service when the job is submitted.
+          "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Cloud Dataproc service when the job is submitted.
         },
         "reference": { # Encapsulates the full scoping used to reference a job. # [Optional] The fully qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a job_id.
           "projectId": "A String", # [Required] The ID of the Google Cloud Platform project that the job belongs to.
@@ -598,13 +598,13 @@
           "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Spark drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.
             "A String",
           ],
-          "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file that contains the main class.
+          "mainJarFileUri": "A String", # The HCFS URI of the jar file that contains the main class.
           "properties": { # [Optional] A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.
             "a_key": "A String",
           },
         },
         "pysparkJob": { # A Cloud Dataproc job for running PySpark applications on YARN. # Job is a Pyspark job.
-          "mainPythonFileUri": "A String", # [Required] The Hadoop Compatible Filesystem (HCFS) URI of the main Python file to use as the driver. Must be a .py file.
+          "mainPythonFileUri": "A String", # [Required] The HCFS URI of the main Python file to use as the driver. Must be a .py file.
           "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `--conf`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
             "A String",
           ],
@@ -672,7 +672,7 @@
 
 Args:
   projectId: string, [Required] The ID of the Google Cloud Platform project that the job belongs to. (required)
-  region: string, [Required] The Dataproc region in which to handle the request. (required)
+  region: string, [Required] The Cloud Dataproc region in which to handle the request. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
@@ -695,14 +695,14 @@
         "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `-libjars` or `-Dfoo=bar`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
           "A String",
         ],
-        "fileUris": [ # [Optional] HCFS URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
+        "fileUris": [ # [Optional] HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
           "A String",
         ],
         "mainClass": "A String", # The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in `jar_file_uris`.
         "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.
           "A String",
         ],
-        "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
+        "mainJarFileUri": "A String", # The HCFS URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
         "properties": { # [Optional] A mapping of property names to values, used to configure Hadoop. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site and classes in user code.
           "a_key": "A String",
         },
@@ -716,7 +716,7 @@
       ],
       "placement": { # Cloud Dataproc job config. # [Required] Job information, including how, when, and where to run the job.
         "clusterName": "A String", # [Required] The name of the cluster where the job will be submitted.
-        "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Dataproc service when the job is submitted.
+        "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Cloud Dataproc service when the job is submitted.
       },
       "reference": { # Encapsulates the full scoping used to reference a job. # [Optional] The fully qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a job_id.
         "projectId": "A String", # [Required] The ID of the Google Cloud Platform project that the job belongs to.
@@ -788,13 +788,13 @@
         "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Spark drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.
           "A String",
         ],
-        "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file that contains the main class.
+        "mainJarFileUri": "A String", # The HCFS URI of the jar file that contains the main class.
         "properties": { # [Optional] A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.
           "a_key": "A String",
         },
       },
       "pysparkJob": { # A Cloud Dataproc job for running PySpark applications on YARN. # Job is a Pyspark job.
-        "mainPythonFileUri": "A String", # [Required] The Hadoop Compatible Filesystem (HCFS) URI of the main Python file to use as the driver. Must be a .py file.
+        "mainPythonFileUri": "A String", # [Required] The HCFS URI of the main Python file to use as the driver. Must be a .py file.
         "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `--conf`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
           "A String",
         ],
@@ -863,14 +863,14 @@
       "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `-libjars` or `-Dfoo=bar`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
         "A String",
       ],
-      "fileUris": [ # [Optional] HCFS URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
+      "fileUris": [ # [Optional] HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.
         "A String",
       ],
       "mainClass": "A String", # The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in `jar_file_uris`.
       "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.
         "A String",
       ],
-      "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
+      "mainJarFileUri": "A String", # The HCFS URI of the jar file containing the main class. Examples: 'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar' 'hdfs:/tmp/test-samples/custom-wordcount.jar' 'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'
       "properties": { # [Optional] A mapping of property names to values, used to configure Hadoop. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site and classes in user code.
         "a_key": "A String",
       },
@@ -884,7 +884,7 @@
     ],
     "placement": { # Cloud Dataproc job config. # [Required] Job information, including how, when, and where to run the job.
       "clusterName": "A String", # [Required] The name of the cluster where the job will be submitted.
-      "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Dataproc service when the job is submitted.
+      "clusterUuid": "A String", # [Output-only] A cluster UUID generated by the Cloud Dataproc service when the job is submitted.
     },
     "reference": { # Encapsulates the full scoping used to reference a job. # [Optional] The fully qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a job_id.
       "projectId": "A String", # [Required] The ID of the Google Cloud Platform project that the job belongs to.
@@ -956,13 +956,13 @@
       "archiveUris": [ # [Optional] HCFS URIs of archives to be extracted in the working directory of Spark drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip.
         "A String",
       ],
-      "mainJarFileUri": "A String", # The Hadoop Compatible Filesystem (HCFS) URI of the jar file that contains the main class.
+      "mainJarFileUri": "A String", # The HCFS URI of the jar file that contains the main class.
       "properties": { # [Optional] A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.
         "a_key": "A String",
       },
     },
     "pysparkJob": { # A Cloud Dataproc job for running PySpark applications on YARN. # Job is a Pyspark job.
-      "mainPythonFileUri": "A String", # [Required] The Hadoop Compatible Filesystem (HCFS) URI of the main Python file to use as the driver. Must be a .py file.
+      "mainPythonFileUri": "A String", # [Required] The HCFS URI of the main Python file to use as the driver. Must be a .py file.
       "args": [ # [Optional] The arguments to pass to the driver. Do not include arguments, such as `--conf`, that can be set as job properties, since a collision may occur that causes an incorrect job submission.
         "A String",
       ],
diff --git a/docs/dyn/dataproc_v1.projects.regions.operations.html b/docs/dyn/dataproc_v1.projects.regions.operations.html
index a81557e..bc2c461 100644
--- a/docs/dyn/dataproc_v1.projects.regions.operations.html
+++ b/docs/dyn/dataproc_v1.projects.regions.operations.html
@@ -145,7 +145,7 @@
       ],
     },
     "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+    "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
     "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
       "a_key": "", # Properties of the object. Contains field @ype with type URL.
     },
@@ -182,7 +182,7 @@
           ],
         },
         "done": True or False, # If the value is `false`, it means the operation is still in progress. If true, the operation is completed, and either `error` or `response` is available.
-        "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping above, the `name` should have the format of `operations/some/unique/name`.
+        "name": "A String", # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should have the format of `operations/some/unique/name`.
         "metadata": { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
           "a_key": "", # Properties of the object. Contains field @ype with type URL.
         },
diff --git a/docs/dyn/datastore_v1beta3.html b/docs/dyn/datastore_v1beta3.html
new file mode 100644
index 0000000..f2d07f2
--- /dev/null
+++ b/docs/dyn/datastore_v1beta3.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="datastore_v1beta3.html">Google Cloud Datastore API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="datastore_v1beta3.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/datastore_v1beta3.projects.html b/docs/dyn/datastore_v1beta3.projects.html
new file mode 100644
index 0000000..7e868f5
--- /dev/null
+++ b/docs/dyn/datastore_v1beta3.projects.html
@@ -0,0 +1,2751 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="datastore_v1beta3.html">Google Cloud Datastore API</a> . <a href="datastore_v1beta3.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#allocateIds">allocateIds(projectId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Allocates IDs for the given keys, which is useful for referencing an entity</p>
+<p class="toc_element">
+  <code><a href="#beginTransaction">beginTransaction(projectId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Begins a new transaction.</p>
+<p class="toc_element">
+  <code><a href="#commit">commit(projectId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Commits a transaction, optionally creating, deleting or modifying some</p>
+<p class="toc_element">
+  <code><a href="#lookup">lookup(projectId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Looks up entities by key.</p>
+<p class="toc_element">
+  <code><a href="#rollback">rollback(projectId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Rolls back a transaction.</p>
+<p class="toc_element">
+  <code><a href="#runQuery">runQuery(projectId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Queries for entities.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="allocateIds">allocateIds(projectId, body, x__xgafv=None)</code>
+  <pre>Allocates IDs for the given keys, which is useful for referencing an entity
+before it is inserted.
+
+Args:
+  projectId: string, The ID of the project against which to make the request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for google.datastore.v1beta3.Datastore.AllocateIds.
+    "keys": [ # A list of keys with incomplete key paths for which to allocate IDs.
+        # No key may be reserved/read-only.
+      { # A unique identifier for an entity.
+          # If a key's partition ID or any of its path kinds or names are
+          # reserved/read-only, the key is reserved/read-only.
+          # A reserved/read-only key is forbidden in certain documented contexts.
+        "path": [ # The entity path.
+            # An entity path consists of one or more elements composed of a kind and a
+            # string or numerical identifier, which identify entities. The first
+            # element identifies a _root entity_, the second element identifies
+            # a _child_ of the root entity, the third element identifies a child of the
+            # second entity, and so forth. The entities identified by all prefixes of
+            # the path are called the element's _ancestors_.
+            #
+            # An entity path is always fully complete: *all* of the entity's ancestors
+            # are required to be in the path along with the entity identifier itself.
+            # The only exception is that in some documented cases, the identifier in the
+            # last path element (for the entity) itself may be omitted. For example,
+            # the last path element of the key of `Mutation.insert` may have no
+            # identifier.
+            #
+            # A path can never be empty, and a path can have at most 100 elements.
+          { # A (kind, ID/name) pair used to construct a key path.
+              #
+              # If either name or ID is set, the element is complete.
+              # If neither is set, the element is incomplete.
+            "kind": "A String", # The kind of the entity.
+                # A kind matching regex `__.*__` is reserved/read-only.
+                # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                # Cannot be `""`.
+            "name": "A String", # The name of the entity.
+                # A name matching regex `__.*__` is reserved/read-only.
+                # A name must not be more than 1500 bytes when UTF-8 encoded.
+                # Cannot be `""`.
+            "id": "A String", # The auto-allocated ID of the entity.
+                # Never equal to zero. Values less than zero are discouraged and may not
+                # be supported in the future.
+          },
+        ],
+        "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+            # ID and namespace ID.
+            # Queries are scoped to a single partition.
+            # by project and namespace, however the namespace ID may be empty.
+            #
+            # A partition ID contains several dimensions:
+            # project ID and namespace ID.
+            #
+            # Partition dimensions:
+            #
+            # - May be `""`.
+            # - Must be valid UTF-8 bytes.
+            # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+            # If the value of any dimension matches regex `__.*__`, the partition is
+            # reserved/read-only.
+            # A reserved/read-only partition ID is forbidden in certain documented
+            # contexts.
+            #
+            # Foreign partition IDs (in which the project ID does
+            # not match the context project ID ) are discouraged.
+            # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+          "projectId": "A String", # The ID of the project to which the entities belong.
+          "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+        },
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response for google.datastore.v1beta3.Datastore.AllocateIds.
+    "keys": [ # The keys specified in the request (in the same order), each with
+        # its key path completed with a newly allocated ID.
+      { # A unique identifier for an entity.
+          # If a key's partition ID or any of its path kinds or names are
+          # reserved/read-only, the key is reserved/read-only.
+          # A reserved/read-only key is forbidden in certain documented contexts.
+        "path": [ # The entity path.
+            # An entity path consists of one or more elements composed of a kind and a
+            # string or numerical identifier, which identify entities. The first
+            # element identifies a _root entity_, the second element identifies
+            # a _child_ of the root entity, the third element identifies a child of the
+            # second entity, and so forth. The entities identified by all prefixes of
+            # the path are called the element's _ancestors_.
+            #
+            # An entity path is always fully complete: *all* of the entity's ancestors
+            # are required to be in the path along with the entity identifier itself.
+            # The only exception is that in some documented cases, the identifier in the
+            # last path element (for the entity) itself may be omitted. For example,
+            # the last path element of the key of `Mutation.insert` may have no
+            # identifier.
+            #
+            # A path can never be empty, and a path can have at most 100 elements.
+          { # A (kind, ID/name) pair used to construct a key path.
+              #
+              # If either name or ID is set, the element is complete.
+              # If neither is set, the element is incomplete.
+            "kind": "A String", # The kind of the entity.
+                # A kind matching regex `__.*__` is reserved/read-only.
+                # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                # Cannot be `""`.
+            "name": "A String", # The name of the entity.
+                # A name matching regex `__.*__` is reserved/read-only.
+                # A name must not be more than 1500 bytes when UTF-8 encoded.
+                # Cannot be `""`.
+            "id": "A String", # The auto-allocated ID of the entity.
+                # Never equal to zero. Values less than zero are discouraged and may not
+                # be supported in the future.
+          },
+        ],
+        "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+            # ID and namespace ID.
+            # Queries are scoped to a single partition.
+            # by project and namespace, however the namespace ID may be empty.
+            #
+            # A partition ID contains several dimensions:
+            # project ID and namespace ID.
+            #
+            # Partition dimensions:
+            #
+            # - May be `""`.
+            # - Must be valid UTF-8 bytes.
+            # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+            # If the value of any dimension matches regex `__.*__`, the partition is
+            # reserved/read-only.
+            # A reserved/read-only partition ID is forbidden in certain documented
+            # contexts.
+            #
+            # Foreign partition IDs (in which the project ID does
+            # not match the context project ID ) are discouraged.
+            # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+          "projectId": "A String", # The ID of the project to which the entities belong.
+          "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="beginTransaction">beginTransaction(projectId, body, x__xgafv=None)</code>
+  <pre>Begins a new transaction.
+
+Args:
+  projectId: string, The ID of the project against which to make the request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for google.datastore.v1beta3.Datastore.BeginTransaction.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response for google.datastore.v1beta3.Datastore.BeginTransaction.
+    "transaction": "A String", # The transaction identifier (always present).
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="commit">commit(projectId, body, x__xgafv=None)</code>
+  <pre>Commits a transaction, optionally creating, deleting or modifying some
+entities.
+
+Args:
+  projectId: string, The ID of the project against which to make the request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for google.datastore.v1beta3.Datastore.Commit.
+    "transaction": "A String", # The identifier of the transaction associated with the commit. A
+        # transaction identifier is returned by a call to
+        # BeginTransaction.
+    "mutations": [ # The mutations to perform.
+        # 
+        # When mode is `TRANSACTIONAL`, mutations affecting a single entity are
+        # applied in order. The following sequences of mutations affecting a single
+        # entity are not permitted in a single `Commit` request:
+        # 
+        # - `insert` followed by `insert`
+        # - `update` followed by `insert`
+        # - `upsert` followed by `insert`
+        # - `delete` followed by `update`
+        # 
+        # When mode is `NON_TRANSACTIONAL`, no two mutations may affect a single
+        # entity.
+      { # A mutation to apply to an entity.
+        "insert": { # A Datastore data object. # The entity to insert. The entity must not already exist.
+            # The entity key's final path element may be incomplete.
+            #
+            # An entity is limited to 1 megabyte when stored. That _roughly_
+            # corresponds to a limit of 1 megabyte for the serialized form of this
+            # message.
+          "properties": { # The entity's properties.
+              # The map's keys are property names.
+              # A property name matching regex `__.*__` is reserved.
+              # A reserved property name is forbidden in certain documented contexts.
+              # The name must not contain more than 500 characters.
+              # The name cannot be `""`.
+            "a_key": { # A message that can hold any of the supported value types and associated
+                # metadata.
+              "booleanValue": True or False, # A boolean value.
+              "entityValue": # Object with schema name: Entity # An entity value.
+                  #
+                  # - May have no key.
+                  # - May have a key with an incomplete key path.
+                  # - May have a reserved/read-only key.
+              "timestampValue": "A String", # A timestamp value.
+                  # When stored in the Datastore, precise only to microseconds;
+                  # any additional precision is rounded down.
+              "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                  # explicitly.
+              "doubleValue": 3.14, # A double value.
+              "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+              "keyValue": { # A unique identifier for an entity. # A key value.
+                  # If a key's partition ID or any of its path kinds or names are
+                  # reserved/read-only, the key is reserved/read-only.
+                  # A reserved/read-only key is forbidden in certain documented contexts.
+                "path": [ # The entity path.
+                    # An entity path consists of one or more elements composed of a kind and a
+                    # string or numerical identifier, which identify entities. The first
+                    # element identifies a _root entity_, the second element identifies
+                    # a _child_ of the root entity, the third element identifies a child of the
+                    # second entity, and so forth. The entities identified by all prefixes of
+                    # the path are called the element's _ancestors_.
+                    #
+                    # An entity path is always fully complete: *all* of the entity's ancestors
+                    # are required to be in the path along with the entity identifier itself.
+                    # The only exception is that in some documented cases, the identifier in the
+                    # last path element (for the entity) itself may be omitted. For example,
+                    # the last path element of the key of `Mutation.insert` may have no
+                    # identifier.
+                    #
+                    # A path can never be empty, and a path can have at most 100 elements.
+                  { # A (kind, ID/name) pair used to construct a key path.
+                      #
+                      # If either name or ID is set, the element is complete.
+                      # If neither is set, the element is incomplete.
+                    "kind": "A String", # The kind of the entity.
+                        # A kind matching regex `__.*__` is reserved/read-only.
+                        # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "name": "A String", # The name of the entity.
+                        # A name matching regex `__.*__` is reserved/read-only.
+                        # A name must not be more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "id": "A String", # The auto-allocated ID of the entity.
+                        # Never equal to zero. Values less than zero are discouraged and may not
+                        # be supported in the future.
+                  },
+                ],
+                "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                    # ID and namespace ID.
+                    # Queries are scoped to a single partition.
+                    # by project and namespace, however the namespace ID may be empty.
+                    #
+                    # A partition ID contains several dimensions:
+                    # project ID and namespace ID.
+                    #
+                    # Partition dimensions:
+                    #
+                    # - May be `""`.
+                    # - Must be valid UTF-8 bytes.
+                    # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                    # If the value of any dimension matches regex `__.*__`, the partition is
+                    # reserved/read-only.
+                    # A reserved/read-only partition ID is forbidden in certain documented
+                    # contexts.
+                    #
+                    # Foreign partition IDs (in which the project ID does
+                    # not match the context project ID ) are discouraged.
+                    # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                  "projectId": "A String", # The ID of the project to which the entities belong.
+                  "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+                },
+              },
+              "blobValue": "A String", # A blob value.
+                  # May have at most 1,000,000 bytes.
+                  # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                  # In JSON requests, must be base64-encoded.
+              "stringValue": "A String", # A UTF-8 encoded string value.
+                  # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                  # Otherwise, may be set to at least 1,000,000 bytes.
+              "nullValue": "A String", # A null value.
+              "arrayValue": { # An array value. # An array value.
+                  # Cannot contain another array value.
+                  # A `Value` instance that sets field `array_value` must not set fields
+                  # `meaning` or `exclude_from_indexes`.
+                "values": [ # Values in the array.
+                    # The order of this array may not be preserved if it contains a mix of
+                    # indexed and unindexed values.
+                  # Object with schema name: Value
+                ],
+              },
+              "integerValue": "A String", # An integer value.
+              "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                  # of doubles representing degrees latitude and degrees longitude. Unless
+                  # specified otherwise, this must conform to the
+                  # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                  # standard</a>. Values must be within normalized ranges.
+                  #
+                  # Example of normalization code in Python:
+                  #
+                  #     def NormalizeLongitude(longitude):
+                  #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                  #       q, r = divmod(longitude, 360.0)
+                  #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                  #         return r - 360.0
+                  #       return r
+                  #
+                  #     def NormalizeLatLng(latitude, longitude):
+                  #       """Wraps decimal degrees latitude and longitude to
+                  #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                  #       r = latitude % 360.0
+                  #       if r <= 90.0:
+                  #         return r, NormalizeLongitude(longitude)
+                  #       elif r >= 270.0:
+                  #         return r - 360, NormalizeLongitude(longitude)
+                  #       else:
+                  #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                  #
+                  #     assert 180.0 == NormalizeLongitude(180.0)
+                  #     assert -180.0 == NormalizeLongitude(-180.0)
+                  #     assert -179.0 == NormalizeLongitude(181.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                  #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                  #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                  #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                  #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+              },
+            },
+          },
+          "key": { # A unique identifier for an entity. # The entity's key.
+              #
+              # An entity must have a key, unless otherwise documented (for example,
+              # an entity in `Value.entity_value` may have no key).
+              # An entity's kind is its key path's last element's kind,
+              # or null if it has no key.
+              # If a key's partition ID or any of its path kinds or names are
+              # reserved/read-only, the key is reserved/read-only.
+              # A reserved/read-only key is forbidden in certain documented contexts.
+            "path": [ # The entity path.
+                # An entity path consists of one or more elements composed of a kind and a
+                # string or numerical identifier, which identify entities. The first
+                # element identifies a _root entity_, the second element identifies
+                # a _child_ of the root entity, the third element identifies a child of the
+                # second entity, and so forth. The entities identified by all prefixes of
+                # the path are called the element's _ancestors_.
+                #
+                # An entity path is always fully complete: *all* of the entity's ancestors
+                # are required to be in the path along with the entity identifier itself.
+                # The only exception is that in some documented cases, the identifier in the
+                # last path element (for the entity) itself may be omitted. For example,
+                # the last path element of the key of `Mutation.insert` may have no
+                # identifier.
+                #
+                # A path can never be empty, and a path can have at most 100 elements.
+              { # A (kind, ID/name) pair used to construct a key path.
+                  #
+                  # If either name or ID is set, the element is complete.
+                  # If neither is set, the element is incomplete.
+                "kind": "A String", # The kind of the entity.
+                    # A kind matching regex `__.*__` is reserved/read-only.
+                    # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "name": "A String", # The name of the entity.
+                    # A name matching regex `__.*__` is reserved/read-only.
+                    # A name must not be more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "id": "A String", # The auto-allocated ID of the entity.
+                    # Never equal to zero. Values less than zero are discouraged and may not
+                    # be supported in the future.
+              },
+            ],
+            "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                # ID and namespace ID.
+                # Queries are scoped to a single partition.
+                # by project and namespace, however the namespace ID may be empty.
+                #
+                # A partition ID contains several dimensions:
+                # project ID and namespace ID.
+                #
+                # Partition dimensions:
+                #
+                # - May be `""`.
+                # - Must be valid UTF-8 bytes.
+                # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                # If the value of any dimension matches regex `__.*__`, the partition is
+                # reserved/read-only.
+                # A reserved/read-only partition ID is forbidden in certain documented
+                # contexts.
+                #
+                # Foreign partition IDs (in which the project ID does
+                # not match the context project ID ) are discouraged.
+                # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+              "projectId": "A String", # The ID of the project to which the entities belong.
+              "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+            },
+          },
+        },
+        "upsert": { # A Datastore data object. # The entity to upsert. The entity may or may not already exist.
+            # The entity key's final path element may be incomplete.
+            #
+            # An entity is limited to 1 megabyte when stored. That _roughly_
+            # corresponds to a limit of 1 megabyte for the serialized form of this
+            # message.
+          "properties": { # The entity's properties.
+              # The map's keys are property names.
+              # A property name matching regex `__.*__` is reserved.
+              # A reserved property name is forbidden in certain documented contexts.
+              # The name must not contain more than 500 characters.
+              # The name cannot be `""`.
+            "a_key": { # A message that can hold any of the supported value types and associated
+                # metadata.
+              "booleanValue": True or False, # A boolean value.
+              "entityValue": # Object with schema name: Entity # An entity value.
+                  #
+                  # - May have no key.
+                  # - May have a key with an incomplete key path.
+                  # - May have a reserved/read-only key.
+              "timestampValue": "A String", # A timestamp value.
+                  # When stored in the Datastore, precise only to microseconds;
+                  # any additional precision is rounded down.
+              "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                  # explicitly.
+              "doubleValue": 3.14, # A double value.
+              "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+              "keyValue": { # A unique identifier for an entity. # A key value.
+                  # If a key's partition ID or any of its path kinds or names are
+                  # reserved/read-only, the key is reserved/read-only.
+                  # A reserved/read-only key is forbidden in certain documented contexts.
+                "path": [ # The entity path.
+                    # An entity path consists of one or more elements composed of a kind and a
+                    # string or numerical identifier, which identify entities. The first
+                    # element identifies a _root entity_, the second element identifies
+                    # a _child_ of the root entity, the third element identifies a child of the
+                    # second entity, and so forth. The entities identified by all prefixes of
+                    # the path are called the element's _ancestors_.
+                    #
+                    # An entity path is always fully complete: *all* of the entity's ancestors
+                    # are required to be in the path along with the entity identifier itself.
+                    # The only exception is that in some documented cases, the identifier in the
+                    # last path element (for the entity) itself may be omitted. For example,
+                    # the last path element of the key of `Mutation.insert` may have no
+                    # identifier.
+                    #
+                    # A path can never be empty, and a path can have at most 100 elements.
+                  { # A (kind, ID/name) pair used to construct a key path.
+                      #
+                      # If either name or ID is set, the element is complete.
+                      # If neither is set, the element is incomplete.
+                    "kind": "A String", # The kind of the entity.
+                        # A kind matching regex `__.*__` is reserved/read-only.
+                        # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "name": "A String", # The name of the entity.
+                        # A name matching regex `__.*__` is reserved/read-only.
+                        # A name must not be more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "id": "A String", # The auto-allocated ID of the entity.
+                        # Never equal to zero. Values less than zero are discouraged and may not
+                        # be supported in the future.
+                  },
+                ],
+                "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                    # ID and namespace ID.
+                    # Queries are scoped to a single partition.
+                    # by project and namespace, however the namespace ID may be empty.
+                    #
+                    # A partition ID contains several dimensions:
+                    # project ID and namespace ID.
+                    #
+                    # Partition dimensions:
+                    #
+                    # - May be `""`.
+                    # - Must be valid UTF-8 bytes.
+                    # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                    # If the value of any dimension matches regex `__.*__`, the partition is
+                    # reserved/read-only.
+                    # A reserved/read-only partition ID is forbidden in certain documented
+                    # contexts.
+                    #
+                    # Foreign partition IDs (in which the project ID does
+                    # not match the context project ID ) are discouraged.
+                    # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                  "projectId": "A String", # The ID of the project to which the entities belong.
+                  "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+                },
+              },
+              "blobValue": "A String", # A blob value.
+                  # May have at most 1,000,000 bytes.
+                  # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                  # In JSON requests, must be base64-encoded.
+              "stringValue": "A String", # A UTF-8 encoded string value.
+                  # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                  # Otherwise, may be set to at least 1,000,000 bytes.
+              "nullValue": "A String", # A null value.
+              "arrayValue": { # An array value. # An array value.
+                  # Cannot contain another array value.
+                  # A `Value` instance that sets field `array_value` must not set fields
+                  # `meaning` or `exclude_from_indexes`.
+                "values": [ # Values in the array.
+                    # The order of this array may not be preserved if it contains a mix of
+                    # indexed and unindexed values.
+                  # Object with schema name: Value
+                ],
+              },
+              "integerValue": "A String", # An integer value.
+              "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                  # of doubles representing degrees latitude and degrees longitude. Unless
+                  # specified otherwise, this must conform to the
+                  # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                  # standard</a>. Values must be within normalized ranges.
+                  #
+                  # Example of normalization code in Python:
+                  #
+                  #     def NormalizeLongitude(longitude):
+                  #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                  #       q, r = divmod(longitude, 360.0)
+                  #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                  #         return r - 360.0
+                  #       return r
+                  #
+                  #     def NormalizeLatLng(latitude, longitude):
+                  #       """Wraps decimal degrees latitude and longitude to
+                  #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                  #       r = latitude % 360.0
+                  #       if r <= 90.0:
+                  #         return r, NormalizeLongitude(longitude)
+                  #       elif r >= 270.0:
+                  #         return r - 360, NormalizeLongitude(longitude)
+                  #       else:
+                  #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                  #
+                  #     assert 180.0 == NormalizeLongitude(180.0)
+                  #     assert -180.0 == NormalizeLongitude(-180.0)
+                  #     assert -179.0 == NormalizeLongitude(181.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                  #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                  #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                  #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                  #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+              },
+            },
+          },
+          "key": { # A unique identifier for an entity. # The entity's key.
+              #
+              # An entity must have a key, unless otherwise documented (for example,
+              # an entity in `Value.entity_value` may have no key).
+              # An entity's kind is its key path's last element's kind,
+              # or null if it has no key.
+              # If a key's partition ID or any of its path kinds or names are
+              # reserved/read-only, the key is reserved/read-only.
+              # A reserved/read-only key is forbidden in certain documented contexts.
+            "path": [ # The entity path.
+                # An entity path consists of one or more elements composed of a kind and a
+                # string or numerical identifier, which identify entities. The first
+                # element identifies a _root entity_, the second element identifies
+                # a _child_ of the root entity, the third element identifies a child of the
+                # second entity, and so forth. The entities identified by all prefixes of
+                # the path are called the element's _ancestors_.
+                #
+                # An entity path is always fully complete: *all* of the entity's ancestors
+                # are required to be in the path along with the entity identifier itself.
+                # The only exception is that in some documented cases, the identifier in the
+                # last path element (for the entity) itself may be omitted. For example,
+                # the last path element of the key of `Mutation.insert` may have no
+                # identifier.
+                #
+                # A path can never be empty, and a path can have at most 100 elements.
+              { # A (kind, ID/name) pair used to construct a key path.
+                  #
+                  # If either name or ID is set, the element is complete.
+                  # If neither is set, the element is incomplete.
+                "kind": "A String", # The kind of the entity.
+                    # A kind matching regex `__.*__` is reserved/read-only.
+                    # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "name": "A String", # The name of the entity.
+                    # A name matching regex `__.*__` is reserved/read-only.
+                    # A name must not be more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "id": "A String", # The auto-allocated ID of the entity.
+                    # Never equal to zero. Values less than zero are discouraged and may not
+                    # be supported in the future.
+              },
+            ],
+            "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                # ID and namespace ID.
+                # Queries are scoped to a single partition.
+                # by project and namespace, however the namespace ID may be empty.
+                #
+                # A partition ID contains several dimensions:
+                # project ID and namespace ID.
+                #
+                # Partition dimensions:
+                #
+                # - May be `""`.
+                # - Must be valid UTF-8 bytes.
+                # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                # If the value of any dimension matches regex `__.*__`, the partition is
+                # reserved/read-only.
+                # A reserved/read-only partition ID is forbidden in certain documented
+                # contexts.
+                #
+                # Foreign partition IDs (in which the project ID does
+                # not match the context project ID ) are discouraged.
+                # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+              "projectId": "A String", # The ID of the project to which the entities belong.
+              "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+            },
+          },
+        },
+        "update": { # A Datastore data object. # The entity to update. The entity must already exist.
+            # Must have a complete key path.
+            #
+            # An entity is limited to 1 megabyte when stored. That _roughly_
+            # corresponds to a limit of 1 megabyte for the serialized form of this
+            # message.
+          "properties": { # The entity's properties.
+              # The map's keys are property names.
+              # A property name matching regex `__.*__` is reserved.
+              # A reserved property name is forbidden in certain documented contexts.
+              # The name must not contain more than 500 characters.
+              # The name cannot be `""`.
+            "a_key": { # A message that can hold any of the supported value types and associated
+                # metadata.
+              "booleanValue": True or False, # A boolean value.
+              "entityValue": # Object with schema name: Entity # An entity value.
+                  #
+                  # - May have no key.
+                  # - May have a key with an incomplete key path.
+                  # - May have a reserved/read-only key.
+              "timestampValue": "A String", # A timestamp value.
+                  # When stored in the Datastore, precise only to microseconds;
+                  # any additional precision is rounded down.
+              "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                  # explicitly.
+              "doubleValue": 3.14, # A double value.
+              "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+              "keyValue": { # A unique identifier for an entity. # A key value.
+                  # If a key's partition ID or any of its path kinds or names are
+                  # reserved/read-only, the key is reserved/read-only.
+                  # A reserved/read-only key is forbidden in certain documented contexts.
+                "path": [ # The entity path.
+                    # An entity path consists of one or more elements composed of a kind and a
+                    # string or numerical identifier, which identify entities. The first
+                    # element identifies a _root entity_, the second element identifies
+                    # a _child_ of the root entity, the third element identifies a child of the
+                    # second entity, and so forth. The entities identified by all prefixes of
+                    # the path are called the element's _ancestors_.
+                    #
+                    # An entity path is always fully complete: *all* of the entity's ancestors
+                    # are required to be in the path along with the entity identifier itself.
+                    # The only exception is that in some documented cases, the identifier in the
+                    # last path element (for the entity) itself may be omitted. For example,
+                    # the last path element of the key of `Mutation.insert` may have no
+                    # identifier.
+                    #
+                    # A path can never be empty, and a path can have at most 100 elements.
+                  { # A (kind, ID/name) pair used to construct a key path.
+                      #
+                      # If either name or ID is set, the element is complete.
+                      # If neither is set, the element is incomplete.
+                    "kind": "A String", # The kind of the entity.
+                        # A kind matching regex `__.*__` is reserved/read-only.
+                        # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "name": "A String", # The name of the entity.
+                        # A name matching regex `__.*__` is reserved/read-only.
+                        # A name must not be more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "id": "A String", # The auto-allocated ID of the entity.
+                        # Never equal to zero. Values less than zero are discouraged and may not
+                        # be supported in the future.
+                  },
+                ],
+                "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                    # ID and namespace ID.
+                    # Queries are scoped to a single partition.
+                    # by project and namespace, however the namespace ID may be empty.
+                    #
+                    # A partition ID contains several dimensions:
+                    # project ID and namespace ID.
+                    #
+                    # Partition dimensions:
+                    #
+                    # - May be `""`.
+                    # - Must be valid UTF-8 bytes.
+                    # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                    # If the value of any dimension matches regex `__.*__`, the partition is
+                    # reserved/read-only.
+                    # A reserved/read-only partition ID is forbidden in certain documented
+                    # contexts.
+                    #
+                    # Foreign partition IDs (in which the project ID does
+                    # not match the context project ID ) are discouraged.
+                    # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                  "projectId": "A String", # The ID of the project to which the entities belong.
+                  "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+                },
+              },
+              "blobValue": "A String", # A blob value.
+                  # May have at most 1,000,000 bytes.
+                  # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                  # In JSON requests, must be base64-encoded.
+              "stringValue": "A String", # A UTF-8 encoded string value.
+                  # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                  # Otherwise, may be set to at least 1,000,000 bytes.
+              "nullValue": "A String", # A null value.
+              "arrayValue": { # An array value. # An array value.
+                  # Cannot contain another array value.
+                  # A `Value` instance that sets field `array_value` must not set fields
+                  # `meaning` or `exclude_from_indexes`.
+                "values": [ # Values in the array.
+                    # The order of this array may not be preserved if it contains a mix of
+                    # indexed and unindexed values.
+                  # Object with schema name: Value
+                ],
+              },
+              "integerValue": "A String", # An integer value.
+              "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                  # of doubles representing degrees latitude and degrees longitude. Unless
+                  # specified otherwise, this must conform to the
+                  # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                  # standard</a>. Values must be within normalized ranges.
+                  #
+                  # Example of normalization code in Python:
+                  #
+                  #     def NormalizeLongitude(longitude):
+                  #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                  #       q, r = divmod(longitude, 360.0)
+                  #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                  #         return r - 360.0
+                  #       return r
+                  #
+                  #     def NormalizeLatLng(latitude, longitude):
+                  #       """Wraps decimal degrees latitude and longitude to
+                  #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                  #       r = latitude % 360.0
+                  #       if r <= 90.0:
+                  #         return r, NormalizeLongitude(longitude)
+                  #       elif r >= 270.0:
+                  #         return r - 360, NormalizeLongitude(longitude)
+                  #       else:
+                  #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                  #
+                  #     assert 180.0 == NormalizeLongitude(180.0)
+                  #     assert -180.0 == NormalizeLongitude(-180.0)
+                  #     assert -179.0 == NormalizeLongitude(181.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                  #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                  #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                  #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                  #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+              },
+            },
+          },
+          "key": { # A unique identifier for an entity. # The entity's key.
+              #
+              # An entity must have a key, unless otherwise documented (for example,
+              # an entity in `Value.entity_value` may have no key).
+              # An entity's kind is its key path's last element's kind,
+              # or null if it has no key.
+              # If a key's partition ID or any of its path kinds or names are
+              # reserved/read-only, the key is reserved/read-only.
+              # A reserved/read-only key is forbidden in certain documented contexts.
+            "path": [ # The entity path.
+                # An entity path consists of one or more elements composed of a kind and a
+                # string or numerical identifier, which identify entities. The first
+                # element identifies a _root entity_, the second element identifies
+                # a _child_ of the root entity, the third element identifies a child of the
+                # second entity, and so forth. The entities identified by all prefixes of
+                # the path are called the element's _ancestors_.
+                #
+                # An entity path is always fully complete: *all* of the entity's ancestors
+                # are required to be in the path along with the entity identifier itself.
+                # The only exception is that in some documented cases, the identifier in the
+                # last path element (for the entity) itself may be omitted. For example,
+                # the last path element of the key of `Mutation.insert` may have no
+                # identifier.
+                #
+                # A path can never be empty, and a path can have at most 100 elements.
+              { # A (kind, ID/name) pair used to construct a key path.
+                  #
+                  # If either name or ID is set, the element is complete.
+                  # If neither is set, the element is incomplete.
+                "kind": "A String", # The kind of the entity.
+                    # A kind matching regex `__.*__` is reserved/read-only.
+                    # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "name": "A String", # The name of the entity.
+                    # A name matching regex `__.*__` is reserved/read-only.
+                    # A name must not be more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "id": "A String", # The auto-allocated ID of the entity.
+                    # Never equal to zero. Values less than zero are discouraged and may not
+                    # be supported in the future.
+              },
+            ],
+            "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                # ID and namespace ID.
+                # Queries are scoped to a single partition.
+                # by project and namespace, however the namespace ID may be empty.
+                #
+                # A partition ID contains several dimensions:
+                # project ID and namespace ID.
+                #
+                # Partition dimensions:
+                #
+                # - May be `""`.
+                # - Must be valid UTF-8 bytes.
+                # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                # If the value of any dimension matches regex `__.*__`, the partition is
+                # reserved/read-only.
+                # A reserved/read-only partition ID is forbidden in certain documented
+                # contexts.
+                #
+                # Foreign partition IDs (in which the project ID does
+                # not match the context project ID ) are discouraged.
+                # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+              "projectId": "A String", # The ID of the project to which the entities belong.
+              "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+            },
+          },
+        },
+        "delete": { # A unique identifier for an entity. # The key of the entity to delete. The entity may or may not already exist.
+            # Must have a complete key path and must not be reserved/read-only.
+            # If a key's partition ID or any of its path kinds or names are
+            # reserved/read-only, the key is reserved/read-only.
+            # A reserved/read-only key is forbidden in certain documented contexts.
+          "path": [ # The entity path.
+              # An entity path consists of one or more elements composed of a kind and a
+              # string or numerical identifier, which identify entities. The first
+              # element identifies a _root entity_, the second element identifies
+              # a _child_ of the root entity, the third element identifies a child of the
+              # second entity, and so forth. The entities identified by all prefixes of
+              # the path are called the element's _ancestors_.
+              #
+              # An entity path is always fully complete: *all* of the entity's ancestors
+              # are required to be in the path along with the entity identifier itself.
+              # The only exception is that in some documented cases, the identifier in the
+              # last path element (for the entity) itself may be omitted. For example,
+              # the last path element of the key of `Mutation.insert` may have no
+              # identifier.
+              #
+              # A path can never be empty, and a path can have at most 100 elements.
+            { # A (kind, ID/name) pair used to construct a key path.
+                #
+                # If either name or ID is set, the element is complete.
+                # If neither is set, the element is incomplete.
+              "kind": "A String", # The kind of the entity.
+                  # A kind matching regex `__.*__` is reserved/read-only.
+                  # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                  # Cannot be `""`.
+              "name": "A String", # The name of the entity.
+                  # A name matching regex `__.*__` is reserved/read-only.
+                  # A name must not be more than 1500 bytes when UTF-8 encoded.
+                  # Cannot be `""`.
+              "id": "A String", # The auto-allocated ID of the entity.
+                  # Never equal to zero. Values less than zero are discouraged and may not
+                  # be supported in the future.
+            },
+          ],
+          "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+              # ID and namespace ID.
+              # Queries are scoped to a single partition.
+              # by project and namespace, however the namespace ID may be empty.
+              #
+              # A partition ID contains several dimensions:
+              # project ID and namespace ID.
+              #
+              # Partition dimensions:
+              #
+              # - May be `""`.
+              # - Must be valid UTF-8 bytes.
+              # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+              # If the value of any dimension matches regex `__.*__`, the partition is
+              # reserved/read-only.
+              # A reserved/read-only partition ID is forbidden in certain documented
+              # contexts.
+              #
+              # Foreign partition IDs (in which the project ID does
+              # not match the context project ID ) are discouraged.
+              # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+            "projectId": "A String", # The ID of the project to which the entities belong.
+            "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+          },
+        },
+      },
+    ],
+    "mode": "A String", # The type of commit to perform. Defaults to `TRANSACTIONAL`.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response for google.datastore.v1beta3.Datastore.Commit.
+    "mutationResults": [ # The result of performing the mutations.
+        # The i-th mutation result corresponds to the i-th mutation in the request.
+      { # The result of applying a mutation.
+        "key": { # A unique identifier for an entity. # The automatically allocated key.
+            # Set only when the mutation allocated a key.
+            # If a key's partition ID or any of its path kinds or names are
+            # reserved/read-only, the key is reserved/read-only.
+            # A reserved/read-only key is forbidden in certain documented contexts.
+          "path": [ # The entity path.
+              # An entity path consists of one or more elements composed of a kind and a
+              # string or numerical identifier, which identify entities. The first
+              # element identifies a _root entity_, the second element identifies
+              # a _child_ of the root entity, the third element identifies a child of the
+              # second entity, and so forth. The entities identified by all prefixes of
+              # the path are called the element's _ancestors_.
+              #
+              # An entity path is always fully complete: *all* of the entity's ancestors
+              # are required to be in the path along with the entity identifier itself.
+              # The only exception is that in some documented cases, the identifier in the
+              # last path element (for the entity) itself may be omitted. For example,
+              # the last path element of the key of `Mutation.insert` may have no
+              # identifier.
+              #
+              # A path can never be empty, and a path can have at most 100 elements.
+            { # A (kind, ID/name) pair used to construct a key path.
+                #
+                # If either name or ID is set, the element is complete.
+                # If neither is set, the element is incomplete.
+              "kind": "A String", # The kind of the entity.
+                  # A kind matching regex `__.*__` is reserved/read-only.
+                  # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                  # Cannot be `""`.
+              "name": "A String", # The name of the entity.
+                  # A name matching regex `__.*__` is reserved/read-only.
+                  # A name must not be more than 1500 bytes when UTF-8 encoded.
+                  # Cannot be `""`.
+              "id": "A String", # The auto-allocated ID of the entity.
+                  # Never equal to zero. Values less than zero are discouraged and may not
+                  # be supported in the future.
+            },
+          ],
+          "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+              # ID and namespace ID.
+              # Queries are scoped to a single partition.
+              # by project and namespace, however the namespace ID may be empty.
+              #
+              # A partition ID contains several dimensions:
+              # project ID and namespace ID.
+              #
+              # Partition dimensions:
+              #
+              # - May be `""`.
+              # - Must be valid UTF-8 bytes.
+              # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+              # If the value of any dimension matches regex `__.*__`, the partition is
+              # reserved/read-only.
+              # A reserved/read-only partition ID is forbidden in certain documented
+              # contexts.
+              #
+              # Foreign partition IDs (in which the project ID does
+              # not match the context project ID ) are discouraged.
+              # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+            "projectId": "A String", # The ID of the project to which the entities belong.
+            "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+          },
+        },
+      },
+    ],
+    "indexUpdates": 42, # The number of index entries updated during the commit, or zero if none were
+        # updated.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="lookup">lookup(projectId, body, x__xgafv=None)</code>
+  <pre>Looks up entities by key.
+
+Args:
+  projectId: string, The ID of the project against which to make the request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for google.datastore.v1beta3.Datastore.Lookup.
+    "keys": [ # Keys of entities to look up.
+      { # A unique identifier for an entity.
+          # If a key's partition ID or any of its path kinds or names are
+          # reserved/read-only, the key is reserved/read-only.
+          # A reserved/read-only key is forbidden in certain documented contexts.
+        "path": [ # The entity path.
+            # An entity path consists of one or more elements composed of a kind and a
+            # string or numerical identifier, which identify entities. The first
+            # element identifies a _root entity_, the second element identifies
+            # a _child_ of the root entity, the third element identifies a child of the
+            # second entity, and so forth. The entities identified by all prefixes of
+            # the path are called the element's _ancestors_.
+            #
+            # An entity path is always fully complete: *all* of the entity's ancestors
+            # are required to be in the path along with the entity identifier itself.
+            # The only exception is that in some documented cases, the identifier in the
+            # last path element (for the entity) itself may be omitted. For example,
+            # the last path element of the key of `Mutation.insert` may have no
+            # identifier.
+            #
+            # A path can never be empty, and a path can have at most 100 elements.
+          { # A (kind, ID/name) pair used to construct a key path.
+              #
+              # If either name or ID is set, the element is complete.
+              # If neither is set, the element is incomplete.
+            "kind": "A String", # The kind of the entity.
+                # A kind matching regex `__.*__` is reserved/read-only.
+                # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                # Cannot be `""`.
+            "name": "A String", # The name of the entity.
+                # A name matching regex `__.*__` is reserved/read-only.
+                # A name must not be more than 1500 bytes when UTF-8 encoded.
+                # Cannot be `""`.
+            "id": "A String", # The auto-allocated ID of the entity.
+                # Never equal to zero. Values less than zero are discouraged and may not
+                # be supported in the future.
+          },
+        ],
+        "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+            # ID and namespace ID.
+            # Queries are scoped to a single partition.
+            # by project and namespace, however the namespace ID may be empty.
+            #
+            # A partition ID contains several dimensions:
+            # project ID and namespace ID.
+            #
+            # Partition dimensions:
+            #
+            # - May be `""`.
+            # - Must be valid UTF-8 bytes.
+            # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+            # If the value of any dimension matches regex `__.*__`, the partition is
+            # reserved/read-only.
+            # A reserved/read-only partition ID is forbidden in certain documented
+            # contexts.
+            #
+            # Foreign partition IDs (in which the project ID does
+            # not match the context project ID ) are discouraged.
+            # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+          "projectId": "A String", # The ID of the project to which the entities belong.
+          "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+        },
+      },
+    ],
+    "readOptions": { # The options shared by read requests. # The options for this lookup request.
+      "transaction": "A String", # The identifier of the transaction in which to read. A
+          # transaction identifier is returned by a call to
+          # BeginTransaction.
+      "readConsistency": "A String", # The non-transactional read consistency to use.
+          # Cannot be set to `STRONG` for global queries.
+    },
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response for google.datastore.v1beta3.Datastore.Lookup.
+    "found": [ # Entities found as `ResultType.FULL` entities. The order of results in this
+        # field is undefined and has no relation to the order of the keys in the
+        # input.
+      { # The result of fetching an entity from Datastore.
+        "cursor": "A String", # A cursor that points to the position after the result entity.
+            # Set only when the `EntityResult` is part of a `QueryResultBatch` message.
+        "entity": { # A Datastore data object. # The resulting entity.
+            #
+            # An entity is limited to 1 megabyte when stored. That _roughly_
+            # corresponds to a limit of 1 megabyte for the serialized form of this
+            # message.
+          "properties": { # The entity's properties.
+              # The map's keys are property names.
+              # A property name matching regex `__.*__` is reserved.
+              # A reserved property name is forbidden in certain documented contexts.
+              # The name must not contain more than 500 characters.
+              # The name cannot be `""`.
+            "a_key": { # A message that can hold any of the supported value types and associated
+                # metadata.
+              "booleanValue": True or False, # A boolean value.
+              "entityValue": # Object with schema name: Entity # An entity value.
+                  #
+                  # - May have no key.
+                  # - May have a key with an incomplete key path.
+                  # - May have a reserved/read-only key.
+              "timestampValue": "A String", # A timestamp value.
+                  # When stored in the Datastore, precise only to microseconds;
+                  # any additional precision is rounded down.
+              "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                  # explicitly.
+              "doubleValue": 3.14, # A double value.
+              "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+              "keyValue": { # A unique identifier for an entity. # A key value.
+                  # If a key's partition ID or any of its path kinds or names are
+                  # reserved/read-only, the key is reserved/read-only.
+                  # A reserved/read-only key is forbidden in certain documented contexts.
+                "path": [ # The entity path.
+                    # An entity path consists of one or more elements composed of a kind and a
+                    # string or numerical identifier, which identify entities. The first
+                    # element identifies a _root entity_, the second element identifies
+                    # a _child_ of the root entity, the third element identifies a child of the
+                    # second entity, and so forth. The entities identified by all prefixes of
+                    # the path are called the element's _ancestors_.
+                    #
+                    # An entity path is always fully complete: *all* of the entity's ancestors
+                    # are required to be in the path along with the entity identifier itself.
+                    # The only exception is that in some documented cases, the identifier in the
+                    # last path element (for the entity) itself may be omitted. For example,
+                    # the last path element of the key of `Mutation.insert` may have no
+                    # identifier.
+                    #
+                    # A path can never be empty, and a path can have at most 100 elements.
+                  { # A (kind, ID/name) pair used to construct a key path.
+                      #
+                      # If either name or ID is set, the element is complete.
+                      # If neither is set, the element is incomplete.
+                    "kind": "A String", # The kind of the entity.
+                        # A kind matching regex `__.*__` is reserved/read-only.
+                        # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "name": "A String", # The name of the entity.
+                        # A name matching regex `__.*__` is reserved/read-only.
+                        # A name must not be more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "id": "A String", # The auto-allocated ID of the entity.
+                        # Never equal to zero. Values less than zero are discouraged and may not
+                        # be supported in the future.
+                  },
+                ],
+                "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                    # ID and namespace ID.
+                    # Queries are scoped to a single partition.
+                    # by project and namespace, however the namespace ID may be empty.
+                    #
+                    # A partition ID contains several dimensions:
+                    # project ID and namespace ID.
+                    #
+                    # Partition dimensions:
+                    #
+                    # - May be `""`.
+                    # - Must be valid UTF-8 bytes.
+                    # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                    # If the value of any dimension matches regex `__.*__`, the partition is
+                    # reserved/read-only.
+                    # A reserved/read-only partition ID is forbidden in certain documented
+                    # contexts.
+                    #
+                    # Foreign partition IDs (in which the project ID does
+                    # not match the context project ID ) are discouraged.
+                    # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                  "projectId": "A String", # The ID of the project to which the entities belong.
+                  "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+                },
+              },
+              "blobValue": "A String", # A blob value.
+                  # May have at most 1,000,000 bytes.
+                  # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                  # In JSON requests, must be base64-encoded.
+              "stringValue": "A String", # A UTF-8 encoded string value.
+                  # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                  # Otherwise, may be set to at least 1,000,000 bytes.
+              "nullValue": "A String", # A null value.
+              "arrayValue": { # An array value. # An array value.
+                  # Cannot contain another array value.
+                  # A `Value` instance that sets field `array_value` must not set fields
+                  # `meaning` or `exclude_from_indexes`.
+                "values": [ # Values in the array.
+                    # The order of this array may not be preserved if it contains a mix of
+                    # indexed and unindexed values.
+                  # Object with schema name: Value
+                ],
+              },
+              "integerValue": "A String", # An integer value.
+              "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                  # of doubles representing degrees latitude and degrees longitude. Unless
+                  # specified otherwise, this must conform to the
+                  # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                  # standard</a>. Values must be within normalized ranges.
+                  #
+                  # Example of normalization code in Python:
+                  #
+                  #     def NormalizeLongitude(longitude):
+                  #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                  #       q, r = divmod(longitude, 360.0)
+                  #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                  #         return r - 360.0
+                  #       return r
+                  #
+                  #     def NormalizeLatLng(latitude, longitude):
+                  #       """Wraps decimal degrees latitude and longitude to
+                  #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                  #       r = latitude % 360.0
+                  #       if r <= 90.0:
+                  #         return r, NormalizeLongitude(longitude)
+                  #       elif r >= 270.0:
+                  #         return r - 360, NormalizeLongitude(longitude)
+                  #       else:
+                  #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                  #
+                  #     assert 180.0 == NormalizeLongitude(180.0)
+                  #     assert -180.0 == NormalizeLongitude(-180.0)
+                  #     assert -179.0 == NormalizeLongitude(181.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                  #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                  #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                  #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                  #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+              },
+            },
+          },
+          "key": { # A unique identifier for an entity. # The entity's key.
+              #
+              # An entity must have a key, unless otherwise documented (for example,
+              # an entity in `Value.entity_value` may have no key).
+              # An entity's kind is its key path's last element's kind,
+              # or null if it has no key.
+              # If a key's partition ID or any of its path kinds or names are
+              # reserved/read-only, the key is reserved/read-only.
+              # A reserved/read-only key is forbidden in certain documented contexts.
+            "path": [ # The entity path.
+                # An entity path consists of one or more elements composed of a kind and a
+                # string or numerical identifier, which identify entities. The first
+                # element identifies a _root entity_, the second element identifies
+                # a _child_ of the root entity, the third element identifies a child of the
+                # second entity, and so forth. The entities identified by all prefixes of
+                # the path are called the element's _ancestors_.
+                #
+                # An entity path is always fully complete: *all* of the entity's ancestors
+                # are required to be in the path along with the entity identifier itself.
+                # The only exception is that in some documented cases, the identifier in the
+                # last path element (for the entity) itself may be omitted. For example,
+                # the last path element of the key of `Mutation.insert` may have no
+                # identifier.
+                #
+                # A path can never be empty, and a path can have at most 100 elements.
+              { # A (kind, ID/name) pair used to construct a key path.
+                  #
+                  # If either name or ID is set, the element is complete.
+                  # If neither is set, the element is incomplete.
+                "kind": "A String", # The kind of the entity.
+                    # A kind matching regex `__.*__` is reserved/read-only.
+                    # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "name": "A String", # The name of the entity.
+                    # A name matching regex `__.*__` is reserved/read-only.
+                    # A name must not be more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "id": "A String", # The auto-allocated ID of the entity.
+                    # Never equal to zero. Values less than zero are discouraged and may not
+                    # be supported in the future.
+              },
+            ],
+            "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                # ID and namespace ID.
+                # Queries are scoped to a single partition.
+                # by project and namespace, however the namespace ID may be empty.
+                #
+                # A partition ID contains several dimensions:
+                # project ID and namespace ID.
+                #
+                # Partition dimensions:
+                #
+                # - May be `""`.
+                # - Must be valid UTF-8 bytes.
+                # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                # If the value of any dimension matches regex `__.*__`, the partition is
+                # reserved/read-only.
+                # A reserved/read-only partition ID is forbidden in certain documented
+                # contexts.
+                #
+                # Foreign partition IDs (in which the project ID does
+                # not match the context project ID ) are discouraged.
+                # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+              "projectId": "A String", # The ID of the project to which the entities belong.
+              "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+            },
+          },
+        },
+      },
+    ],
+    "missing": [ # Entities not found as `ResultType.KEY_ONLY` entities. The order of results
+        # in this field is undefined and has no relation to the order of the keys
+        # in the input.
+      { # The result of fetching an entity from Datastore.
+        "cursor": "A String", # A cursor that points to the position after the result entity.
+            # Set only when the `EntityResult` is part of a `QueryResultBatch` message.
+        "entity": { # A Datastore data object. # The resulting entity.
+            #
+            # An entity is limited to 1 megabyte when stored. That _roughly_
+            # corresponds to a limit of 1 megabyte for the serialized form of this
+            # message.
+          "properties": { # The entity's properties.
+              # The map's keys are property names.
+              # A property name matching regex `__.*__` is reserved.
+              # A reserved property name is forbidden in certain documented contexts.
+              # The name must not contain more than 500 characters.
+              # The name cannot be `""`.
+            "a_key": { # A message that can hold any of the supported value types and associated
+                # metadata.
+              "booleanValue": True or False, # A boolean value.
+              "entityValue": # Object with schema name: Entity # An entity value.
+                  #
+                  # - May have no key.
+                  # - May have a key with an incomplete key path.
+                  # - May have a reserved/read-only key.
+              "timestampValue": "A String", # A timestamp value.
+                  # When stored in the Datastore, precise only to microseconds;
+                  # any additional precision is rounded down.
+              "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                  # explicitly.
+              "doubleValue": 3.14, # A double value.
+              "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+              "keyValue": { # A unique identifier for an entity. # A key value.
+                  # If a key's partition ID or any of its path kinds or names are
+                  # reserved/read-only, the key is reserved/read-only.
+                  # A reserved/read-only key is forbidden in certain documented contexts.
+                "path": [ # The entity path.
+                    # An entity path consists of one or more elements composed of a kind and a
+                    # string or numerical identifier, which identify entities. The first
+                    # element identifies a _root entity_, the second element identifies
+                    # a _child_ of the root entity, the third element identifies a child of the
+                    # second entity, and so forth. The entities identified by all prefixes of
+                    # the path are called the element's _ancestors_.
+                    #
+                    # An entity path is always fully complete: *all* of the entity's ancestors
+                    # are required to be in the path along with the entity identifier itself.
+                    # The only exception is that in some documented cases, the identifier in the
+                    # last path element (for the entity) itself may be omitted. For example,
+                    # the last path element of the key of `Mutation.insert` may have no
+                    # identifier.
+                    #
+                    # A path can never be empty, and a path can have at most 100 elements.
+                  { # A (kind, ID/name) pair used to construct a key path.
+                      #
+                      # If either name or ID is set, the element is complete.
+                      # If neither is set, the element is incomplete.
+                    "kind": "A String", # The kind of the entity.
+                        # A kind matching regex `__.*__` is reserved/read-only.
+                        # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "name": "A String", # The name of the entity.
+                        # A name matching regex `__.*__` is reserved/read-only.
+                        # A name must not be more than 1500 bytes when UTF-8 encoded.
+                        # Cannot be `""`.
+                    "id": "A String", # The auto-allocated ID of the entity.
+                        # Never equal to zero. Values less than zero are discouraged and may not
+                        # be supported in the future.
+                  },
+                ],
+                "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                    # ID and namespace ID.
+                    # Queries are scoped to a single partition.
+                    # by project and namespace, however the namespace ID may be empty.
+                    #
+                    # A partition ID contains several dimensions:
+                    # project ID and namespace ID.
+                    #
+                    # Partition dimensions:
+                    #
+                    # - May be `""`.
+                    # - Must be valid UTF-8 bytes.
+                    # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                    # If the value of any dimension matches regex `__.*__`, the partition is
+                    # reserved/read-only.
+                    # A reserved/read-only partition ID is forbidden in certain documented
+                    # contexts.
+                    #
+                    # Foreign partition IDs (in which the project ID does
+                    # not match the context project ID ) are discouraged.
+                    # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                  "projectId": "A String", # The ID of the project to which the entities belong.
+                  "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+                },
+              },
+              "blobValue": "A String", # A blob value.
+                  # May have at most 1,000,000 bytes.
+                  # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                  # In JSON requests, must be base64-encoded.
+              "stringValue": "A String", # A UTF-8 encoded string value.
+                  # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                  # Otherwise, may be set to at least 1,000,000 bytes.
+              "nullValue": "A String", # A null value.
+              "arrayValue": { # An array value. # An array value.
+                  # Cannot contain another array value.
+                  # A `Value` instance that sets field `array_value` must not set fields
+                  # `meaning` or `exclude_from_indexes`.
+                "values": [ # Values in the array.
+                    # The order of this array may not be preserved if it contains a mix of
+                    # indexed and unindexed values.
+                  # Object with schema name: Value
+                ],
+              },
+              "integerValue": "A String", # An integer value.
+              "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                  # of doubles representing degrees latitude and degrees longitude. Unless
+                  # specified otherwise, this must conform to the
+                  # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                  # standard</a>. Values must be within normalized ranges.
+                  #
+                  # Example of normalization code in Python:
+                  #
+                  #     def NormalizeLongitude(longitude):
+                  #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                  #       q, r = divmod(longitude, 360.0)
+                  #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                  #         return r - 360.0
+                  #       return r
+                  #
+                  #     def NormalizeLatLng(latitude, longitude):
+                  #       """Wraps decimal degrees latitude and longitude to
+                  #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                  #       r = latitude % 360.0
+                  #       if r <= 90.0:
+                  #         return r, NormalizeLongitude(longitude)
+                  #       elif r >= 270.0:
+                  #         return r - 360, NormalizeLongitude(longitude)
+                  #       else:
+                  #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                  #
+                  #     assert 180.0 == NormalizeLongitude(180.0)
+                  #     assert -180.0 == NormalizeLongitude(-180.0)
+                  #     assert -179.0 == NormalizeLongitude(181.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                  #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                  #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                  #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                  #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                  #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                  #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                  #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+              },
+            },
+          },
+          "key": { # A unique identifier for an entity. # The entity's key.
+              #
+              # An entity must have a key, unless otherwise documented (for example,
+              # an entity in `Value.entity_value` may have no key).
+              # An entity's kind is its key path's last element's kind,
+              # or null if it has no key.
+              # If a key's partition ID or any of its path kinds or names are
+              # reserved/read-only, the key is reserved/read-only.
+              # A reserved/read-only key is forbidden in certain documented contexts.
+            "path": [ # The entity path.
+                # An entity path consists of one or more elements composed of a kind and a
+                # string or numerical identifier, which identify entities. The first
+                # element identifies a _root entity_, the second element identifies
+                # a _child_ of the root entity, the third element identifies a child of the
+                # second entity, and so forth. The entities identified by all prefixes of
+                # the path are called the element's _ancestors_.
+                #
+                # An entity path is always fully complete: *all* of the entity's ancestors
+                # are required to be in the path along with the entity identifier itself.
+                # The only exception is that in some documented cases, the identifier in the
+                # last path element (for the entity) itself may be omitted. For example,
+                # the last path element of the key of `Mutation.insert` may have no
+                # identifier.
+                #
+                # A path can never be empty, and a path can have at most 100 elements.
+              { # A (kind, ID/name) pair used to construct a key path.
+                  #
+                  # If either name or ID is set, the element is complete.
+                  # If neither is set, the element is incomplete.
+                "kind": "A String", # The kind of the entity.
+                    # A kind matching regex `__.*__` is reserved/read-only.
+                    # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "name": "A String", # The name of the entity.
+                    # A name matching regex `__.*__` is reserved/read-only.
+                    # A name must not be more than 1500 bytes when UTF-8 encoded.
+                    # Cannot be `""`.
+                "id": "A String", # The auto-allocated ID of the entity.
+                    # Never equal to zero. Values less than zero are discouraged and may not
+                    # be supported in the future.
+              },
+            ],
+            "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                # ID and namespace ID.
+                # Queries are scoped to a single partition.
+                # by project and namespace, however the namespace ID may be empty.
+                #
+                # A partition ID contains several dimensions:
+                # project ID and namespace ID.
+                #
+                # Partition dimensions:
+                #
+                # - May be `""`.
+                # - Must be valid UTF-8 bytes.
+                # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                # If the value of any dimension matches regex `__.*__`, the partition is
+                # reserved/read-only.
+                # A reserved/read-only partition ID is forbidden in certain documented
+                # contexts.
+                #
+                # Foreign partition IDs (in which the project ID does
+                # not match the context project ID ) are discouraged.
+                # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+              "projectId": "A String", # The ID of the project to which the entities belong.
+              "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+            },
+          },
+        },
+      },
+    ],
+    "deferred": [ # A list of keys that were not looked up due to resource constraints. The
+        # order of results in this field is undefined and has no relation to the
+        # order of the keys in the input.
+      { # A unique identifier for an entity.
+          # If a key's partition ID or any of its path kinds or names are
+          # reserved/read-only, the key is reserved/read-only.
+          # A reserved/read-only key is forbidden in certain documented contexts.
+        "path": [ # The entity path.
+            # An entity path consists of one or more elements composed of a kind and a
+            # string or numerical identifier, which identify entities. The first
+            # element identifies a _root entity_, the second element identifies
+            # a _child_ of the root entity, the third element identifies a child of the
+            # second entity, and so forth. The entities identified by all prefixes of
+            # the path are called the element's _ancestors_.
+            #
+            # An entity path is always fully complete: *all* of the entity's ancestors
+            # are required to be in the path along with the entity identifier itself.
+            # The only exception is that in some documented cases, the identifier in the
+            # last path element (for the entity) itself may be omitted. For example,
+            # the last path element of the key of `Mutation.insert` may have no
+            # identifier.
+            #
+            # A path can never be empty, and a path can have at most 100 elements.
+          { # A (kind, ID/name) pair used to construct a key path.
+              #
+              # If either name or ID is set, the element is complete.
+              # If neither is set, the element is incomplete.
+            "kind": "A String", # The kind of the entity.
+                # A kind matching regex `__.*__` is reserved/read-only.
+                # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                # Cannot be `""`.
+            "name": "A String", # The name of the entity.
+                # A name matching regex `__.*__` is reserved/read-only.
+                # A name must not be more than 1500 bytes when UTF-8 encoded.
+                # Cannot be `""`.
+            "id": "A String", # The auto-allocated ID of the entity.
+                # Never equal to zero. Values less than zero are discouraged and may not
+                # be supported in the future.
+          },
+        ],
+        "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+            # ID and namespace ID.
+            # Queries are scoped to a single partition.
+            # by project and namespace, however the namespace ID may be empty.
+            #
+            # A partition ID contains several dimensions:
+            # project ID and namespace ID.
+            #
+            # Partition dimensions:
+            #
+            # - May be `""`.
+            # - Must be valid UTF-8 bytes.
+            # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+            # If the value of any dimension matches regex `__.*__`, the partition is
+            # reserved/read-only.
+            # A reserved/read-only partition ID is forbidden in certain documented
+            # contexts.
+            #
+            # Foreign partition IDs (in which the project ID does
+            # not match the context project ID ) are discouraged.
+            # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+          "projectId": "A String", # The ID of the project to which the entities belong.
+          "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="rollback">rollback(projectId, body, x__xgafv=None)</code>
+  <pre>Rolls back a transaction.
+
+Args:
+  projectId: string, The ID of the project against which to make the request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for google.datastore.v1beta3.Datastore.Rollback.
+    "transaction": "A String", # The transaction identifier, returned by a call to
+        # google.datastore.v1beta3.Datastore.BeginTransaction.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response for google.datastore.v1beta3.Datastore.Rollback
+      # (an empty message).
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="runQuery">runQuery(projectId, body, x__xgafv=None)</code>
+  <pre>Queries for entities.
+
+Args:
+  projectId: string, The ID of the project against which to make the request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for google.datastore.v1beta3.Datastore.RunQuery.
+    "query": { # A query for entities. # The query to run.
+      "startCursor": "A String", # A starting point for the query results. Query cursors are
+          # returned in query result batches and
+          # [can only be used to continue the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets).
+      "kind": [ # The kinds to query (if empty, returns entities of all kinds).
+          # Currently at most 1 kind may be specified.
+        { # A representation of a kind.
+          "name": "A String", # The name of the kind.
+        },
+      ],
+      "projection": [ # The projection to return. Defaults to returning all properties.
+        { # A representation of a property in a projection.
+          "property": { # A reference to a property relative to the kind expressions. # The property to project.
+            "name": "A String", # The name of the property.
+                # If name includes "."s, it may be interpreted as a property name path.
+          },
+        },
+      ],
+      "distinctOn": [ # The properties to make distinct. The query results will contain the first
+          # result for each distinct combination of values for the given properties
+          # (if empty, all results are returned).
+        { # A reference to a property relative to the kind expressions.
+          "name": "A String", # The name of the property.
+              # If name includes "."s, it may be interpreted as a property name path.
+        },
+      ],
+      "filter": { # A holder for any type of filter. # The filter to apply.
+        "compositeFilter": { # A filter that merges multiple other filters using the given operator. # A composite filter.
+          "filters": [ # The list of filters to combine.
+              # Must contain at least one filter.
+            # Object with schema name: Filter
+          ],
+          "op": "A String", # The operator for combining multiple filters.
+        },
+        "propertyFilter": { # A filter on a specific property. # A filter on a property.
+          "property": { # A reference to a property relative to the kind expressions. # The property to filter by.
+            "name": "A String", # The name of the property.
+                # If name includes "."s, it may be interpreted as a property name path.
+          },
+          "value": { # A message that can hold any of the supported value types and associated # The value to compare the property to.
+              # metadata.
+            "booleanValue": True or False, # A boolean value.
+            "entityValue": # Object with schema name: Entity # An entity value.
+                #
+                # - May have no key.
+                # - May have a key with an incomplete key path.
+                # - May have a reserved/read-only key.
+            "timestampValue": "A String", # A timestamp value.
+                # When stored in the Datastore, precise only to microseconds;
+                # any additional precision is rounded down.
+            "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                # explicitly.
+            "doubleValue": 3.14, # A double value.
+            "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+            "keyValue": { # A unique identifier for an entity. # A key value.
+                # If a key's partition ID or any of its path kinds or names are
+                # reserved/read-only, the key is reserved/read-only.
+                # A reserved/read-only key is forbidden in certain documented contexts.
+              "path": [ # The entity path.
+                  # An entity path consists of one or more elements composed of a kind and a
+                  # string or numerical identifier, which identify entities. The first
+                  # element identifies a _root entity_, the second element identifies
+                  # a _child_ of the root entity, the third element identifies a child of the
+                  # second entity, and so forth. The entities identified by all prefixes of
+                  # the path are called the element's _ancestors_.
+                  #
+                  # An entity path is always fully complete: *all* of the entity's ancestors
+                  # are required to be in the path along with the entity identifier itself.
+                  # The only exception is that in some documented cases, the identifier in the
+                  # last path element (for the entity) itself may be omitted. For example,
+                  # the last path element of the key of `Mutation.insert` may have no
+                  # identifier.
+                  #
+                  # A path can never be empty, and a path can have at most 100 elements.
+                { # A (kind, ID/name) pair used to construct a key path.
+                    #
+                    # If either name or ID is set, the element is complete.
+                    # If neither is set, the element is incomplete.
+                  "kind": "A String", # The kind of the entity.
+                      # A kind matching regex `__.*__` is reserved/read-only.
+                      # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "name": "A String", # The name of the entity.
+                      # A name matching regex `__.*__` is reserved/read-only.
+                      # A name must not be more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "id": "A String", # The auto-allocated ID of the entity.
+                      # Never equal to zero. Values less than zero are discouraged and may not
+                      # be supported in the future.
+                },
+              ],
+              "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                  # ID and namespace ID.
+                  # Queries are scoped to a single partition.
+                  # by project and namespace, however the namespace ID may be empty.
+                  #
+                  # A partition ID contains several dimensions:
+                  # project ID and namespace ID.
+                  #
+                  # Partition dimensions:
+                  #
+                  # - May be `""`.
+                  # - Must be valid UTF-8 bytes.
+                  # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                  # If the value of any dimension matches regex `__.*__`, the partition is
+                  # reserved/read-only.
+                  # A reserved/read-only partition ID is forbidden in certain documented
+                  # contexts.
+                  #
+                  # Foreign partition IDs (in which the project ID does
+                  # not match the context project ID ) are discouraged.
+                  # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                "projectId": "A String", # The ID of the project to which the entities belong.
+                "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+              },
+            },
+            "blobValue": "A String", # A blob value.
+                # May have at most 1,000,000 bytes.
+                # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                # In JSON requests, must be base64-encoded.
+            "stringValue": "A String", # A UTF-8 encoded string value.
+                # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                # Otherwise, may be set to at least 1,000,000 bytes.
+            "nullValue": "A String", # A null value.
+            "arrayValue": { # An array value. # An array value.
+                # Cannot contain another array value.
+                # A `Value` instance that sets field `array_value` must not set fields
+                # `meaning` or `exclude_from_indexes`.
+              "values": [ # Values in the array.
+                  # The order of this array may not be preserved if it contains a mix of
+                  # indexed and unindexed values.
+                # Object with schema name: Value
+              ],
+            },
+            "integerValue": "A String", # An integer value.
+            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                # of doubles representing degrees latitude and degrees longitude. Unless
+                # specified otherwise, this must conform to the
+                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                # standard</a>. Values must be within normalized ranges.
+                #
+                # Example of normalization code in Python:
+                #
+                #     def NormalizeLongitude(longitude):
+                #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                #       q, r = divmod(longitude, 360.0)
+                #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                #         return r - 360.0
+                #       return r
+                #
+                #     def NormalizeLatLng(latitude, longitude):
+                #       """Wraps decimal degrees latitude and longitude to
+                #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                #       r = latitude % 360.0
+                #       if r <= 90.0:
+                #         return r, NormalizeLongitude(longitude)
+                #       elif r >= 270.0:
+                #         return r - 360, NormalizeLongitude(longitude)
+                #       else:
+                #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                #
+                #     assert 180.0 == NormalizeLongitude(180.0)
+                #     assert -180.0 == NormalizeLongitude(-180.0)
+                #     assert -179.0 == NormalizeLongitude(181.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+            },
+          },
+          "op": "A String", # The operator to filter by.
+        },
+      },
+      "limit": 42, # The maximum number of results to return. Applies after all other
+          # constraints. Optional.
+          # Unspecified is interpreted as no limit.
+          # Must be >= 0 if specified.
+      "offset": 42, # The number of results to skip. Applies before limit, but after all other
+          # constraints. Optional. Must be >= 0 if specified.
+      "endCursor": "A String", # An ending point for the query results. Query cursors are
+          # returned in query result batches and
+          # [can only be used to limit the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets).
+      "order": [ # The order to apply to the query results (if empty, order is unspecified).
+        { # The desired order for a specific property.
+          "direction": "A String", # The direction to order by. Defaults to `ASCENDING`.
+          "property": { # A reference to a property relative to the kind expressions. # The property to order by.
+            "name": "A String", # The name of the property.
+                # If name includes "."s, it may be interpreted as a property name path.
+          },
+        },
+      ],
+    },
+    "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, identified by a partition ID.
+        # Queries are scoped to a single partition.
+        # This partition ID is normalized with the standard default context
+        # partition ID.
+        # by project and namespace, however the namespace ID may be empty.
+        #
+        # A partition ID contains several dimensions:
+        # project ID and namespace ID.
+        #
+        # Partition dimensions:
+        #
+        # - May be `""`.
+        # - Must be valid UTF-8 bytes.
+        # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+        # If the value of any dimension matches regex `__.*__`, the partition is
+        # reserved/read-only.
+        # A reserved/read-only partition ID is forbidden in certain documented
+        # contexts.
+        #
+        # Foreign partition IDs (in which the project ID does
+        # not match the context project ID ) are discouraged.
+        # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+      "projectId": "A String", # The ID of the project to which the entities belong.
+      "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+    },
+    "gqlQuery": { # A [GQL query](https://cloud.google.com/datastore/docs/apis/gql/gql_reference). # The GQL query to run.
+      "queryString": "A String", # A string of the format described
+          # [here](https://cloud.google.com/datastore/docs/apis/gql/gql_reference).
+      "positionalBindings": [ # Numbered binding site @1 references the first numbered parameter,
+          # effectively using 1-based indexing, rather than the usual 0.
+          # For each binding site numbered i in `query_string`,
+          # there must be an i-th numbered parameter.
+          # The inverse must also be true.
+        { # A binding parameter for a GQL query.
+          "cursor": "A String", # A query cursor. Query cursors are returned in query
+              # result batches.
+          "value": { # A message that can hold any of the supported value types and associated # A value parameter.
+              # metadata.
+            "booleanValue": True or False, # A boolean value.
+            "entityValue": # Object with schema name: Entity # An entity value.
+                #
+                # - May have no key.
+                # - May have a key with an incomplete key path.
+                # - May have a reserved/read-only key.
+            "timestampValue": "A String", # A timestamp value.
+                # When stored in the Datastore, precise only to microseconds;
+                # any additional precision is rounded down.
+            "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                # explicitly.
+            "doubleValue": 3.14, # A double value.
+            "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+            "keyValue": { # A unique identifier for an entity. # A key value.
+                # If a key's partition ID or any of its path kinds or names are
+                # reserved/read-only, the key is reserved/read-only.
+                # A reserved/read-only key is forbidden in certain documented contexts.
+              "path": [ # The entity path.
+                  # An entity path consists of one or more elements composed of a kind and a
+                  # string or numerical identifier, which identify entities. The first
+                  # element identifies a _root entity_, the second element identifies
+                  # a _child_ of the root entity, the third element identifies a child of the
+                  # second entity, and so forth. The entities identified by all prefixes of
+                  # the path are called the element's _ancestors_.
+                  #
+                  # An entity path is always fully complete: *all* of the entity's ancestors
+                  # are required to be in the path along with the entity identifier itself.
+                  # The only exception is that in some documented cases, the identifier in the
+                  # last path element (for the entity) itself may be omitted. For example,
+                  # the last path element of the key of `Mutation.insert` may have no
+                  # identifier.
+                  #
+                  # A path can never be empty, and a path can have at most 100 elements.
+                { # A (kind, ID/name) pair used to construct a key path.
+                    #
+                    # If either name or ID is set, the element is complete.
+                    # If neither is set, the element is incomplete.
+                  "kind": "A String", # The kind of the entity.
+                      # A kind matching regex `__.*__` is reserved/read-only.
+                      # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "name": "A String", # The name of the entity.
+                      # A name matching regex `__.*__` is reserved/read-only.
+                      # A name must not be more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "id": "A String", # The auto-allocated ID of the entity.
+                      # Never equal to zero. Values less than zero are discouraged and may not
+                      # be supported in the future.
+                },
+              ],
+              "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                  # ID and namespace ID.
+                  # Queries are scoped to a single partition.
+                  # by project and namespace, however the namespace ID may be empty.
+                  #
+                  # A partition ID contains several dimensions:
+                  # project ID and namespace ID.
+                  #
+                  # Partition dimensions:
+                  #
+                  # - May be `""`.
+                  # - Must be valid UTF-8 bytes.
+                  # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                  # If the value of any dimension matches regex `__.*__`, the partition is
+                  # reserved/read-only.
+                  # A reserved/read-only partition ID is forbidden in certain documented
+                  # contexts.
+                  #
+                  # Foreign partition IDs (in which the project ID does
+                  # not match the context project ID ) are discouraged.
+                  # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                "projectId": "A String", # The ID of the project to which the entities belong.
+                "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+              },
+            },
+            "blobValue": "A String", # A blob value.
+                # May have at most 1,000,000 bytes.
+                # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                # In JSON requests, must be base64-encoded.
+            "stringValue": "A String", # A UTF-8 encoded string value.
+                # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                # Otherwise, may be set to at least 1,000,000 bytes.
+            "nullValue": "A String", # A null value.
+            "arrayValue": { # An array value. # An array value.
+                # Cannot contain another array value.
+                # A `Value` instance that sets field `array_value` must not set fields
+                # `meaning` or `exclude_from_indexes`.
+              "values": [ # Values in the array.
+                  # The order of this array may not be preserved if it contains a mix of
+                  # indexed and unindexed values.
+                # Object with schema name: Value
+              ],
+            },
+            "integerValue": "A String", # An integer value.
+            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                # of doubles representing degrees latitude and degrees longitude. Unless
+                # specified otherwise, this must conform to the
+                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                # standard</a>. Values must be within normalized ranges.
+                #
+                # Example of normalization code in Python:
+                #
+                #     def NormalizeLongitude(longitude):
+                #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                #       q, r = divmod(longitude, 360.0)
+                #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                #         return r - 360.0
+                #       return r
+                #
+                #     def NormalizeLatLng(latitude, longitude):
+                #       """Wraps decimal degrees latitude and longitude to
+                #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                #       r = latitude % 360.0
+                #       if r <= 90.0:
+                #         return r, NormalizeLongitude(longitude)
+                #       elif r >= 270.0:
+                #         return r - 360, NormalizeLongitude(longitude)
+                #       else:
+                #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                #
+                #     assert 180.0 == NormalizeLongitude(180.0)
+                #     assert -180.0 == NormalizeLongitude(-180.0)
+                #     assert -179.0 == NormalizeLongitude(181.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+            },
+          },
+        },
+      ],
+      "namedBindings": { # For each non-reserved named binding site in the query string,
+          # there must be a named parameter with that name,
+          # but not necessarily the inverse.
+          # Key must match regex `A-Za-z_$*`, must not match regex
+          # `__.*__`, and must not be `""`.
+        "a_key": { # A binding parameter for a GQL query.
+          "cursor": "A String", # A query cursor. Query cursors are returned in query
+              # result batches.
+          "value": { # A message that can hold any of the supported value types and associated # A value parameter.
+              # metadata.
+            "booleanValue": True or False, # A boolean value.
+            "entityValue": # Object with schema name: Entity # An entity value.
+                #
+                # - May have no key.
+                # - May have a key with an incomplete key path.
+                # - May have a reserved/read-only key.
+            "timestampValue": "A String", # A timestamp value.
+                # When stored in the Datastore, precise only to microseconds;
+                # any additional precision is rounded down.
+            "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                # explicitly.
+            "doubleValue": 3.14, # A double value.
+            "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+            "keyValue": { # A unique identifier for an entity. # A key value.
+                # If a key's partition ID or any of its path kinds or names are
+                # reserved/read-only, the key is reserved/read-only.
+                # A reserved/read-only key is forbidden in certain documented contexts.
+              "path": [ # The entity path.
+                  # An entity path consists of one or more elements composed of a kind and a
+                  # string or numerical identifier, which identify entities. The first
+                  # element identifies a _root entity_, the second element identifies
+                  # a _child_ of the root entity, the third element identifies a child of the
+                  # second entity, and so forth. The entities identified by all prefixes of
+                  # the path are called the element's _ancestors_.
+                  #
+                  # An entity path is always fully complete: *all* of the entity's ancestors
+                  # are required to be in the path along with the entity identifier itself.
+                  # The only exception is that in some documented cases, the identifier in the
+                  # last path element (for the entity) itself may be omitted. For example,
+                  # the last path element of the key of `Mutation.insert` may have no
+                  # identifier.
+                  #
+                  # A path can never be empty, and a path can have at most 100 elements.
+                { # A (kind, ID/name) pair used to construct a key path.
+                    #
+                    # If either name or ID is set, the element is complete.
+                    # If neither is set, the element is incomplete.
+                  "kind": "A String", # The kind of the entity.
+                      # A kind matching regex `__.*__` is reserved/read-only.
+                      # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "name": "A String", # The name of the entity.
+                      # A name matching regex `__.*__` is reserved/read-only.
+                      # A name must not be more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "id": "A String", # The auto-allocated ID of the entity.
+                      # Never equal to zero. Values less than zero are discouraged and may not
+                      # be supported in the future.
+                },
+              ],
+              "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                  # ID and namespace ID.
+                  # Queries are scoped to a single partition.
+                  # by project and namespace, however the namespace ID may be empty.
+                  #
+                  # A partition ID contains several dimensions:
+                  # project ID and namespace ID.
+                  #
+                  # Partition dimensions:
+                  #
+                  # - May be `""`.
+                  # - Must be valid UTF-8 bytes.
+                  # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                  # If the value of any dimension matches regex `__.*__`, the partition is
+                  # reserved/read-only.
+                  # A reserved/read-only partition ID is forbidden in certain documented
+                  # contexts.
+                  #
+                  # Foreign partition IDs (in which the project ID does
+                  # not match the context project ID ) are discouraged.
+                  # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                "projectId": "A String", # The ID of the project to which the entities belong.
+                "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+              },
+            },
+            "blobValue": "A String", # A blob value.
+                # May have at most 1,000,000 bytes.
+                # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                # In JSON requests, must be base64-encoded.
+            "stringValue": "A String", # A UTF-8 encoded string value.
+                # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                # Otherwise, may be set to at least 1,000,000 bytes.
+            "nullValue": "A String", # A null value.
+            "arrayValue": { # An array value. # An array value.
+                # Cannot contain another array value.
+                # A `Value` instance that sets field `array_value` must not set fields
+                # `meaning` or `exclude_from_indexes`.
+              "values": [ # Values in the array.
+                  # The order of this array may not be preserved if it contains a mix of
+                  # indexed and unindexed values.
+                # Object with schema name: Value
+              ],
+            },
+            "integerValue": "A String", # An integer value.
+            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                # of doubles representing degrees latitude and degrees longitude. Unless
+                # specified otherwise, this must conform to the
+                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                # standard</a>. Values must be within normalized ranges.
+                #
+                # Example of normalization code in Python:
+                #
+                #     def NormalizeLongitude(longitude):
+                #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                #       q, r = divmod(longitude, 360.0)
+                #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                #         return r - 360.0
+                #       return r
+                #
+                #     def NormalizeLatLng(latitude, longitude):
+                #       """Wraps decimal degrees latitude and longitude to
+                #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                #       r = latitude % 360.0
+                #       if r <= 90.0:
+                #         return r, NormalizeLongitude(longitude)
+                #       elif r >= 270.0:
+                #         return r - 360, NormalizeLongitude(longitude)
+                #       else:
+                #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                #
+                #     assert 180.0 == NormalizeLongitude(180.0)
+                #     assert -180.0 == NormalizeLongitude(-180.0)
+                #     assert -179.0 == NormalizeLongitude(181.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+            },
+          },
+        },
+      },
+      "allowLiterals": True or False, # When false, the query string must not contain any literals and instead
+          # must bind all values. For example,
+          # `SELECT * FROM Kind WHERE a = 'string literal'` is not allowed, while
+          # `SELECT * FROM Kind WHERE a = @value` is.
+    },
+    "readOptions": { # The options shared by read requests. # The options for this query.
+      "transaction": "A String", # The identifier of the transaction in which to read. A
+          # transaction identifier is returned by a call to
+          # BeginTransaction.
+      "readConsistency": "A String", # The non-transactional read consistency to use.
+          # Cannot be set to `STRONG` for global queries.
+    },
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response for google.datastore.v1beta3.Datastore.RunQuery.
+    "query": { # A query for entities. # The parsed form of the `GqlQuery` from the request, if it was set.
+      "startCursor": "A String", # A starting point for the query results. Query cursors are
+          # returned in query result batches and
+          # [can only be used to continue the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets).
+      "kind": [ # The kinds to query (if empty, returns entities of all kinds).
+          # Currently at most 1 kind may be specified.
+        { # A representation of a kind.
+          "name": "A String", # The name of the kind.
+        },
+      ],
+      "projection": [ # The projection to return. Defaults to returning all properties.
+        { # A representation of a property in a projection.
+          "property": { # A reference to a property relative to the kind expressions. # The property to project.
+            "name": "A String", # The name of the property.
+                # If name includes "."s, it may be interpreted as a property name path.
+          },
+        },
+      ],
+      "distinctOn": [ # The properties to make distinct. The query results will contain the first
+          # result for each distinct combination of values for the given properties
+          # (if empty, all results are returned).
+        { # A reference to a property relative to the kind expressions.
+          "name": "A String", # The name of the property.
+              # If name includes "."s, it may be interpreted as a property name path.
+        },
+      ],
+      "filter": { # A holder for any type of filter. # The filter to apply.
+        "compositeFilter": { # A filter that merges multiple other filters using the given operator. # A composite filter.
+          "filters": [ # The list of filters to combine.
+              # Must contain at least one filter.
+            # Object with schema name: Filter
+          ],
+          "op": "A String", # The operator for combining multiple filters.
+        },
+        "propertyFilter": { # A filter on a specific property. # A filter on a property.
+          "property": { # A reference to a property relative to the kind expressions. # The property to filter by.
+            "name": "A String", # The name of the property.
+                # If name includes "."s, it may be interpreted as a property name path.
+          },
+          "value": { # A message that can hold any of the supported value types and associated # The value to compare the property to.
+              # metadata.
+            "booleanValue": True or False, # A boolean value.
+            "entityValue": # Object with schema name: Entity # An entity value.
+                #
+                # - May have no key.
+                # - May have a key with an incomplete key path.
+                # - May have a reserved/read-only key.
+            "timestampValue": "A String", # A timestamp value.
+                # When stored in the Datastore, precise only to microseconds;
+                # any additional precision is rounded down.
+            "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                # explicitly.
+            "doubleValue": 3.14, # A double value.
+            "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+            "keyValue": { # A unique identifier for an entity. # A key value.
+                # If a key's partition ID or any of its path kinds or names are
+                # reserved/read-only, the key is reserved/read-only.
+                # A reserved/read-only key is forbidden in certain documented contexts.
+              "path": [ # The entity path.
+                  # An entity path consists of one or more elements composed of a kind and a
+                  # string or numerical identifier, which identify entities. The first
+                  # element identifies a _root entity_, the second element identifies
+                  # a _child_ of the root entity, the third element identifies a child of the
+                  # second entity, and so forth. The entities identified by all prefixes of
+                  # the path are called the element's _ancestors_.
+                  #
+                  # An entity path is always fully complete: *all* of the entity's ancestors
+                  # are required to be in the path along with the entity identifier itself.
+                  # The only exception is that in some documented cases, the identifier in the
+                  # last path element (for the entity) itself may be omitted. For example,
+                  # the last path element of the key of `Mutation.insert` may have no
+                  # identifier.
+                  #
+                  # A path can never be empty, and a path can have at most 100 elements.
+                { # A (kind, ID/name) pair used to construct a key path.
+                    #
+                    # If either name or ID is set, the element is complete.
+                    # If neither is set, the element is incomplete.
+                  "kind": "A String", # The kind of the entity.
+                      # A kind matching regex `__.*__` is reserved/read-only.
+                      # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "name": "A String", # The name of the entity.
+                      # A name matching regex `__.*__` is reserved/read-only.
+                      # A name must not be more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "id": "A String", # The auto-allocated ID of the entity.
+                      # Never equal to zero. Values less than zero are discouraged and may not
+                      # be supported in the future.
+                },
+              ],
+              "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                  # ID and namespace ID.
+                  # Queries are scoped to a single partition.
+                  # by project and namespace, however the namespace ID may be empty.
+                  #
+                  # A partition ID contains several dimensions:
+                  # project ID and namespace ID.
+                  #
+                  # Partition dimensions:
+                  #
+                  # - May be `""`.
+                  # - Must be valid UTF-8 bytes.
+                  # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                  # If the value of any dimension matches regex `__.*__`, the partition is
+                  # reserved/read-only.
+                  # A reserved/read-only partition ID is forbidden in certain documented
+                  # contexts.
+                  #
+                  # Foreign partition IDs (in which the project ID does
+                  # not match the context project ID ) are discouraged.
+                  # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                "projectId": "A String", # The ID of the project to which the entities belong.
+                "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+              },
+            },
+            "blobValue": "A String", # A blob value.
+                # May have at most 1,000,000 bytes.
+                # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                # In JSON requests, must be base64-encoded.
+            "stringValue": "A String", # A UTF-8 encoded string value.
+                # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                # Otherwise, may be set to at least 1,000,000 bytes.
+            "nullValue": "A String", # A null value.
+            "arrayValue": { # An array value. # An array value.
+                # Cannot contain another array value.
+                # A `Value` instance that sets field `array_value` must not set fields
+                # `meaning` or `exclude_from_indexes`.
+              "values": [ # Values in the array.
+                  # The order of this array may not be preserved if it contains a mix of
+                  # indexed and unindexed values.
+                # Object with schema name: Value
+              ],
+            },
+            "integerValue": "A String", # An integer value.
+            "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                # of doubles representing degrees latitude and degrees longitude. Unless
+                # specified otherwise, this must conform to the
+                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                # standard</a>. Values must be within normalized ranges.
+                #
+                # Example of normalization code in Python:
+                #
+                #     def NormalizeLongitude(longitude):
+                #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                #       q, r = divmod(longitude, 360.0)
+                #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                #         return r - 360.0
+                #       return r
+                #
+                #     def NormalizeLatLng(latitude, longitude):
+                #       """Wraps decimal degrees latitude and longitude to
+                #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                #       r = latitude % 360.0
+                #       if r <= 90.0:
+                #         return r, NormalizeLongitude(longitude)
+                #       elif r >= 270.0:
+                #         return r - 360, NormalizeLongitude(longitude)
+                #       else:
+                #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                #
+                #     assert 180.0 == NormalizeLongitude(180.0)
+                #     assert -180.0 == NormalizeLongitude(-180.0)
+                #     assert -179.0 == NormalizeLongitude(181.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+            },
+          },
+          "op": "A String", # The operator to filter by.
+        },
+      },
+      "limit": 42, # The maximum number of results to return. Applies after all other
+          # constraints. Optional.
+          # Unspecified is interpreted as no limit.
+          # Must be >= 0 if specified.
+      "offset": 42, # The number of results to skip. Applies before limit, but after all other
+          # constraints. Optional. Must be >= 0 if specified.
+      "endCursor": "A String", # An ending point for the query results. Query cursors are
+          # returned in query result batches and
+          # [can only be used to limit the same query](https://cloud.google.com/datastore/docs/concepts/queries#cursors_limits_and_offsets).
+      "order": [ # The order to apply to the query results (if empty, order is unspecified).
+        { # The desired order for a specific property.
+          "direction": "A String", # The direction to order by. Defaults to `ASCENDING`.
+          "property": { # A reference to a property relative to the kind expressions. # The property to order by.
+            "name": "A String", # The name of the property.
+                # If name includes "."s, it may be interpreted as a property name path.
+          },
+        },
+      ],
+    },
+    "batch": { # A batch of results produced by a query. # A batch of query results (always present).
+      "entityResultType": "A String", # The result type for every entity in `entity_results`.
+      "skippedResults": 42, # The number of results skipped, typically because of an offset.
+      "entityResults": [ # The results for this batch.
+        { # The result of fetching an entity from Datastore.
+          "cursor": "A String", # A cursor that points to the position after the result entity.
+              # Set only when the `EntityResult` is part of a `QueryResultBatch` message.
+          "entity": { # A Datastore data object. # The resulting entity.
+              #
+              # An entity is limited to 1 megabyte when stored. That _roughly_
+              # corresponds to a limit of 1 megabyte for the serialized form of this
+              # message.
+            "properties": { # The entity's properties.
+                # The map's keys are property names.
+                # A property name matching regex `__.*__` is reserved.
+                # A reserved property name is forbidden in certain documented contexts.
+                # The name must not contain more than 500 characters.
+                # The name cannot be `""`.
+              "a_key": { # A message that can hold any of the supported value types and associated
+                  # metadata.
+                "booleanValue": True or False, # A boolean value.
+                "entityValue": # Object with schema name: Entity # An entity value.
+                    #
+                    # - May have no key.
+                    # - May have a key with an incomplete key path.
+                    # - May have a reserved/read-only key.
+                "timestampValue": "A String", # A timestamp value.
+                    # When stored in the Datastore, precise only to microseconds;
+                    # any additional precision is rounded down.
+                "excludeFromIndexes": True or False, # If the value should be excluded from all indexes including those defined
+                    # explicitly.
+                "doubleValue": 3.14, # A double value.
+                "meaning": 42, # The `meaning` field should only be populated for backwards compatibility.
+                "keyValue": { # A unique identifier for an entity. # A key value.
+                    # If a key's partition ID or any of its path kinds or names are
+                    # reserved/read-only, the key is reserved/read-only.
+                    # A reserved/read-only key is forbidden in certain documented contexts.
+                  "path": [ # The entity path.
+                      # An entity path consists of one or more elements composed of a kind and a
+                      # string or numerical identifier, which identify entities. The first
+                      # element identifies a _root entity_, the second element identifies
+                      # a _child_ of the root entity, the third element identifies a child of the
+                      # second entity, and so forth. The entities identified by all prefixes of
+                      # the path are called the element's _ancestors_.
+                      #
+                      # An entity path is always fully complete: *all* of the entity's ancestors
+                      # are required to be in the path along with the entity identifier itself.
+                      # The only exception is that in some documented cases, the identifier in the
+                      # last path element (for the entity) itself may be omitted. For example,
+                      # the last path element of the key of `Mutation.insert` may have no
+                      # identifier.
+                      #
+                      # A path can never be empty, and a path can have at most 100 elements.
+                    { # A (kind, ID/name) pair used to construct a key path.
+                        #
+                        # If either name or ID is set, the element is complete.
+                        # If neither is set, the element is incomplete.
+                      "kind": "A String", # The kind of the entity.
+                          # A kind matching regex `__.*__` is reserved/read-only.
+                          # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                          # Cannot be `""`.
+                      "name": "A String", # The name of the entity.
+                          # A name matching regex `__.*__` is reserved/read-only.
+                          # A name must not be more than 1500 bytes when UTF-8 encoded.
+                          # Cannot be `""`.
+                      "id": "A String", # The auto-allocated ID of the entity.
+                          # Never equal to zero. Values less than zero are discouraged and may not
+                          # be supported in the future.
+                    },
+                  ],
+                  "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                      # ID and namespace ID.
+                      # Queries are scoped to a single partition.
+                      # by project and namespace, however the namespace ID may be empty.
+                      #
+                      # A partition ID contains several dimensions:
+                      # project ID and namespace ID.
+                      #
+                      # Partition dimensions:
+                      #
+                      # - May be `""`.
+                      # - Must be valid UTF-8 bytes.
+                      # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                      # If the value of any dimension matches regex `__.*__`, the partition is
+                      # reserved/read-only.
+                      # A reserved/read-only partition ID is forbidden in certain documented
+                      # contexts.
+                      #
+                      # Foreign partition IDs (in which the project ID does
+                      # not match the context project ID ) are discouraged.
+                      # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                    "projectId": "A String", # The ID of the project to which the entities belong.
+                    "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+                  },
+                },
+                "blobValue": "A String", # A blob value.
+                    # May have at most 1,000,000 bytes.
+                    # When `exclude_from_indexes` is false, may have at most 1500 bytes.
+                    # In JSON requests, must be base64-encoded.
+                "stringValue": "A String", # A UTF-8 encoded string value.
+                    # When `exclude_from_indexes` is false (it is indexed) , may have at most 1500 bytes.
+                    # Otherwise, may be set to at least 1,000,000 bytes.
+                "nullValue": "A String", # A null value.
+                "arrayValue": { # An array value. # An array value.
+                    # Cannot contain another array value.
+                    # A `Value` instance that sets field `array_value` must not set fields
+                    # `meaning` or `exclude_from_indexes`.
+                  "values": [ # Values in the array.
+                      # The order of this array may not be preserved if it contains a mix of
+                      # indexed and unindexed values.
+                    # Object with schema name: Value
+                  ],
+                },
+                "integerValue": "A String", # An integer value.
+                "geoPointValue": { # An object representing a latitude/longitude pair. This is expressed as a pair # A geo point value representing a point on the surface of Earth.
+                    # of doubles representing degrees latitude and degrees longitude. Unless
+                    # specified otherwise, this must conform to the
+                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                    # standard</a>. Values must be within normalized ranges.
+                    #
+                    # Example of normalization code in Python:
+                    #
+                    #     def NormalizeLongitude(longitude):
+                    #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                    #       q, r = divmod(longitude, 360.0)
+                    #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                    #         return r - 360.0
+                    #       return r
+                    #
+                    #     def NormalizeLatLng(latitude, longitude):
+                    #       """Wraps decimal degrees latitude and longitude to
+                    #       [-180.0, 180.0] and [-90.0, 90.0], respectively."""
+                    #       r = latitude % 360.0
+                    #       if r <= 90.0:
+                    #         return r, NormalizeLongitude(longitude)
+                    #       elif r >= 270.0:
+                    #         return r - 360, NormalizeLongitude(longitude)
+                    #       else:
+                    #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                    #
+                    #     assert 180.0 == NormalizeLongitude(180.0)
+                    #     assert -180.0 == NormalizeLongitude(-180.0)
+                    #     assert -179.0 == NormalizeLongitude(181.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                    #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                    #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                    #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                    #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+                },
+              },
+            },
+            "key": { # A unique identifier for an entity. # The entity's key.
+                #
+                # An entity must have a key, unless otherwise documented (for example,
+                # an entity in `Value.entity_value` may have no key).
+                # An entity's kind is its key path's last element's kind,
+                # or null if it has no key.
+                # If a key's partition ID or any of its path kinds or names are
+                # reserved/read-only, the key is reserved/read-only.
+                # A reserved/read-only key is forbidden in certain documented contexts.
+              "path": [ # The entity path.
+                  # An entity path consists of one or more elements composed of a kind and a
+                  # string or numerical identifier, which identify entities. The first
+                  # element identifies a _root entity_, the second element identifies
+                  # a _child_ of the root entity, the third element identifies a child of the
+                  # second entity, and so forth. The entities identified by all prefixes of
+                  # the path are called the element's _ancestors_.
+                  #
+                  # An entity path is always fully complete: *all* of the entity's ancestors
+                  # are required to be in the path along with the entity identifier itself.
+                  # The only exception is that in some documented cases, the identifier in the
+                  # last path element (for the entity) itself may be omitted. For example,
+                  # the last path element of the key of `Mutation.insert` may have no
+                  # identifier.
+                  #
+                  # A path can never be empty, and a path can have at most 100 elements.
+                { # A (kind, ID/name) pair used to construct a key path.
+                    #
+                    # If either name or ID is set, the element is complete.
+                    # If neither is set, the element is incomplete.
+                  "kind": "A String", # The kind of the entity.
+                      # A kind matching regex `__.*__` is reserved/read-only.
+                      # A kind must not contain more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "name": "A String", # The name of the entity.
+                      # A name matching regex `__.*__` is reserved/read-only.
+                      # A name must not be more than 1500 bytes when UTF-8 encoded.
+                      # Cannot be `""`.
+                  "id": "A String", # The auto-allocated ID of the entity.
+                      # Never equal to zero. Values less than zero are discouraged and may not
+                      # be supported in the future.
+                },
+              ],
+              "partitionId": { # A partition ID identifies a grouping of entities. The grouping is always # Entities are partitioned into subsets, currently identified by a project
+                  # ID and namespace ID.
+                  # Queries are scoped to a single partition.
+                  # by project and namespace, however the namespace ID may be empty.
+                  #
+                  # A partition ID contains several dimensions:
+                  # project ID and namespace ID.
+                  #
+                  # Partition dimensions:
+                  #
+                  # - May be `""`.
+                  # - Must be valid UTF-8 bytes.
+                  # - Must have values that match regex `[A-Za-z\d\.\-_]{1,100}`
+                  # If the value of any dimension matches regex `__.*__`, the partition is
+                  # reserved/read-only.
+                  # A reserved/read-only partition ID is forbidden in certain documented
+                  # contexts.
+                  #
+                  # Foreign partition IDs (in which the project ID does
+                  # not match the context project ID ) are discouraged.
+                  # Reads and writes of foreign partition IDs may fail if the project is not in an active state.
+                "projectId": "A String", # The ID of the project to which the entities belong.
+                "namespaceId": "A String", # If not empty, the ID of the namespace to which the entities belong.
+              },
+            },
+          },
+        },
+      ],
+      "skippedCursor": "A String", # A cursor that points to the position after the last skipped result.
+          # Will be set when `skipped_results` != 0.
+      "moreResults": "A String", # The state of the query after the current batch.
+      "endCursor": "A String", # A cursor that points to the position after the last result in the batch.
+    },
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/deploymentmanager_v2.deployments.html b/docs/dyn/deploymentmanager_v2.deployments.html
index 4f03ec8..ae3133c 100644
--- a/docs/dyn/deploymentmanager_v2.deployments.html
+++ b/docs/dyn/deploymentmanager_v2.deployments.html
@@ -144,7 +144,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -159,7 +159,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -202,7 +202,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -217,7 +217,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -282,7 +282,7 @@
                 # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
               {
                 "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
               },
             ],
           },
@@ -297,7 +297,7 @@
             {
               "message": "A String", # [Output Only] An optional, human-readable error message.
               "code": "A String", # [Output Only] The error type identifier for this error.
-              "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+              "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
             },
           ],
         },
@@ -317,6 +317,7 @@
         },
       },
       "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
+      "selfLink": "A String", # [Output Only] Self link for the deployment.
       "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
     }</pre>
 </div>
@@ -374,7 +375,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -389,7 +390,7 @@
           {
             "message": "A String", # [Output Only] An optional, human-readable error message.
             "code": "A String", # [Output Only] The error type identifier for this error.
-            "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+            "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
           },
         ],
       },
@@ -409,6 +410,7 @@
       },
     },
     "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
+    "selfLink": "A String", # [Output Only] Self link for the deployment.
     "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
@@ -439,7 +441,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -454,7 +456,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -476,11 +478,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -532,7 +534,7 @@
                     # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
                   {
                     "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                    "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                    "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
                   },
                 ],
               },
@@ -547,7 +549,7 @@
                 {
                   "message": "A String", # [Output Only] An optional, human-readable error message.
                   "code": "A String", # [Output Only] The error type identifier for this error.
-                  "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+                  "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
                 },
               ],
             },
@@ -567,6 +569,7 @@
             },
           },
           "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
+          "selfLink": "A String", # [Output Only] Self link for the deployment.
           "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
         },
     ],
@@ -641,7 +644,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -656,7 +659,7 @@
           {
             "message": "A String", # [Output Only] An optional, human-readable error message.
             "code": "A String", # [Output Only] The error type identifier for this error.
-            "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+            "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
           },
         ],
       },
@@ -676,6 +679,7 @@
       },
     },
     "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
+    "selfLink": "A String", # [Output Only] Self link for the deployment.
     "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
@@ -714,7 +718,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -729,7 +733,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -781,7 +785,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -796,7 +800,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -860,7 +864,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -875,7 +879,7 @@
           {
             "message": "A String", # [Output Only] An optional, human-readable error message.
             "code": "A String", # [Output Only] The error type identifier for this error.
-            "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+            "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
           },
         ],
       },
@@ -895,6 +899,7 @@
       },
     },
     "id": "A String", # [Output Only] Unique identifier for the resource; defined by the server.
+    "selfLink": "A String", # [Output Only] Self link for the deployment.
     "name": "A String", # Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression [a-z]([-a-z0-9]*[a-z0-9])? which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
   }
 
@@ -933,7 +938,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -948,7 +953,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
diff --git a/docs/dyn/deploymentmanager_v2.manifests.html b/docs/dyn/deploymentmanager_v2.manifests.html
index aed2154..af960f0 100644
--- a/docs/dyn/deploymentmanager_v2.manifests.html
+++ b/docs/dyn/deploymentmanager_v2.manifests.html
@@ -128,11 +128,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/deploymentmanager_v2.operations.html b/docs/dyn/deploymentmanager_v2.operations.html
index d446317..5bf51f8 100644
--- a/docs/dyn/deploymentmanager_v2.operations.html
+++ b/docs/dyn/deploymentmanager_v2.operations.html
@@ -117,7 +117,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -132,7 +132,7 @@
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
@@ -154,11 +154,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -188,7 +188,7 @@
                 # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
               {
                 "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
               },
             ],
           },
@@ -203,7 +203,7 @@
             {
               "message": "A String", # [Output Only] An optional, human-readable error message.
               "code": "A String", # [Output Only] The error type identifier for this error.
-              "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+              "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
             },
           ],
         },
diff --git a/docs/dyn/deploymentmanager_v2.resources.html b/docs/dyn/deploymentmanager_v2.resources.html
index 5c83b89..4441fb4 100644
--- a/docs/dyn/deploymentmanager_v2.resources.html
+++ b/docs/dyn/deploymentmanager_v2.resources.html
@@ -108,7 +108,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -124,7 +124,7 @@
               # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
             {
               "value": "A String", # [Output Only] A warning data value corresponding to the key.
-              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+              "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
             },
           ],
         },
@@ -137,7 +137,7 @@
           {
             "message": "A String", # [Output Only] An optional, human-readable error message.
             "code": "A String", # [Output Only] The error type identifier for this error.
-            "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+            "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
           },
         ],
       },
@@ -164,11 +164,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -188,7 +188,7 @@
                 # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
               {
                 "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
               },
             ],
           },
@@ -204,7 +204,7 @@
                   # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
                 {
                   "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                  "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                  "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
                 },
               ],
             },
@@ -217,7 +217,7 @@
               {
                 "message": "A String", # [Output Only] An optional, human-readable error message.
                 "code": "A String", # [Output Only] The error type identifier for this error.
-                "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+                "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
               },
             ],
           },
diff --git a/docs/dyn/deploymentmanager_v2.types.html b/docs/dyn/deploymentmanager_v2.types.html
index 4d4c8b4..eeb905d 100644
--- a/docs/dyn/deploymentmanager_v2.types.html
+++ b/docs/dyn/deploymentmanager_v2.types.html
@@ -93,11 +93,11 @@
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, to filter for instances whose name is not equal to example-instance, you would use filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/dfareporting_v2_5.accountActiveAdSummaries.html b/docs/dyn/dfareporting_v2_5.accountActiveAdSummaries.html
new file mode 100644
index 0000000..e9b5402
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.accountActiveAdSummaries.html
@@ -0,0 +1,101 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.accountActiveAdSummaries.html">accountActiveAdSummaries</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, summaryAccountId)</a></code></p>
+<p class="firstline">Gets the account's active ad summary by account ID.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, summaryAccountId)</code>
+  <pre>Gets the account's active ad summary by account ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  summaryAccountId: string, Account ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Gets a summary of active ads in an account.
+    "availableAds": "A String", # Ads that can be activated for the account.
+    "kind": "dfareporting#accountActiveAdSummary", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountActiveAdSummary".
+    "activeAdsLimitTier": "A String", # Maximum number of active ads allowed for the account.
+    "activeAds": "A String", # Ads that have been activated for the account
+    "accountId": "A String", # ID of the account.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.accountPermissionGroups.html b/docs/dyn/dfareporting_v2_5.accountPermissionGroups.html
new file mode 100644
index 0000000..7f40fac
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.accountPermissionGroups.html
@@ -0,0 +1,124 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.accountPermissionGroups.html">accountPermissionGroups</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one account permission group by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves the list of account permission groups.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one account permission group by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Account permission group ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # AccountPermissionGroups contains a mapping of permission group IDs to names. A permission group is a grouping of account permissions.
+    "kind": "dfareporting#accountPermissionGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountPermissionGroup".
+    "id": "A String", # ID of this account permission group.
+    "name": "A String", # Name of this account permission group.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves the list of account permission groups.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Account Permission Group List Response
+    "kind": "dfareporting#accountPermissionGroupsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountPermissionGroupsListResponse".
+    "accountPermissionGroups": [ # Account permission group collection.
+      { # AccountPermissionGroups contains a mapping of permission group IDs to names. A permission group is a grouping of account permissions.
+        "kind": "dfareporting#accountPermissionGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountPermissionGroup".
+        "id": "A String", # ID of this account permission group.
+        "name": "A String", # Name of this account permission group.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.accountPermissions.html b/docs/dyn/dfareporting_v2_5.accountPermissions.html
new file mode 100644
index 0000000..2caa82a
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.accountPermissions.html
@@ -0,0 +1,142 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.accountPermissions.html">accountPermissions</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one account permission by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves the list of account permissions.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one account permission by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Account permission ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # AccountPermissions contains information about a particular account permission. Some features of DCM require an account permission to be present in the account.
+    "kind": "dfareporting#accountPermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountPermission".
+    "name": "A String", # Name of this account permission.
+    "level": "A String", # Administrative level required to enable this account permission.
+    "permissionGroupId": "A String", # Permission group of this account permission.
+    "accountProfiles": [ # Account profiles associated with this account permission.
+        #
+        # Possible values are:
+        # - "ACCOUNT_PROFILE_BASIC"
+        # - "ACCOUNT_PROFILE_STANDARD"
+      "A String",
+    ],
+    "id": "A String", # ID of this account permission.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves the list of account permissions.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Account Permission List Response
+    "accountPermissions": [ # Account permission collection.
+      { # AccountPermissions contains information about a particular account permission. Some features of DCM require an account permission to be present in the account.
+        "kind": "dfareporting#accountPermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountPermission".
+        "name": "A String", # Name of this account permission.
+        "level": "A String", # Administrative level required to enable this account permission.
+        "permissionGroupId": "A String", # Permission group of this account permission.
+        "accountProfiles": [ # Account profiles associated with this account permission.
+            #
+            # Possible values are:
+            # - "ACCOUNT_PROFILE_BASIC"
+            # - "ACCOUNT_PROFILE_STANDARD"
+          "A String",
+        ],
+        "id": "A String", # ID of this account permission.
+      },
+    ],
+    "kind": "dfareporting#accountPermissionsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountPermissionsListResponse".
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.accountUserProfiles.html b/docs/dyn/dfareporting_v2_5.accountUserProfiles.html
new file mode 100644
index 0000000..4826ccc
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.accountUserProfiles.html
@@ -0,0 +1,677 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.accountUserProfiles.html">accountUserProfiles</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one account user profile by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new account user profile.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, subaccountId=None, sortField=None, ids=None, maxResults=None, pageToken=None, sortOrder=None, userRoleId=None, active=None)</a></code></p>
+<p class="firstline">Retrieves a list of account user profiles, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing account user profile. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing account user profile.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one account user profile by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, User profile ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # AccountUserProfiles contains properties of a DCM user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.
+      "kind": "dfareporting#accountUserProfile", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountUserProfile".
+      "subaccountId": "A String", # Subaccount ID of the user profile. This is a read-only field that can be left blank.
+      "name": "A String", # Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: "&;"#%,".
+      "userRoleFilter": { # Object Filter. # Filter that describes which user roles are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "locale": "A String", # Locale of the user profile. This is a required field.
+          # Acceptable values are:
+          # - "cs" (Czech)
+          # - "de" (German)
+          # - "en" (English)
+          # - "en-GB" (English United Kingdom)
+          # - "es" (Spanish)
+          # - "fr" (French)
+          # - "it" (Italian)
+          # - "ja" (Japanese)
+          # - "ko" (Korean)
+          # - "pl" (Polish)
+          # - "pt-BR" (Portuguese Brazil)
+          # - "ru" (Russian)
+          # - "sv" (Swedish)
+          # - "tr" (Turkish)
+          # - "zh-CN" (Chinese Simplified)
+          # - "zh-TW" (Chinese Traditional)
+      "siteFilter": { # Object Filter. # Filter that describes which sites are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "comments": "A String", # Comments for this user profile.
+      "id": "A String", # ID of the user profile. This is a read-only, auto-generated field.
+      "advertiserFilter": { # Object Filter. # Filter that describes which advertisers are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "campaignFilter": { # Object Filter. # Filter that describes which campaigns are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "userRoleId": "A String", # User role ID of the user profile. This is a required field.
+      "userAccessType": "A String", # User type of the user profile. This is a read-only field that can be left blank.
+      "traffickerType": "A String", # Trafficker type of this user profile.
+      "active": True or False, # Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.
+      "email": "A String", # Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.
+      "accountId": "A String", # Account ID of the user profile. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new account user profile.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # AccountUserProfiles contains properties of a DCM user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.
+    "kind": "dfareporting#accountUserProfile", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountUserProfile".
+    "subaccountId": "A String", # Subaccount ID of the user profile. This is a read-only field that can be left blank.
+    "name": "A String", # Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: "&;"#%,".
+    "userRoleFilter": { # Object Filter. # Filter that describes which user roles are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "locale": "A String", # Locale of the user profile. This is a required field.
+        # Acceptable values are:
+        # - "cs" (Czech)
+        # - "de" (German)
+        # - "en" (English)
+        # - "en-GB" (English United Kingdom)
+        # - "es" (Spanish)
+        # - "fr" (French)
+        # - "it" (Italian)
+        # - "ja" (Japanese)
+        # - "ko" (Korean)
+        # - "pl" (Polish)
+        # - "pt-BR" (Portuguese Brazil)
+        # - "ru" (Russian)
+        # - "sv" (Swedish)
+        # - "tr" (Turkish)
+        # - "zh-CN" (Chinese Simplified)
+        # - "zh-TW" (Chinese Traditional)
+    "siteFilter": { # Object Filter. # Filter that describes which sites are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "comments": "A String", # Comments for this user profile.
+    "id": "A String", # ID of the user profile. This is a read-only, auto-generated field.
+    "advertiserFilter": { # Object Filter. # Filter that describes which advertisers are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "campaignFilter": { # Object Filter. # Filter that describes which campaigns are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "userRoleId": "A String", # User role ID of the user profile. This is a required field.
+    "userAccessType": "A String", # User type of the user profile. This is a read-only field that can be left blank.
+    "traffickerType": "A String", # Trafficker type of this user profile.
+    "active": True or False, # Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.
+    "email": "A String", # Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.
+    "accountId": "A String", # Account ID of the user profile. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # AccountUserProfiles contains properties of a DCM user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.
+      "kind": "dfareporting#accountUserProfile", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountUserProfile".
+      "subaccountId": "A String", # Subaccount ID of the user profile. This is a read-only field that can be left blank.
+      "name": "A String", # Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: "&;"#%,".
+      "userRoleFilter": { # Object Filter. # Filter that describes which user roles are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "locale": "A String", # Locale of the user profile. This is a required field.
+          # Acceptable values are:
+          # - "cs" (Czech)
+          # - "de" (German)
+          # - "en" (English)
+          # - "en-GB" (English United Kingdom)
+          # - "es" (Spanish)
+          # - "fr" (French)
+          # - "it" (Italian)
+          # - "ja" (Japanese)
+          # - "ko" (Korean)
+          # - "pl" (Polish)
+          # - "pt-BR" (Portuguese Brazil)
+          # - "ru" (Russian)
+          # - "sv" (Swedish)
+          # - "tr" (Turkish)
+          # - "zh-CN" (Chinese Simplified)
+          # - "zh-TW" (Chinese Traditional)
+      "siteFilter": { # Object Filter. # Filter that describes which sites are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "comments": "A String", # Comments for this user profile.
+      "id": "A String", # ID of the user profile. This is a read-only, auto-generated field.
+      "advertiserFilter": { # Object Filter. # Filter that describes which advertisers are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "campaignFilter": { # Object Filter. # Filter that describes which campaigns are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "userRoleId": "A String", # User role ID of the user profile. This is a required field.
+      "userAccessType": "A String", # User type of the user profile. This is a read-only field that can be left blank.
+      "traffickerType": "A String", # Trafficker type of this user profile.
+      "active": True or False, # Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.
+      "email": "A String", # Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.
+      "accountId": "A String", # Account ID of the user profile. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, subaccountId=None, sortField=None, ids=None, maxResults=None, pageToken=None, sortOrder=None, userRoleId=None, active=None)</code>
+  <pre>Retrieves a list of account user profiles, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for objects by name, ID or email. Wildcards (*) are allowed. For example, "user profile*2015" will return objects with names like "user profile June 2015", "user profile April 2015", or simply "user profile 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "user profile" will match objects with name "my user profile", "user profile 2015", or simply "user profile".
+  subaccountId: string, Select only user profiles with the specified subaccount ID.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only user profiles with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  userRoleId: string, Select only user profiles with the specified user role ID.
+  active: boolean, Select only active user profiles.
+
+Returns:
+  An object of the form:
+
+    { # Account User Profile List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "accountUserProfiles": [ # Account user profile collection.
+      { # AccountUserProfiles contains properties of a DCM user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.
+          "kind": "dfareporting#accountUserProfile", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountUserProfile".
+          "subaccountId": "A String", # Subaccount ID of the user profile. This is a read-only field that can be left blank.
+          "name": "A String", # Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: "&;"#%,".
+          "userRoleFilter": { # Object Filter. # Filter that describes which user roles are visible to the user profile.
+            "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+              "A String",
+            ],
+            "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+            "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+          },
+          "locale": "A String", # Locale of the user profile. This is a required field.
+              # Acceptable values are:
+              # - "cs" (Czech)
+              # - "de" (German)
+              # - "en" (English)
+              # - "en-GB" (English United Kingdom)
+              # - "es" (Spanish)
+              # - "fr" (French)
+              # - "it" (Italian)
+              # - "ja" (Japanese)
+              # - "ko" (Korean)
+              # - "pl" (Polish)
+              # - "pt-BR" (Portuguese Brazil)
+              # - "ru" (Russian)
+              # - "sv" (Swedish)
+              # - "tr" (Turkish)
+              # - "zh-CN" (Chinese Simplified)
+              # - "zh-TW" (Chinese Traditional)
+          "siteFilter": { # Object Filter. # Filter that describes which sites are visible to the user profile.
+            "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+              "A String",
+            ],
+            "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+            "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+          },
+          "comments": "A String", # Comments for this user profile.
+          "id": "A String", # ID of the user profile. This is a read-only, auto-generated field.
+          "advertiserFilter": { # Object Filter. # Filter that describes which advertisers are visible to the user profile.
+            "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+              "A String",
+            ],
+            "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+            "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+          },
+          "campaignFilter": { # Object Filter. # Filter that describes which campaigns are visible to the user profile.
+            "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+              "A String",
+            ],
+            "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+            "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+          },
+          "userRoleId": "A String", # User role ID of the user profile. This is a required field.
+          "userAccessType": "A String", # User type of the user profile. This is a read-only field that can be left blank.
+          "traffickerType": "A String", # Trafficker type of this user profile.
+          "active": True or False, # Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.
+          "email": "A String", # Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.
+          "accountId": "A String", # Account ID of the user profile. This is a read-only field that can be left blank.
+        },
+    ],
+    "kind": "dfareporting#accountUserProfilesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountUserProfilesListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing account user profile. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, User profile ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # AccountUserProfiles contains properties of a DCM user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.
+    "kind": "dfareporting#accountUserProfile", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountUserProfile".
+    "subaccountId": "A String", # Subaccount ID of the user profile. This is a read-only field that can be left blank.
+    "name": "A String", # Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: "&;"#%,".
+    "userRoleFilter": { # Object Filter. # Filter that describes which user roles are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "locale": "A String", # Locale of the user profile. This is a required field.
+        # Acceptable values are:
+        # - "cs" (Czech)
+        # - "de" (German)
+        # - "en" (English)
+        # - "en-GB" (English United Kingdom)
+        # - "es" (Spanish)
+        # - "fr" (French)
+        # - "it" (Italian)
+        # - "ja" (Japanese)
+        # - "ko" (Korean)
+        # - "pl" (Polish)
+        # - "pt-BR" (Portuguese Brazil)
+        # - "ru" (Russian)
+        # - "sv" (Swedish)
+        # - "tr" (Turkish)
+        # - "zh-CN" (Chinese Simplified)
+        # - "zh-TW" (Chinese Traditional)
+    "siteFilter": { # Object Filter. # Filter that describes which sites are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "comments": "A String", # Comments for this user profile.
+    "id": "A String", # ID of the user profile. This is a read-only, auto-generated field.
+    "advertiserFilter": { # Object Filter. # Filter that describes which advertisers are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "campaignFilter": { # Object Filter. # Filter that describes which campaigns are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "userRoleId": "A String", # User role ID of the user profile. This is a required field.
+    "userAccessType": "A String", # User type of the user profile. This is a read-only field that can be left blank.
+    "traffickerType": "A String", # Trafficker type of this user profile.
+    "active": True or False, # Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.
+    "email": "A String", # Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.
+    "accountId": "A String", # Account ID of the user profile. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # AccountUserProfiles contains properties of a DCM user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.
+      "kind": "dfareporting#accountUserProfile", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountUserProfile".
+      "subaccountId": "A String", # Subaccount ID of the user profile. This is a read-only field that can be left blank.
+      "name": "A String", # Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: "&;"#%,".
+      "userRoleFilter": { # Object Filter. # Filter that describes which user roles are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "locale": "A String", # Locale of the user profile. This is a required field.
+          # Acceptable values are:
+          # - "cs" (Czech)
+          # - "de" (German)
+          # - "en" (English)
+          # - "en-GB" (English United Kingdom)
+          # - "es" (Spanish)
+          # - "fr" (French)
+          # - "it" (Italian)
+          # - "ja" (Japanese)
+          # - "ko" (Korean)
+          # - "pl" (Polish)
+          # - "pt-BR" (Portuguese Brazil)
+          # - "ru" (Russian)
+          # - "sv" (Swedish)
+          # - "tr" (Turkish)
+          # - "zh-CN" (Chinese Simplified)
+          # - "zh-TW" (Chinese Traditional)
+      "siteFilter": { # Object Filter. # Filter that describes which sites are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "comments": "A String", # Comments for this user profile.
+      "id": "A String", # ID of the user profile. This is a read-only, auto-generated field.
+      "advertiserFilter": { # Object Filter. # Filter that describes which advertisers are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "campaignFilter": { # Object Filter. # Filter that describes which campaigns are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "userRoleId": "A String", # User role ID of the user profile. This is a required field.
+      "userAccessType": "A String", # User type of the user profile. This is a read-only field that can be left blank.
+      "traffickerType": "A String", # Trafficker type of this user profile.
+      "active": True or False, # Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.
+      "email": "A String", # Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.
+      "accountId": "A String", # Account ID of the user profile. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing account user profile.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # AccountUserProfiles contains properties of a DCM user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.
+    "kind": "dfareporting#accountUserProfile", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountUserProfile".
+    "subaccountId": "A String", # Subaccount ID of the user profile. This is a read-only field that can be left blank.
+    "name": "A String", # Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: "&;"#%,".
+    "userRoleFilter": { # Object Filter. # Filter that describes which user roles are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "locale": "A String", # Locale of the user profile. This is a required field.
+        # Acceptable values are:
+        # - "cs" (Czech)
+        # - "de" (German)
+        # - "en" (English)
+        # - "en-GB" (English United Kingdom)
+        # - "es" (Spanish)
+        # - "fr" (French)
+        # - "it" (Italian)
+        # - "ja" (Japanese)
+        # - "ko" (Korean)
+        # - "pl" (Polish)
+        # - "pt-BR" (Portuguese Brazil)
+        # - "ru" (Russian)
+        # - "sv" (Swedish)
+        # - "tr" (Turkish)
+        # - "zh-CN" (Chinese Simplified)
+        # - "zh-TW" (Chinese Traditional)
+    "siteFilter": { # Object Filter. # Filter that describes which sites are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "comments": "A String", # Comments for this user profile.
+    "id": "A String", # ID of the user profile. This is a read-only, auto-generated field.
+    "advertiserFilter": { # Object Filter. # Filter that describes which advertisers are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "campaignFilter": { # Object Filter. # Filter that describes which campaigns are visible to the user profile.
+      "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+        "A String",
+      ],
+      "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+      "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+    },
+    "userRoleId": "A String", # User role ID of the user profile. This is a required field.
+    "userAccessType": "A String", # User type of the user profile. This is a read-only field that can be left blank.
+    "traffickerType": "A String", # Trafficker type of this user profile.
+    "active": True or False, # Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.
+    "email": "A String", # Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.
+    "accountId": "A String", # Account ID of the user profile. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # AccountUserProfiles contains properties of a DCM user profile. This resource is specifically for managing user profiles, whereas UserProfiles is for accessing the API.
+      "kind": "dfareporting#accountUserProfile", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountUserProfile".
+      "subaccountId": "A String", # Subaccount ID of the user profile. This is a read-only field that can be left blank.
+      "name": "A String", # Name of the user profile. This is a required field. Must be less than 64 characters long, must be globally unique, and cannot contain whitespace or any of the following characters: "&;"#%,".
+      "userRoleFilter": { # Object Filter. # Filter that describes which user roles are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "locale": "A String", # Locale of the user profile. This is a required field.
+          # Acceptable values are:
+          # - "cs" (Czech)
+          # - "de" (German)
+          # - "en" (English)
+          # - "en-GB" (English United Kingdom)
+          # - "es" (Spanish)
+          # - "fr" (French)
+          # - "it" (Italian)
+          # - "ja" (Japanese)
+          # - "ko" (Korean)
+          # - "pl" (Polish)
+          # - "pt-BR" (Portuguese Brazil)
+          # - "ru" (Russian)
+          # - "sv" (Swedish)
+          # - "tr" (Turkish)
+          # - "zh-CN" (Chinese Simplified)
+          # - "zh-TW" (Chinese Traditional)
+      "siteFilter": { # Object Filter. # Filter that describes which sites are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "comments": "A String", # Comments for this user profile.
+      "id": "A String", # ID of the user profile. This is a read-only, auto-generated field.
+      "advertiserFilter": { # Object Filter. # Filter that describes which advertisers are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "campaignFilter": { # Object Filter. # Filter that describes which campaigns are visible to the user profile.
+        "objectIds": [ # Applicable when status is ASSIGNED. The user has access to objects with these object IDs.
+          "A String",
+        ],
+        "status": "A String", # Status of the filter. NONE means the user has access to none of the objects. ALL means the user has access to all objects. ASSIGNED means the user has access to the objects with IDs in the objectIds list.
+        "kind": "dfareporting#objectFilter", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#objectFilter".
+      },
+      "userRoleId": "A String", # User role ID of the user profile. This is a required field.
+      "userAccessType": "A String", # User type of the user profile. This is a read-only field that can be left blank.
+      "traffickerType": "A String", # Trafficker type of this user profile.
+      "active": True or False, # Whether this user profile is active. This defaults to false, and must be set true on insert for the user profile to be usable.
+      "email": "A String", # Email of the user profile. The email addresss must be linked to a Google Account. This field is required on insertion and is read-only after insertion.
+      "accountId": "A String", # Account ID of the user profile. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.accounts.html b/docs/dyn/dfareporting_v2_5.accounts.html
new file mode 100644
index 0000000..e0f0d92
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.accounts.html
@@ -0,0 +1,856 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.accounts.html">accounts</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one account by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, sortField=None, ids=None, maxResults=None, pageToken=None, sortOrder=None, active=None)</a></code></p>
+<p class="firstline">Retrieves the list of accounts, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing account. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing account.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one account by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Account ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM account.
+      "kind": "dfareporting#account", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#account".
+      "countryId": "A String", # ID of the country associated with this account.
+      "availablePermissionIds": [ # User role permissions available to the user roles of this account.
+        "A String",
+      ],
+      "description": "A String", # Description of this account.
+      "maximumImageSize": "A String", # Maximum image size allowed for this account.
+      "currencyId": "A String", # ID of currency associated with this account. This is a required field.
+          # Acceptable values are:
+          # - "1" for USD
+          # - "2" for GBP
+          # - "3" for ESP
+          # - "4" for SEK
+          # - "5" for CAD
+          # - "6" for JPY
+          # - "7" for DEM
+          # - "8" for AUD
+          # - "9" for FRF
+          # - "10" for ITL
+          # - "11" for DKK
+          # - "12" for NOK
+          # - "13" for FIM
+          # - "14" for ZAR
+          # - "15" for IEP
+          # - "16" for NLG
+          # - "17" for EUR
+          # - "18" for KRW
+          # - "19" for TWD
+          # - "20" for SGD
+          # - "21" for CNY
+          # - "22" for HKD
+          # - "23" for NZD
+          # - "24" for MYR
+          # - "25" for BRL
+          # - "26" for PTE
+          # - "27" for MXP
+          # - "28" for CLP
+          # - "29" for TRY
+          # - "30" for ARS
+          # - "31" for PEN
+          # - "32" for ILS
+          # - "33" for CHF
+          # - "34" for VEF
+          # - "35" for COP
+          # - "36" for GTQ
+          # - "37" for PLN
+          # - "39" for INR
+          # - "40" for THB
+          # - "41" for IDR
+          # - "42" for CZK
+          # - "43" for RON
+          # - "44" for HUF
+          # - "45" for RUB
+          # - "46" for AED
+          # - "47" for BGN
+          # - "48" for HRK
+      "defaultCreativeSizeId": "A String", # Default placement dimensions for this account.
+      "accountPermissionIds": [ # Account permissions assigned to this account.
+        "A String",
+      ],
+      "comscoreVceEnabled": True or False, # Whether campaigns created in this account will be enabled for comScore vCE by default.
+      "nielsenOcrEnabled": True or False, # Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default.
+      "accountProfile": "A String", # Profile for this account. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this account. This is a required field, and must be less than 128 characters long and be globally unique.
+      "locale": "A String", # Locale of this account.
+          # Acceptable values are:
+          # - "cs" (Czech)
+          # - "de" (German)
+          # - "en" (English)
+          # - "en-GB" (English United Kingdom)
+          # - "es" (Spanish)
+          # - "fr" (French)
+          # - "it" (Italian)
+          # - "ja" (Japanese)
+          # - "ko" (Korean)
+          # - "pl" (Polish)
+          # - "pt-BR" (Portuguese Brazil)
+          # - "ru" (Russian)
+          # - "sv" (Swedish)
+          # - "tr" (Turkish)
+          # - "zh-CN" (Chinese Simplified)
+          # - "zh-TW" (Chinese Traditional)
+      "teaserSizeLimit": "A String", # File size limit in kilobytes of Rich Media teaser creatives. Must be between 1 and 10240.
+      "reportsConfiguration": { # Reporting Configuration # Reporting configuration of this account.
+        "reportGenerationTimeZoneId": "A String", # Report generation time zone ID of this account. This is a required field that can only be changed by a superuser.
+            # Acceptable values are:
+            #
+            # - "1" for "America/New_York"
+            # - "2" for "Europe/London"
+            # - "3" for "Europe/Paris"
+            # - "4" for "Africa/Johannesburg"
+            # - "5" for "Asia/Jerusalem"
+            # - "6" for "Asia/Shanghai"
+            # - "7" for "Asia/Hong_Kong"
+            # - "8" for "Asia/Tokyo"
+            # - "9" for "Australia/Sydney"
+            # - "10" for "Asia/Dubai"
+            # - "11" for "America/Los_Angeles"
+            # - "12" for "Pacific/Auckland"
+            # - "13" for "America/Sao_Paulo"
+        "exposureToConversionEnabled": True or False, # Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+        "lookbackConfiguration": { # Lookback configuration settings. # Default lookback windows for new advertisers in this account.
+          "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        },
+      },
+      "active": True or False, # Whether this account is active.
+      "activeViewOptOut": True or False, # Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions.
+      "id": "A String", # ID of this account. This is a read-only, auto-generated field.
+      "activeAdsLimitTier": "A String", # Maximum number of active ads allowed for this account.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, sortField=None, ids=None, maxResults=None, pageToken=None, sortOrder=None, active=None)</code>
+  <pre>Retrieves the list of accounts, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "account*2015" will return objects with names like "account June 2015", "account April 2015", or simply "account 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "account" will match objects with name "my account", "account 2015", or simply "account".
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only accounts with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  active: boolean, Select only active accounts. Don't set this field to select both active and non-active accounts.
+
+Returns:
+  An object of the form:
+
+    { # Account List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#accountsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#accountsListResponse".
+    "accounts": [ # Account collection.
+      { # Contains properties of a DCM account.
+          "kind": "dfareporting#account", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#account".
+          "countryId": "A String", # ID of the country associated with this account.
+          "availablePermissionIds": [ # User role permissions available to the user roles of this account.
+            "A String",
+          ],
+          "description": "A String", # Description of this account.
+          "maximumImageSize": "A String", # Maximum image size allowed for this account.
+          "currencyId": "A String", # ID of currency associated with this account. This is a required field.
+              # Acceptable values are:
+              # - "1" for USD
+              # - "2" for GBP
+              # - "3" for ESP
+              # - "4" for SEK
+              # - "5" for CAD
+              # - "6" for JPY
+              # - "7" for DEM
+              # - "8" for AUD
+              # - "9" for FRF
+              # - "10" for ITL
+              # - "11" for DKK
+              # - "12" for NOK
+              # - "13" for FIM
+              # - "14" for ZAR
+              # - "15" for IEP
+              # - "16" for NLG
+              # - "17" for EUR
+              # - "18" for KRW
+              # - "19" for TWD
+              # - "20" for SGD
+              # - "21" for CNY
+              # - "22" for HKD
+              # - "23" for NZD
+              # - "24" for MYR
+              # - "25" for BRL
+              # - "26" for PTE
+              # - "27" for MXP
+              # - "28" for CLP
+              # - "29" for TRY
+              # - "30" for ARS
+              # - "31" for PEN
+              # - "32" for ILS
+              # - "33" for CHF
+              # - "34" for VEF
+              # - "35" for COP
+              # - "36" for GTQ
+              # - "37" for PLN
+              # - "39" for INR
+              # - "40" for THB
+              # - "41" for IDR
+              # - "42" for CZK
+              # - "43" for RON
+              # - "44" for HUF
+              # - "45" for RUB
+              # - "46" for AED
+              # - "47" for BGN
+              # - "48" for HRK
+          "defaultCreativeSizeId": "A String", # Default placement dimensions for this account.
+          "accountPermissionIds": [ # Account permissions assigned to this account.
+            "A String",
+          ],
+          "comscoreVceEnabled": True or False, # Whether campaigns created in this account will be enabled for comScore vCE by default.
+          "nielsenOcrEnabled": True or False, # Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default.
+          "accountProfile": "A String", # Profile for this account. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this account. This is a required field, and must be less than 128 characters long and be globally unique.
+          "locale": "A String", # Locale of this account.
+              # Acceptable values are:
+              # - "cs" (Czech)
+              # - "de" (German)
+              # - "en" (English)
+              # - "en-GB" (English United Kingdom)
+              # - "es" (Spanish)
+              # - "fr" (French)
+              # - "it" (Italian)
+              # - "ja" (Japanese)
+              # - "ko" (Korean)
+              # - "pl" (Polish)
+              # - "pt-BR" (Portuguese Brazil)
+              # - "ru" (Russian)
+              # - "sv" (Swedish)
+              # - "tr" (Turkish)
+              # - "zh-CN" (Chinese Simplified)
+              # - "zh-TW" (Chinese Traditional)
+          "teaserSizeLimit": "A String", # File size limit in kilobytes of Rich Media teaser creatives. Must be between 1 and 10240.
+          "reportsConfiguration": { # Reporting Configuration # Reporting configuration of this account.
+            "reportGenerationTimeZoneId": "A String", # Report generation time zone ID of this account. This is a required field that can only be changed by a superuser.
+                # Acceptable values are:
+                #
+                # - "1" for "America/New_York"
+                # - "2" for "Europe/London"
+                # - "3" for "Europe/Paris"
+                # - "4" for "Africa/Johannesburg"
+                # - "5" for "Asia/Jerusalem"
+                # - "6" for "Asia/Shanghai"
+                # - "7" for "Asia/Hong_Kong"
+                # - "8" for "Asia/Tokyo"
+                # - "9" for "Australia/Sydney"
+                # - "10" for "Asia/Dubai"
+                # - "11" for "America/Los_Angeles"
+                # - "12" for "Pacific/Auckland"
+                # - "13" for "America/Sao_Paulo"
+            "exposureToConversionEnabled": True or False, # Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+            "lookbackConfiguration": { # Lookback configuration settings. # Default lookback windows for new advertisers in this account.
+              "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+              "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+            },
+          },
+          "active": True or False, # Whether this account is active.
+          "activeViewOptOut": True or False, # Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions.
+          "id": "A String", # ID of this account. This is a read-only, auto-generated field.
+          "activeAdsLimitTier": "A String", # Maximum number of active ads allowed for this account.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing account. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Account ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM account.
+    "kind": "dfareporting#account", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#account".
+    "countryId": "A String", # ID of the country associated with this account.
+    "availablePermissionIds": [ # User role permissions available to the user roles of this account.
+      "A String",
+    ],
+    "description": "A String", # Description of this account.
+    "maximumImageSize": "A String", # Maximum image size allowed for this account.
+    "currencyId": "A String", # ID of currency associated with this account. This is a required field.
+        # Acceptable values are:
+        # - "1" for USD
+        # - "2" for GBP
+        # - "3" for ESP
+        # - "4" for SEK
+        # - "5" for CAD
+        # - "6" for JPY
+        # - "7" for DEM
+        # - "8" for AUD
+        # - "9" for FRF
+        # - "10" for ITL
+        # - "11" for DKK
+        # - "12" for NOK
+        # - "13" for FIM
+        # - "14" for ZAR
+        # - "15" for IEP
+        # - "16" for NLG
+        # - "17" for EUR
+        # - "18" for KRW
+        # - "19" for TWD
+        # - "20" for SGD
+        # - "21" for CNY
+        # - "22" for HKD
+        # - "23" for NZD
+        # - "24" for MYR
+        # - "25" for BRL
+        # - "26" for PTE
+        # - "27" for MXP
+        # - "28" for CLP
+        # - "29" for TRY
+        # - "30" for ARS
+        # - "31" for PEN
+        # - "32" for ILS
+        # - "33" for CHF
+        # - "34" for VEF
+        # - "35" for COP
+        # - "36" for GTQ
+        # - "37" for PLN
+        # - "39" for INR
+        # - "40" for THB
+        # - "41" for IDR
+        # - "42" for CZK
+        # - "43" for RON
+        # - "44" for HUF
+        # - "45" for RUB
+        # - "46" for AED
+        # - "47" for BGN
+        # - "48" for HRK
+    "defaultCreativeSizeId": "A String", # Default placement dimensions for this account.
+    "accountPermissionIds": [ # Account permissions assigned to this account.
+      "A String",
+    ],
+    "comscoreVceEnabled": True or False, # Whether campaigns created in this account will be enabled for comScore vCE by default.
+    "nielsenOcrEnabled": True or False, # Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default.
+    "accountProfile": "A String", # Profile for this account. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this account. This is a required field, and must be less than 128 characters long and be globally unique.
+    "locale": "A String", # Locale of this account.
+        # Acceptable values are:
+        # - "cs" (Czech)
+        # - "de" (German)
+        # - "en" (English)
+        # - "en-GB" (English United Kingdom)
+        # - "es" (Spanish)
+        # - "fr" (French)
+        # - "it" (Italian)
+        # - "ja" (Japanese)
+        # - "ko" (Korean)
+        # - "pl" (Polish)
+        # - "pt-BR" (Portuguese Brazil)
+        # - "ru" (Russian)
+        # - "sv" (Swedish)
+        # - "tr" (Turkish)
+        # - "zh-CN" (Chinese Simplified)
+        # - "zh-TW" (Chinese Traditional)
+    "teaserSizeLimit": "A String", # File size limit in kilobytes of Rich Media teaser creatives. Must be between 1 and 10240.
+    "reportsConfiguration": { # Reporting Configuration # Reporting configuration of this account.
+      "reportGenerationTimeZoneId": "A String", # Report generation time zone ID of this account. This is a required field that can only be changed by a superuser.
+          # Acceptable values are:
+          #
+          # - "1" for "America/New_York"
+          # - "2" for "Europe/London"
+          # - "3" for "Europe/Paris"
+          # - "4" for "Africa/Johannesburg"
+          # - "5" for "Asia/Jerusalem"
+          # - "6" for "Asia/Shanghai"
+          # - "7" for "Asia/Hong_Kong"
+          # - "8" for "Asia/Tokyo"
+          # - "9" for "Australia/Sydney"
+          # - "10" for "Asia/Dubai"
+          # - "11" for "America/Los_Angeles"
+          # - "12" for "Pacific/Auckland"
+          # - "13" for "America/Sao_Paulo"
+      "exposureToConversionEnabled": True or False, # Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+      "lookbackConfiguration": { # Lookback configuration settings. # Default lookback windows for new advertisers in this account.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+    },
+    "active": True or False, # Whether this account is active.
+    "activeViewOptOut": True or False, # Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions.
+    "id": "A String", # ID of this account. This is a read-only, auto-generated field.
+    "activeAdsLimitTier": "A String", # Maximum number of active ads allowed for this account.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM account.
+      "kind": "dfareporting#account", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#account".
+      "countryId": "A String", # ID of the country associated with this account.
+      "availablePermissionIds": [ # User role permissions available to the user roles of this account.
+        "A String",
+      ],
+      "description": "A String", # Description of this account.
+      "maximumImageSize": "A String", # Maximum image size allowed for this account.
+      "currencyId": "A String", # ID of currency associated with this account. This is a required field.
+          # Acceptable values are:
+          # - "1" for USD
+          # - "2" for GBP
+          # - "3" for ESP
+          # - "4" for SEK
+          # - "5" for CAD
+          # - "6" for JPY
+          # - "7" for DEM
+          # - "8" for AUD
+          # - "9" for FRF
+          # - "10" for ITL
+          # - "11" for DKK
+          # - "12" for NOK
+          # - "13" for FIM
+          # - "14" for ZAR
+          # - "15" for IEP
+          # - "16" for NLG
+          # - "17" for EUR
+          # - "18" for KRW
+          # - "19" for TWD
+          # - "20" for SGD
+          # - "21" for CNY
+          # - "22" for HKD
+          # - "23" for NZD
+          # - "24" for MYR
+          # - "25" for BRL
+          # - "26" for PTE
+          # - "27" for MXP
+          # - "28" for CLP
+          # - "29" for TRY
+          # - "30" for ARS
+          # - "31" for PEN
+          # - "32" for ILS
+          # - "33" for CHF
+          # - "34" for VEF
+          # - "35" for COP
+          # - "36" for GTQ
+          # - "37" for PLN
+          # - "39" for INR
+          # - "40" for THB
+          # - "41" for IDR
+          # - "42" for CZK
+          # - "43" for RON
+          # - "44" for HUF
+          # - "45" for RUB
+          # - "46" for AED
+          # - "47" for BGN
+          # - "48" for HRK
+      "defaultCreativeSizeId": "A String", # Default placement dimensions for this account.
+      "accountPermissionIds": [ # Account permissions assigned to this account.
+        "A String",
+      ],
+      "comscoreVceEnabled": True or False, # Whether campaigns created in this account will be enabled for comScore vCE by default.
+      "nielsenOcrEnabled": True or False, # Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default.
+      "accountProfile": "A String", # Profile for this account. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this account. This is a required field, and must be less than 128 characters long and be globally unique.
+      "locale": "A String", # Locale of this account.
+          # Acceptable values are:
+          # - "cs" (Czech)
+          # - "de" (German)
+          # - "en" (English)
+          # - "en-GB" (English United Kingdom)
+          # - "es" (Spanish)
+          # - "fr" (French)
+          # - "it" (Italian)
+          # - "ja" (Japanese)
+          # - "ko" (Korean)
+          # - "pl" (Polish)
+          # - "pt-BR" (Portuguese Brazil)
+          # - "ru" (Russian)
+          # - "sv" (Swedish)
+          # - "tr" (Turkish)
+          # - "zh-CN" (Chinese Simplified)
+          # - "zh-TW" (Chinese Traditional)
+      "teaserSizeLimit": "A String", # File size limit in kilobytes of Rich Media teaser creatives. Must be between 1 and 10240.
+      "reportsConfiguration": { # Reporting Configuration # Reporting configuration of this account.
+        "reportGenerationTimeZoneId": "A String", # Report generation time zone ID of this account. This is a required field that can only be changed by a superuser.
+            # Acceptable values are:
+            #
+            # - "1" for "America/New_York"
+            # - "2" for "Europe/London"
+            # - "3" for "Europe/Paris"
+            # - "4" for "Africa/Johannesburg"
+            # - "5" for "Asia/Jerusalem"
+            # - "6" for "Asia/Shanghai"
+            # - "7" for "Asia/Hong_Kong"
+            # - "8" for "Asia/Tokyo"
+            # - "9" for "Australia/Sydney"
+            # - "10" for "Asia/Dubai"
+            # - "11" for "America/Los_Angeles"
+            # - "12" for "Pacific/Auckland"
+            # - "13" for "America/Sao_Paulo"
+        "exposureToConversionEnabled": True or False, # Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+        "lookbackConfiguration": { # Lookback configuration settings. # Default lookback windows for new advertisers in this account.
+          "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        },
+      },
+      "active": True or False, # Whether this account is active.
+      "activeViewOptOut": True or False, # Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions.
+      "id": "A String", # ID of this account. This is a read-only, auto-generated field.
+      "activeAdsLimitTier": "A String", # Maximum number of active ads allowed for this account.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing account.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM account.
+    "kind": "dfareporting#account", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#account".
+    "countryId": "A String", # ID of the country associated with this account.
+    "availablePermissionIds": [ # User role permissions available to the user roles of this account.
+      "A String",
+    ],
+    "description": "A String", # Description of this account.
+    "maximumImageSize": "A String", # Maximum image size allowed for this account.
+    "currencyId": "A String", # ID of currency associated with this account. This is a required field.
+        # Acceptable values are:
+        # - "1" for USD
+        # - "2" for GBP
+        # - "3" for ESP
+        # - "4" for SEK
+        # - "5" for CAD
+        # - "6" for JPY
+        # - "7" for DEM
+        # - "8" for AUD
+        # - "9" for FRF
+        # - "10" for ITL
+        # - "11" for DKK
+        # - "12" for NOK
+        # - "13" for FIM
+        # - "14" for ZAR
+        # - "15" for IEP
+        # - "16" for NLG
+        # - "17" for EUR
+        # - "18" for KRW
+        # - "19" for TWD
+        # - "20" for SGD
+        # - "21" for CNY
+        # - "22" for HKD
+        # - "23" for NZD
+        # - "24" for MYR
+        # - "25" for BRL
+        # - "26" for PTE
+        # - "27" for MXP
+        # - "28" for CLP
+        # - "29" for TRY
+        # - "30" for ARS
+        # - "31" for PEN
+        # - "32" for ILS
+        # - "33" for CHF
+        # - "34" for VEF
+        # - "35" for COP
+        # - "36" for GTQ
+        # - "37" for PLN
+        # - "39" for INR
+        # - "40" for THB
+        # - "41" for IDR
+        # - "42" for CZK
+        # - "43" for RON
+        # - "44" for HUF
+        # - "45" for RUB
+        # - "46" for AED
+        # - "47" for BGN
+        # - "48" for HRK
+    "defaultCreativeSizeId": "A String", # Default placement dimensions for this account.
+    "accountPermissionIds": [ # Account permissions assigned to this account.
+      "A String",
+    ],
+    "comscoreVceEnabled": True or False, # Whether campaigns created in this account will be enabled for comScore vCE by default.
+    "nielsenOcrEnabled": True or False, # Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default.
+    "accountProfile": "A String", # Profile for this account. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this account. This is a required field, and must be less than 128 characters long and be globally unique.
+    "locale": "A String", # Locale of this account.
+        # Acceptable values are:
+        # - "cs" (Czech)
+        # - "de" (German)
+        # - "en" (English)
+        # - "en-GB" (English United Kingdom)
+        # - "es" (Spanish)
+        # - "fr" (French)
+        # - "it" (Italian)
+        # - "ja" (Japanese)
+        # - "ko" (Korean)
+        # - "pl" (Polish)
+        # - "pt-BR" (Portuguese Brazil)
+        # - "ru" (Russian)
+        # - "sv" (Swedish)
+        # - "tr" (Turkish)
+        # - "zh-CN" (Chinese Simplified)
+        # - "zh-TW" (Chinese Traditional)
+    "teaserSizeLimit": "A String", # File size limit in kilobytes of Rich Media teaser creatives. Must be between 1 and 10240.
+    "reportsConfiguration": { # Reporting Configuration # Reporting configuration of this account.
+      "reportGenerationTimeZoneId": "A String", # Report generation time zone ID of this account. This is a required field that can only be changed by a superuser.
+          # Acceptable values are:
+          #
+          # - "1" for "America/New_York"
+          # - "2" for "Europe/London"
+          # - "3" for "Europe/Paris"
+          # - "4" for "Africa/Johannesburg"
+          # - "5" for "Asia/Jerusalem"
+          # - "6" for "Asia/Shanghai"
+          # - "7" for "Asia/Hong_Kong"
+          # - "8" for "Asia/Tokyo"
+          # - "9" for "Australia/Sydney"
+          # - "10" for "Asia/Dubai"
+          # - "11" for "America/Los_Angeles"
+          # - "12" for "Pacific/Auckland"
+          # - "13" for "America/Sao_Paulo"
+      "exposureToConversionEnabled": True or False, # Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+      "lookbackConfiguration": { # Lookback configuration settings. # Default lookback windows for new advertisers in this account.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+    },
+    "active": True or False, # Whether this account is active.
+    "activeViewOptOut": True or False, # Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions.
+    "id": "A String", # ID of this account. This is a read-only, auto-generated field.
+    "activeAdsLimitTier": "A String", # Maximum number of active ads allowed for this account.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM account.
+      "kind": "dfareporting#account", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#account".
+      "countryId": "A String", # ID of the country associated with this account.
+      "availablePermissionIds": [ # User role permissions available to the user roles of this account.
+        "A String",
+      ],
+      "description": "A String", # Description of this account.
+      "maximumImageSize": "A String", # Maximum image size allowed for this account.
+      "currencyId": "A String", # ID of currency associated with this account. This is a required field.
+          # Acceptable values are:
+          # - "1" for USD
+          # - "2" for GBP
+          # - "3" for ESP
+          # - "4" for SEK
+          # - "5" for CAD
+          # - "6" for JPY
+          # - "7" for DEM
+          # - "8" for AUD
+          # - "9" for FRF
+          # - "10" for ITL
+          # - "11" for DKK
+          # - "12" for NOK
+          # - "13" for FIM
+          # - "14" for ZAR
+          # - "15" for IEP
+          # - "16" for NLG
+          # - "17" for EUR
+          # - "18" for KRW
+          # - "19" for TWD
+          # - "20" for SGD
+          # - "21" for CNY
+          # - "22" for HKD
+          # - "23" for NZD
+          # - "24" for MYR
+          # - "25" for BRL
+          # - "26" for PTE
+          # - "27" for MXP
+          # - "28" for CLP
+          # - "29" for TRY
+          # - "30" for ARS
+          # - "31" for PEN
+          # - "32" for ILS
+          # - "33" for CHF
+          # - "34" for VEF
+          # - "35" for COP
+          # - "36" for GTQ
+          # - "37" for PLN
+          # - "39" for INR
+          # - "40" for THB
+          # - "41" for IDR
+          # - "42" for CZK
+          # - "43" for RON
+          # - "44" for HUF
+          # - "45" for RUB
+          # - "46" for AED
+          # - "47" for BGN
+          # - "48" for HRK
+      "defaultCreativeSizeId": "A String", # Default placement dimensions for this account.
+      "accountPermissionIds": [ # Account permissions assigned to this account.
+        "A String",
+      ],
+      "comscoreVceEnabled": True or False, # Whether campaigns created in this account will be enabled for comScore vCE by default.
+      "nielsenOcrEnabled": True or False, # Whether campaigns created in this account will be enabled for Nielsen OCR reach ratings by default.
+      "accountProfile": "A String", # Profile for this account. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this account. This is a required field, and must be less than 128 characters long and be globally unique.
+      "locale": "A String", # Locale of this account.
+          # Acceptable values are:
+          # - "cs" (Czech)
+          # - "de" (German)
+          # - "en" (English)
+          # - "en-GB" (English United Kingdom)
+          # - "es" (Spanish)
+          # - "fr" (French)
+          # - "it" (Italian)
+          # - "ja" (Japanese)
+          # - "ko" (Korean)
+          # - "pl" (Polish)
+          # - "pt-BR" (Portuguese Brazil)
+          # - "ru" (Russian)
+          # - "sv" (Swedish)
+          # - "tr" (Turkish)
+          # - "zh-CN" (Chinese Simplified)
+          # - "zh-TW" (Chinese Traditional)
+      "teaserSizeLimit": "A String", # File size limit in kilobytes of Rich Media teaser creatives. Must be between 1 and 10240.
+      "reportsConfiguration": { # Reporting Configuration # Reporting configuration of this account.
+        "reportGenerationTimeZoneId": "A String", # Report generation time zone ID of this account. This is a required field that can only be changed by a superuser.
+            # Acceptable values are:
+            #
+            # - "1" for "America/New_York"
+            # - "2" for "Europe/London"
+            # - "3" for "Europe/Paris"
+            # - "4" for "Africa/Johannesburg"
+            # - "5" for "Asia/Jerusalem"
+            # - "6" for "Asia/Shanghai"
+            # - "7" for "Asia/Hong_Kong"
+            # - "8" for "Asia/Tokyo"
+            # - "9" for "Australia/Sydney"
+            # - "10" for "Asia/Dubai"
+            # - "11" for "America/Los_Angeles"
+            # - "12" for "Pacific/Auckland"
+            # - "13" for "America/Sao_Paulo"
+        "exposureToConversionEnabled": True or False, # Whether the exposure to conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+        "lookbackConfiguration": { # Lookback configuration settings. # Default lookback windows for new advertisers in this account.
+          "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        },
+      },
+      "active": True or False, # Whether this account is active.
+      "activeViewOptOut": True or False, # Whether to serve creatives with Active View tags. If disabled, viewability data will not be available for any impressions.
+      "id": "A String", # ID of this account. This is a read-only, auto-generated field.
+      "activeAdsLimitTier": "A String", # Maximum number of active ads allowed for this account.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.ads.html b/docs/dyn/dfareporting_v2_5.ads.html
new file mode 100644
index 0000000..9040be8
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.ads.html
@@ -0,0 +1,2832 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.ads.html">ads</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one ad by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new ad.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, landingPageIds=None, overriddenEventTagId=None, campaignIds=None, sizeIds=None, archived=None, creativeOptimizationConfigurationIds=None, sslCompliant=None, pageToken=None, sortOrder=None, type=None, sslRequired=None, creativeIds=None, remarketingListIds=None, maxResults=None, creativeType=None, placementIds=None, active=None, compatibility=None, advertiserId=None, searchString=None, audienceSegmentIds=None, ids=None, sortField=None, dynamicClickTracker=None)</a></code></p>
+<p class="firstline">Retrieves a list of ads, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing ad. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing ad.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one ad by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Ad ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM ad.
+      "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.
+        "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+        "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+      },
+      "campaignId": "A String", # Campaign ID of this ad. This is a required field on insertion.
+      "advertiserId": "A String", # Advertiser ID of this ad. This is a required field on insertion.
+      "geoTargeting": { # Geographical Targeting. # Geographical targeting information for this ad.Applicable when type is AD_SERVING_STANDARD_AD.
+        "countries": [ # Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.
+          { # Contains information about a country that can be targeted by ads.
+            "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+            "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+            "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+            "countryCode": "A String", # Country code.
+            "name": "A String", # Name of this country.
+          },
+        ],
+        "excludeCountries": True or False, # Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.
+        "postalCodes": [ # Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.
+          { # Contains information about a postal code that can be targeted by ads.
+            "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+            "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+            "code": "A String", # Postal code. This is equivalent to the id field.
+            "id": "A String", # ID of this postal code.
+            "countryCode": "A String", # Country code of the country to which this postal code belongs.
+          },
+        ],
+        "regions": [ # Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.
+          { # Contains information about a region that can be targeted by ads.
+            "kind": "dfareporting#region", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#region".
+            "countryDartId": "A String", # DART ID of the country to which this region belongs.
+            "name": "A String", # Name of this region.
+            "countryCode": "A String", # Country code of the country to which this region belongs.
+            "regionCode": "A String", # Region code.
+            "dartId": "A String", # DART ID of this region.
+          },
+        ],
+        "cities": [ # Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.
+          { # Contains information about a city that can be targeted by ads.
+            "kind": "dfareporting#city", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#city".
+            "countryDartId": "A String", # DART ID of the country to which this city belongs.
+            "name": "A String", # Name of this city.
+            "countryCode": "A String", # Country code of the country to which this city belongs.
+            "metroCode": "A String", # Metro region code of the metro region (DMA) to which this city belongs.
+            "regionCode": "A String", # Region code of the region to which this city belongs.
+            "metroDmaId": "A String", # ID of the metro region (DMA) to which this city belongs.
+            "dartId": "A String", # DART ID of this city. This is the ID used for targeting and generating reports.
+            "regionDartId": "A String", # DART ID of the region to which this city belongs.
+          },
+        ],
+        "metros": [ # Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.
+          { # Contains information about a metro region that can be targeted by ads.
+            "kind": "dfareporting#metro", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metro".
+            "countryDartId": "A String", # DART ID of the country to which this metro region belongs.
+            "name": "A String", # Name of this metro region.
+            "countryCode": "A String", # Country code of the country to which this metro region belongs.
+            "metroCode": "A String", # Metro code of this metro region. This is equivalent to dma_id.
+            "dmaId": "A String", # DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
+            "dartId": "A String", # DART ID of this metro region.
+          },
+        ],
+      },
+      "creativeGroupAssignments": [ # Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.
+        { # Creative Group Assignment.
+          "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+          "creativeGroupId": "A String", # ID of the creative group to be assigned.
+        },
+      ],
+      "deliverySchedule": { # Delivery Schedule. # Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.
+        "priority": "A String", # Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.
+        "hardCutoff": True or False, # Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.
+        "frequencyCap": { # Frequency Cap. # Limit on the number of times an individual user can be served the ad within a specified period of time.
+          "duration": "A String", # Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days in seconds, or 7,776,000.
+          "impressions": "A String", # Number of times an individual user can be served the ad within the specified duration. The maximum allowed is 15.
+        },
+        "impressionRatio": "A String", # Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then DCM will serve ad B three times as often as ad A. Must be between 1 and 10.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "eventTagOverrides": [ # Event tag overrides for this ad.
+        { # Event tag override information.
+          "enabled": True or False, # Whether this override is enabled.
+          "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+        },
+      ],
+      "id": "A String", # ID of this ad. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this ad. This is a read-only field that can be left blank.
+      "archived": True or False, # Whether this ad is archived.
+      "technologyTargeting": { # Technology Targeting. # Technology platform targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "platformTypes": [ # Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about a platform type that can be targeted by ads.
+            "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+            "id": "A String", # ID of this platform type.
+            "name": "A String", # Name of this platform type.
+          },
+        ],
+        "operatingSystemVersions": [ # Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.
+          { # Contains information about a particular version of an operating system that can be targeted by ads.
+            "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+            "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+            "name": "A String", # Name of this operating system version.
+            "id": "A String", # ID of this operating system version.
+            "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+              "mobile": True or False, # Whether this operating system is for mobile.
+              "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+              "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+              "name": "A String", # Name of this operating system.
+              "desktop": True or False, # Whether this operating system is for desktop.
+            },
+            "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+          },
+        ],
+        "browsers": [ # Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used.The other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about a browser that can be targeted by ads.
+            "majorVersion": "A String", # Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+            "kind": "dfareporting#browser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browser".
+            "name": "A String", # Name of this browser.
+            "browserVersionId": "A String", # ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
+            "dartId": "A String", # DART ID of this browser. This is the ID used when generating reports.
+            "minorVersion": "A String", # Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+          },
+        ],
+        "operatingSystems": [ # Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.
+          { # Contains information about an operating system that can be targeted by ads.
+            "mobile": True or False, # Whether this operating system is for mobile.
+            "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+            "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+            "name": "A String", # Name of this operating system.
+            "desktop": True or False, # Whether this operating system is for desktop.
+          },
+        ],
+        "mobileCarriers": [ # Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.
+          { # Contains information about a mobile carrier that can be targeted by ads.
+            "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+            "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+            "id": "A String", # ID of this mobile carrier.
+            "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+            "name": "A String", # Name of this mobile carrier.
+          },
+        ],
+        "connectionTypes": [ # Connection types that this ad targets. For each connection type only id is required.The other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+            "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+            "id": "A String", # ID of this connection type.
+            "name": "A String", # Name of this connection type.
+          },
+        ],
+      },
+      "creativeRotation": { # Creative Rotation. # Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment.
+        "creativeAssignments": [ # Creative assignments in this creative rotation.
+          { # Creative Assignment.
+            "weight": 42, # Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM.
+            "sequence": 42, # Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL.
+            "applyEventTags": True or False, # Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.
+            "richMediaExitOverrides": [ # Rich media exit overrides for this creative assignment.
+                # Applicable when the creative type is any of the following:
+                # - RICH_MEDIA_INPAGE
+                # - RICH_MEDIA_INPAGE_FLOATING
+                # - RICH_MEDIA_IM_EXPAND
+                # - RICH_MEDIA_EXPANDING
+                # - RICH_MEDIA_INTERSTITIAL_FLOAT
+                # - RICH_MEDIA_MOBILE_IN_APP
+                # - RICH_MEDIA_MULTI_FLOATING
+                # - RICH_MEDIA_PEEL_DOWN
+                # - ADVANCED_BANNER
+                # - VPAID_LINEAR
+                # - VPAID_NON_LINEAR
+              { # Rich Media Exit Override.
+                "customExitUrl": "A String", # Click-through URL to override the default exit URL. Applicable if the useCustomExitUrl field is set to true.
+                "useCustomExitUrl": True or False, # Whether to use the custom exit URL.
+                "exitId": "A String", # ID for the override to refer to a specific exit in the creative.
+              },
+            ],
+            "sslCompliant": True or False, # Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+            "creativeGroupAssignments": [ # Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.
+              { # Creative Group Assignment.
+                "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+                "creativeGroupId": "A String", # ID of the creative group to be assigned.
+              },
+            ],
+            "companionCreativeOverrides": [ # Companion creative overrides for this creative assignment. Applicable to video ads.
+              { # Companion Click-through override.
+                "clickThroughUrl": { # Click-through URL # Click-through URL of this companion click-through override.
+                  "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                      # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                      # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                      # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+                  "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+                  "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+                  "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+                },
+                "creativeId": "A String", # ID of the creative for this companion click-through override.
+              },
+            ],
+            "startTime": "A String", # Date and time that the assigned creative should start serving.
+            "clickThroughUrl": { # Click-through URL # Click-through URL of the creative assignment.
+              "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                  # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                  # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                  # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+              "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+              "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+              "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+            },
+            "active": True or False, # Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.
+            "creativeId": "A String", # ID of the creative to be assigned. This is a required field.
+            "endTime": "A String", # Date and time that the assigned creative should stop serving. Must be later than the start time.
+            "creativeIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the creative. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          },
+        ],
+        "weightCalculationStrategy": "A String", # Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.
+        "creativeOptimizationConfigurationId": "A String", # Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.
+        "type": "A String", # Type of creative rotation. Can be used to specify whether to use sequential or random rotation.
+      },
+      "clickThroughUrl": { # Click-through URL # Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER.
+        "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+            # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+            # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+            # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+        "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+        "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+        "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+      },
+      "comments": "A String", # Comments for this ad.
+      "remarketingListExpression": { # Remarketing List Targeting Expression. # Applicable when type is AD_SERVING_STANDARD_AD. Remarketing list targeting expression for this ad.
+        "expression": "A String", # Expression describing which lists are being targeted by the ad.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this ad. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "type": "A String", # Type of ad. This is a required field on insertion. Note that default ads (AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).
+      "sslRequired": True or False, # Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      "audienceSegmentId": "A String", # Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "keyValueTargetingExpression": { # Key Value Targeting Expression. # Key-value targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "expression": "A String", # Keyword expression being targeted by the ad.
+      },
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Default click-through event tag properties for this ad.
+        "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+        "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+      },
+      "createInfo": { # Modification timestamp. # Information about the creation of this ad.This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "startTime": "A String", # Date and time that this ad should start serving. If creating an ad, this field must be a time in the future. This is a required field on insertion.
+      "active": True or False, # Whether this ad is active.
+      "compatibility": "A String", # Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.
+      "kind": "dfareporting#ad", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#ad".
+      "subaccountId": "A String", # Subaccount ID of this ad. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this ad. This is a required field and must be less than 256 characters long.
+      "dayPartTargeting": { # Day Part Targeting. # Time and day targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "userLocalTime": True or False, # Whether or not to use the user's local time. If false, the America/New York time zone applies.
+        "hoursOfDay": [ # Hours of the day when the ad will serve. Must be an integer between 0 and 23 (inclusive), where 0 is midnight to 1 AM, and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example, if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm.
+          42,
+        ],
+        "daysOfWeek": [ # Days of the week when the ad will serve.
+            #
+            # Acceptable values are:
+            # - "SUNDAY"
+            # - "MONDAY"
+            # - "TUESDAY"
+            # - "WEDNESDAY"
+            # - "THURSDAY"
+            # - "FRIDAY"
+            # - "SATURDAY"
+          "A String",
+        ],
+      },
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this ad. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "sslCompliant": True or False, # Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      "placementAssignments": [ # Placement assignments for this ad.
+        { # Placement Assignment.
+          "active": True or False, # Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.
+          "placementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "placementId": "A String", # ID of the placement to be assigned. This is a required field.
+          "sslRequired": True or False, # Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.
+        },
+      ],
+      "endTime": "A String", # Date and time that this ad should stop serving. Must be later than the start time. This is a required field on insertion.
+      "dynamicClickTracker": True or False, # Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new ad.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM ad.
+    "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.
+      "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+      "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+    },
+    "campaignId": "A String", # Campaign ID of this ad. This is a required field on insertion.
+    "advertiserId": "A String", # Advertiser ID of this ad. This is a required field on insertion.
+    "geoTargeting": { # Geographical Targeting. # Geographical targeting information for this ad.Applicable when type is AD_SERVING_STANDARD_AD.
+      "countries": [ # Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.
+        { # Contains information about a country that can be targeted by ads.
+          "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+          "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+          "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+          "countryCode": "A String", # Country code.
+          "name": "A String", # Name of this country.
+        },
+      ],
+      "excludeCountries": True or False, # Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.
+      "postalCodes": [ # Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.
+        { # Contains information about a postal code that can be targeted by ads.
+          "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+          "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+          "code": "A String", # Postal code. This is equivalent to the id field.
+          "id": "A String", # ID of this postal code.
+          "countryCode": "A String", # Country code of the country to which this postal code belongs.
+        },
+      ],
+      "regions": [ # Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.
+        { # Contains information about a region that can be targeted by ads.
+          "kind": "dfareporting#region", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#region".
+          "countryDartId": "A String", # DART ID of the country to which this region belongs.
+          "name": "A String", # Name of this region.
+          "countryCode": "A String", # Country code of the country to which this region belongs.
+          "regionCode": "A String", # Region code.
+          "dartId": "A String", # DART ID of this region.
+        },
+      ],
+      "cities": [ # Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.
+        { # Contains information about a city that can be targeted by ads.
+          "kind": "dfareporting#city", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#city".
+          "countryDartId": "A String", # DART ID of the country to which this city belongs.
+          "name": "A String", # Name of this city.
+          "countryCode": "A String", # Country code of the country to which this city belongs.
+          "metroCode": "A String", # Metro region code of the metro region (DMA) to which this city belongs.
+          "regionCode": "A String", # Region code of the region to which this city belongs.
+          "metroDmaId": "A String", # ID of the metro region (DMA) to which this city belongs.
+          "dartId": "A String", # DART ID of this city. This is the ID used for targeting and generating reports.
+          "regionDartId": "A String", # DART ID of the region to which this city belongs.
+        },
+      ],
+      "metros": [ # Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.
+        { # Contains information about a metro region that can be targeted by ads.
+          "kind": "dfareporting#metro", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metro".
+          "countryDartId": "A String", # DART ID of the country to which this metro region belongs.
+          "name": "A String", # Name of this metro region.
+          "countryCode": "A String", # Country code of the country to which this metro region belongs.
+          "metroCode": "A String", # Metro code of this metro region. This is equivalent to dma_id.
+          "dmaId": "A String", # DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
+          "dartId": "A String", # DART ID of this metro region.
+        },
+      ],
+    },
+    "creativeGroupAssignments": [ # Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.
+      { # Creative Group Assignment.
+        "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+        "creativeGroupId": "A String", # ID of the creative group to be assigned.
+      },
+    ],
+    "deliverySchedule": { # Delivery Schedule. # Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.
+      "priority": "A String", # Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.
+      "hardCutoff": True or False, # Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.
+      "frequencyCap": { # Frequency Cap. # Limit on the number of times an individual user can be served the ad within a specified period of time.
+        "duration": "A String", # Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days in seconds, or 7,776,000.
+        "impressions": "A String", # Number of times an individual user can be served the ad within the specified duration. The maximum allowed is 15.
+      },
+      "impressionRatio": "A String", # Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then DCM will serve ad B three times as often as ad A. Must be between 1 and 10.
+    },
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "eventTagOverrides": [ # Event tag overrides for this ad.
+      { # Event tag override information.
+        "enabled": True or False, # Whether this override is enabled.
+        "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+      },
+    ],
+    "id": "A String", # ID of this ad. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this ad. This is a read-only field that can be left blank.
+    "archived": True or False, # Whether this ad is archived.
+    "technologyTargeting": { # Technology Targeting. # Technology platform targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "platformTypes": [ # Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.
+        { # Contains information about a platform type that can be targeted by ads.
+          "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+          "id": "A String", # ID of this platform type.
+          "name": "A String", # Name of this platform type.
+        },
+      ],
+      "operatingSystemVersions": [ # Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.
+        { # Contains information about a particular version of an operating system that can be targeted by ads.
+          "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+          "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+          "name": "A String", # Name of this operating system version.
+          "id": "A String", # ID of this operating system version.
+          "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+            "mobile": True or False, # Whether this operating system is for mobile.
+            "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+            "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+            "name": "A String", # Name of this operating system.
+            "desktop": True or False, # Whether this operating system is for desktop.
+          },
+          "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+        },
+      ],
+      "browsers": [ # Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used.The other fields are populated automatically when the ad is inserted or updated.
+        { # Contains information about a browser that can be targeted by ads.
+          "majorVersion": "A String", # Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+          "kind": "dfareporting#browser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browser".
+          "name": "A String", # Name of this browser.
+          "browserVersionId": "A String", # ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
+          "dartId": "A String", # DART ID of this browser. This is the ID used when generating reports.
+          "minorVersion": "A String", # Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+        },
+      ],
+      "operatingSystems": [ # Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.
+        { # Contains information about an operating system that can be targeted by ads.
+          "mobile": True or False, # Whether this operating system is for mobile.
+          "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+          "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+          "name": "A String", # Name of this operating system.
+          "desktop": True or False, # Whether this operating system is for desktop.
+        },
+      ],
+      "mobileCarriers": [ # Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.
+        { # Contains information about a mobile carrier that can be targeted by ads.
+          "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+          "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+          "id": "A String", # ID of this mobile carrier.
+          "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+          "name": "A String", # Name of this mobile carrier.
+        },
+      ],
+      "connectionTypes": [ # Connection types that this ad targets. For each connection type only id is required.The other fields are populated automatically when the ad is inserted or updated.
+        { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+          "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+          "id": "A String", # ID of this connection type.
+          "name": "A String", # Name of this connection type.
+        },
+      ],
+    },
+    "creativeRotation": { # Creative Rotation. # Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment.
+      "creativeAssignments": [ # Creative assignments in this creative rotation.
+        { # Creative Assignment.
+          "weight": 42, # Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM.
+          "sequence": 42, # Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL.
+          "applyEventTags": True or False, # Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.
+          "richMediaExitOverrides": [ # Rich media exit overrides for this creative assignment.
+              # Applicable when the creative type is any of the following:
+              # - RICH_MEDIA_INPAGE
+              # - RICH_MEDIA_INPAGE_FLOATING
+              # - RICH_MEDIA_IM_EXPAND
+              # - RICH_MEDIA_EXPANDING
+              # - RICH_MEDIA_INTERSTITIAL_FLOAT
+              # - RICH_MEDIA_MOBILE_IN_APP
+              # - RICH_MEDIA_MULTI_FLOATING
+              # - RICH_MEDIA_PEEL_DOWN
+              # - ADVANCED_BANNER
+              # - VPAID_LINEAR
+              # - VPAID_NON_LINEAR
+            { # Rich Media Exit Override.
+              "customExitUrl": "A String", # Click-through URL to override the default exit URL. Applicable if the useCustomExitUrl field is set to true.
+              "useCustomExitUrl": True or False, # Whether to use the custom exit URL.
+              "exitId": "A String", # ID for the override to refer to a specific exit in the creative.
+            },
+          ],
+          "sslCompliant": True or False, # Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+          "creativeGroupAssignments": [ # Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.
+            { # Creative Group Assignment.
+              "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+              "creativeGroupId": "A String", # ID of the creative group to be assigned.
+            },
+          ],
+          "companionCreativeOverrides": [ # Companion creative overrides for this creative assignment. Applicable to video ads.
+            { # Companion Click-through override.
+              "clickThroughUrl": { # Click-through URL # Click-through URL of this companion click-through override.
+                "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                    # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                    # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                    # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+                "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+                "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+                "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+              },
+              "creativeId": "A String", # ID of the creative for this companion click-through override.
+            },
+          ],
+          "startTime": "A String", # Date and time that the assigned creative should start serving.
+          "clickThroughUrl": { # Click-through URL # Click-through URL of the creative assignment.
+            "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+            "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+            "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+            "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+          },
+          "active": True or False, # Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.
+          "creativeId": "A String", # ID of the creative to be assigned. This is a required field.
+          "endTime": "A String", # Date and time that the assigned creative should stop serving. Must be later than the start time.
+          "creativeIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the creative. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        },
+      ],
+      "weightCalculationStrategy": "A String", # Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.
+      "creativeOptimizationConfigurationId": "A String", # Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.
+      "type": "A String", # Type of creative rotation. Can be used to specify whether to use sequential or random rotation.
+    },
+    "clickThroughUrl": { # Click-through URL # Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER.
+      "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+          # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+          # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+          # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+      "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+      "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+      "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+    },
+    "comments": "A String", # Comments for this ad.
+    "remarketingListExpression": { # Remarketing List Targeting Expression. # Applicable when type is AD_SERVING_STANDARD_AD. Remarketing list targeting expression for this ad.
+      "expression": "A String", # Expression describing which lists are being targeted by the ad.
+    },
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this ad. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD.
+      "width": 42, # Width of this size.
+      "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+      "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+      "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+      "height": 42, # Height of this size.
+    },
+    "type": "A String", # Type of ad. This is a required field on insertion. Note that default ads (AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).
+    "sslRequired": True or False, # Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.
+    "audienceSegmentId": "A String", # Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+    "keyValueTargetingExpression": { # Key Value Targeting Expression. # Key-value targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "expression": "A String", # Keyword expression being targeted by the ad.
+    },
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Default click-through event tag properties for this ad.
+      "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+    },
+    "createInfo": { # Modification timestamp. # Information about the creation of this ad.This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "startTime": "A String", # Date and time that this ad should start serving. If creating an ad, this field must be a time in the future. This is a required field on insertion.
+    "active": True or False, # Whether this ad is active.
+    "compatibility": "A String", # Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.
+    "kind": "dfareporting#ad", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#ad".
+    "subaccountId": "A String", # Subaccount ID of this ad. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this ad. This is a required field and must be less than 256 characters long.
+    "dayPartTargeting": { # Day Part Targeting. # Time and day targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "userLocalTime": True or False, # Whether or not to use the user's local time. If false, the America/New York time zone applies.
+      "hoursOfDay": [ # Hours of the day when the ad will serve. Must be an integer between 0 and 23 (inclusive), where 0 is midnight to 1 AM, and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example, if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm.
+        42,
+      ],
+      "daysOfWeek": [ # Days of the week when the ad will serve.
+          #
+          # Acceptable values are:
+          # - "SUNDAY"
+          # - "MONDAY"
+          # - "TUESDAY"
+          # - "WEDNESDAY"
+          # - "THURSDAY"
+          # - "FRIDAY"
+          # - "SATURDAY"
+        "A String",
+      ],
+    },
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this ad. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "sslCompliant": True or False, # Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+    "placementAssignments": [ # Placement assignments for this ad.
+      { # Placement Assignment.
+        "active": True or False, # Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.
+        "placementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement. This is a read-only, auto-generated field.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "placementId": "A String", # ID of the placement to be assigned. This is a required field.
+        "sslRequired": True or False, # Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      },
+    ],
+    "endTime": "A String", # Date and time that this ad should stop serving. Must be later than the start time. This is a required field on insertion.
+    "dynamicClickTracker": True or False, # Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM ad.
+      "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.
+        "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+        "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+      },
+      "campaignId": "A String", # Campaign ID of this ad. This is a required field on insertion.
+      "advertiserId": "A String", # Advertiser ID of this ad. This is a required field on insertion.
+      "geoTargeting": { # Geographical Targeting. # Geographical targeting information for this ad.Applicable when type is AD_SERVING_STANDARD_AD.
+        "countries": [ # Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.
+          { # Contains information about a country that can be targeted by ads.
+            "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+            "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+            "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+            "countryCode": "A String", # Country code.
+            "name": "A String", # Name of this country.
+          },
+        ],
+        "excludeCountries": True or False, # Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.
+        "postalCodes": [ # Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.
+          { # Contains information about a postal code that can be targeted by ads.
+            "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+            "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+            "code": "A String", # Postal code. This is equivalent to the id field.
+            "id": "A String", # ID of this postal code.
+            "countryCode": "A String", # Country code of the country to which this postal code belongs.
+          },
+        ],
+        "regions": [ # Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.
+          { # Contains information about a region that can be targeted by ads.
+            "kind": "dfareporting#region", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#region".
+            "countryDartId": "A String", # DART ID of the country to which this region belongs.
+            "name": "A String", # Name of this region.
+            "countryCode": "A String", # Country code of the country to which this region belongs.
+            "regionCode": "A String", # Region code.
+            "dartId": "A String", # DART ID of this region.
+          },
+        ],
+        "cities": [ # Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.
+          { # Contains information about a city that can be targeted by ads.
+            "kind": "dfareporting#city", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#city".
+            "countryDartId": "A String", # DART ID of the country to which this city belongs.
+            "name": "A String", # Name of this city.
+            "countryCode": "A String", # Country code of the country to which this city belongs.
+            "metroCode": "A String", # Metro region code of the metro region (DMA) to which this city belongs.
+            "regionCode": "A String", # Region code of the region to which this city belongs.
+            "metroDmaId": "A String", # ID of the metro region (DMA) to which this city belongs.
+            "dartId": "A String", # DART ID of this city. This is the ID used for targeting and generating reports.
+            "regionDartId": "A String", # DART ID of the region to which this city belongs.
+          },
+        ],
+        "metros": [ # Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.
+          { # Contains information about a metro region that can be targeted by ads.
+            "kind": "dfareporting#metro", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metro".
+            "countryDartId": "A String", # DART ID of the country to which this metro region belongs.
+            "name": "A String", # Name of this metro region.
+            "countryCode": "A String", # Country code of the country to which this metro region belongs.
+            "metroCode": "A String", # Metro code of this metro region. This is equivalent to dma_id.
+            "dmaId": "A String", # DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
+            "dartId": "A String", # DART ID of this metro region.
+          },
+        ],
+      },
+      "creativeGroupAssignments": [ # Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.
+        { # Creative Group Assignment.
+          "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+          "creativeGroupId": "A String", # ID of the creative group to be assigned.
+        },
+      ],
+      "deliverySchedule": { # Delivery Schedule. # Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.
+        "priority": "A String", # Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.
+        "hardCutoff": True or False, # Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.
+        "frequencyCap": { # Frequency Cap. # Limit on the number of times an individual user can be served the ad within a specified period of time.
+          "duration": "A String", # Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days in seconds, or 7,776,000.
+          "impressions": "A String", # Number of times an individual user can be served the ad within the specified duration. The maximum allowed is 15.
+        },
+        "impressionRatio": "A String", # Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then DCM will serve ad B three times as often as ad A. Must be between 1 and 10.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "eventTagOverrides": [ # Event tag overrides for this ad.
+        { # Event tag override information.
+          "enabled": True or False, # Whether this override is enabled.
+          "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+        },
+      ],
+      "id": "A String", # ID of this ad. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this ad. This is a read-only field that can be left blank.
+      "archived": True or False, # Whether this ad is archived.
+      "technologyTargeting": { # Technology Targeting. # Technology platform targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "platformTypes": [ # Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about a platform type that can be targeted by ads.
+            "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+            "id": "A String", # ID of this platform type.
+            "name": "A String", # Name of this platform type.
+          },
+        ],
+        "operatingSystemVersions": [ # Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.
+          { # Contains information about a particular version of an operating system that can be targeted by ads.
+            "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+            "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+            "name": "A String", # Name of this operating system version.
+            "id": "A String", # ID of this operating system version.
+            "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+              "mobile": True or False, # Whether this operating system is for mobile.
+              "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+              "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+              "name": "A String", # Name of this operating system.
+              "desktop": True or False, # Whether this operating system is for desktop.
+            },
+            "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+          },
+        ],
+        "browsers": [ # Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used.The other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about a browser that can be targeted by ads.
+            "majorVersion": "A String", # Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+            "kind": "dfareporting#browser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browser".
+            "name": "A String", # Name of this browser.
+            "browserVersionId": "A String", # ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
+            "dartId": "A String", # DART ID of this browser. This is the ID used when generating reports.
+            "minorVersion": "A String", # Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+          },
+        ],
+        "operatingSystems": [ # Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.
+          { # Contains information about an operating system that can be targeted by ads.
+            "mobile": True or False, # Whether this operating system is for mobile.
+            "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+            "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+            "name": "A String", # Name of this operating system.
+            "desktop": True or False, # Whether this operating system is for desktop.
+          },
+        ],
+        "mobileCarriers": [ # Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.
+          { # Contains information about a mobile carrier that can be targeted by ads.
+            "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+            "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+            "id": "A String", # ID of this mobile carrier.
+            "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+            "name": "A String", # Name of this mobile carrier.
+          },
+        ],
+        "connectionTypes": [ # Connection types that this ad targets. For each connection type only id is required.The other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+            "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+            "id": "A String", # ID of this connection type.
+            "name": "A String", # Name of this connection type.
+          },
+        ],
+      },
+      "creativeRotation": { # Creative Rotation. # Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment.
+        "creativeAssignments": [ # Creative assignments in this creative rotation.
+          { # Creative Assignment.
+            "weight": 42, # Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM.
+            "sequence": 42, # Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL.
+            "applyEventTags": True or False, # Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.
+            "richMediaExitOverrides": [ # Rich media exit overrides for this creative assignment.
+                # Applicable when the creative type is any of the following:
+                # - RICH_MEDIA_INPAGE
+                # - RICH_MEDIA_INPAGE_FLOATING
+                # - RICH_MEDIA_IM_EXPAND
+                # - RICH_MEDIA_EXPANDING
+                # - RICH_MEDIA_INTERSTITIAL_FLOAT
+                # - RICH_MEDIA_MOBILE_IN_APP
+                # - RICH_MEDIA_MULTI_FLOATING
+                # - RICH_MEDIA_PEEL_DOWN
+                # - ADVANCED_BANNER
+                # - VPAID_LINEAR
+                # - VPAID_NON_LINEAR
+              { # Rich Media Exit Override.
+                "customExitUrl": "A String", # Click-through URL to override the default exit URL. Applicable if the useCustomExitUrl field is set to true.
+                "useCustomExitUrl": True or False, # Whether to use the custom exit URL.
+                "exitId": "A String", # ID for the override to refer to a specific exit in the creative.
+              },
+            ],
+            "sslCompliant": True or False, # Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+            "creativeGroupAssignments": [ # Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.
+              { # Creative Group Assignment.
+                "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+                "creativeGroupId": "A String", # ID of the creative group to be assigned.
+              },
+            ],
+            "companionCreativeOverrides": [ # Companion creative overrides for this creative assignment. Applicable to video ads.
+              { # Companion Click-through override.
+                "clickThroughUrl": { # Click-through URL # Click-through URL of this companion click-through override.
+                  "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                      # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                      # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                      # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+                  "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+                  "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+                  "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+                },
+                "creativeId": "A String", # ID of the creative for this companion click-through override.
+              },
+            ],
+            "startTime": "A String", # Date and time that the assigned creative should start serving.
+            "clickThroughUrl": { # Click-through URL # Click-through URL of the creative assignment.
+              "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                  # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                  # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                  # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+              "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+              "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+              "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+            },
+            "active": True or False, # Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.
+            "creativeId": "A String", # ID of the creative to be assigned. This is a required field.
+            "endTime": "A String", # Date and time that the assigned creative should stop serving. Must be later than the start time.
+            "creativeIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the creative. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          },
+        ],
+        "weightCalculationStrategy": "A String", # Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.
+        "creativeOptimizationConfigurationId": "A String", # Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.
+        "type": "A String", # Type of creative rotation. Can be used to specify whether to use sequential or random rotation.
+      },
+      "clickThroughUrl": { # Click-through URL # Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER.
+        "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+            # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+            # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+            # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+        "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+        "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+        "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+      },
+      "comments": "A String", # Comments for this ad.
+      "remarketingListExpression": { # Remarketing List Targeting Expression. # Applicable when type is AD_SERVING_STANDARD_AD. Remarketing list targeting expression for this ad.
+        "expression": "A String", # Expression describing which lists are being targeted by the ad.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this ad. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "type": "A String", # Type of ad. This is a required field on insertion. Note that default ads (AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).
+      "sslRequired": True or False, # Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      "audienceSegmentId": "A String", # Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "keyValueTargetingExpression": { # Key Value Targeting Expression. # Key-value targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "expression": "A String", # Keyword expression being targeted by the ad.
+      },
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Default click-through event tag properties for this ad.
+        "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+        "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+      },
+      "createInfo": { # Modification timestamp. # Information about the creation of this ad.This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "startTime": "A String", # Date and time that this ad should start serving. If creating an ad, this field must be a time in the future. This is a required field on insertion.
+      "active": True or False, # Whether this ad is active.
+      "compatibility": "A String", # Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.
+      "kind": "dfareporting#ad", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#ad".
+      "subaccountId": "A String", # Subaccount ID of this ad. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this ad. This is a required field and must be less than 256 characters long.
+      "dayPartTargeting": { # Day Part Targeting. # Time and day targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "userLocalTime": True or False, # Whether or not to use the user's local time. If false, the America/New York time zone applies.
+        "hoursOfDay": [ # Hours of the day when the ad will serve. Must be an integer between 0 and 23 (inclusive), where 0 is midnight to 1 AM, and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example, if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm.
+          42,
+        ],
+        "daysOfWeek": [ # Days of the week when the ad will serve.
+            #
+            # Acceptable values are:
+            # - "SUNDAY"
+            # - "MONDAY"
+            # - "TUESDAY"
+            # - "WEDNESDAY"
+            # - "THURSDAY"
+            # - "FRIDAY"
+            # - "SATURDAY"
+          "A String",
+        ],
+      },
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this ad. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "sslCompliant": True or False, # Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      "placementAssignments": [ # Placement assignments for this ad.
+        { # Placement Assignment.
+          "active": True or False, # Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.
+          "placementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "placementId": "A String", # ID of the placement to be assigned. This is a required field.
+          "sslRequired": True or False, # Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.
+        },
+      ],
+      "endTime": "A String", # Date and time that this ad should stop serving. Must be later than the start time. This is a required field on insertion.
+      "dynamicClickTracker": True or False, # Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, landingPageIds=None, overriddenEventTagId=None, campaignIds=None, sizeIds=None, archived=None, creativeOptimizationConfigurationIds=None, sslCompliant=None, pageToken=None, sortOrder=None, type=None, sslRequired=None, creativeIds=None, remarketingListIds=None, maxResults=None, creativeType=None, placementIds=None, active=None, compatibility=None, advertiserId=None, searchString=None, audienceSegmentIds=None, ids=None, sortField=None, dynamicClickTracker=None)</code>
+  <pre>Retrieves a list of ads, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  landingPageIds: string, Select only ads with these landing page IDs. (repeated)
+  overriddenEventTagId: string, Select only ads with this event tag override ID.
+  campaignIds: string, Select only ads with these campaign IDs. (repeated)
+  sizeIds: string, Select only ads with these size IDs. (repeated)
+  archived: boolean, Select only archived ads.
+  creativeOptimizationConfigurationIds: string, Select only ads with these creative optimization configuration IDs. (repeated)
+  sslCompliant: boolean, Select only ads that are SSL-compliant.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  type: string, Select only ads with these types. (repeated)
+    Allowed values
+      AD_SERVING_CLICK_TRACKER - 
+      AD_SERVING_DEFAULT_AD - 
+      AD_SERVING_STANDARD_AD - 
+      AD_SERVING_TRACKING - 
+  sslRequired: boolean, Select only ads that require SSL.
+  creativeIds: string, Select only ads with these creative IDs assigned. (repeated)
+  remarketingListIds: string, Select only ads whose list targeting expression use these remarketing list IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  creativeType: string, Select only ads with the specified creativeType.
+    Allowed values
+      BRAND_SAFE_DEFAULT_INSTREAM_VIDEO - 
+      CUSTOM_DISPLAY - 
+      CUSTOM_DISPLAY_INTERSTITIAL - 
+      DISPLAY - 
+      DISPLAY_IMAGE_GALLERY - 
+      DISPLAY_REDIRECT - 
+      FLASH_INPAGE - 
+      HTML5_BANNER - 
+      IMAGE - 
+      INSTREAM_VIDEO - 
+      INSTREAM_VIDEO_REDIRECT - 
+      INTERNAL_REDIRECT - 
+      INTERSTITIAL_INTERNAL_REDIRECT - 
+      RICH_MEDIA_DISPLAY_BANNER - 
+      RICH_MEDIA_DISPLAY_EXPANDING - 
+      RICH_MEDIA_DISPLAY_INTERSTITIAL - 
+      RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL - 
+      RICH_MEDIA_IM_EXPAND - 
+      RICH_MEDIA_INPAGE_FLOATING - 
+      RICH_MEDIA_MOBILE_IN_APP - 
+      RICH_MEDIA_PEEL_DOWN - 
+      TRACKING_TEXT - 
+      VPAID_LINEAR_VIDEO - 
+      VPAID_NON_LINEAR_VIDEO - 
+  placementIds: string, Select only ads with these placement IDs assigned. (repeated)
+  active: boolean, Select only active ads.
+  compatibility: string, Select default ads with the specified compatibility. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering an in-stream video ads developed with the VAST standard.
+    Allowed values
+      APP - 
+      APP_INTERSTITIAL - 
+      DISPLAY - 
+      DISPLAY_INTERSTITIAL - 
+      IN_STREAM_VIDEO - 
+  advertiserId: string, Select only ads with this advertiser ID.
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "ad*2015" will return objects with names like "ad June 2015", "ad April 2015", or simply "ad 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "ad" will match objects with name "my ad", "ad 2015", or simply "ad".
+  audienceSegmentIds: string, Select only ads with these audience segment IDs. (repeated)
+  ids: string, Select only ads with these IDs. (repeated)
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  dynamicClickTracker: boolean, Select only dynamic click trackers. Applicable when type is AD_SERVING_CLICK_TRACKER. If true, select dynamic click trackers. If false, select static click trackers. Leave unset to select both.
+
+Returns:
+  An object of the form:
+
+    { # Ad List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#adsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#adsListResponse".
+    "ads": [ # Ad collection.
+      { # Contains properties of a DCM ad.
+          "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.
+            "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+            "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+          },
+          "campaignId": "A String", # Campaign ID of this ad. This is a required field on insertion.
+          "advertiserId": "A String", # Advertiser ID of this ad. This is a required field on insertion.
+          "geoTargeting": { # Geographical Targeting. # Geographical targeting information for this ad.Applicable when type is AD_SERVING_STANDARD_AD.
+            "countries": [ # Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.
+              { # Contains information about a country that can be targeted by ads.
+                "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+                "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+                "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+                "countryCode": "A String", # Country code.
+                "name": "A String", # Name of this country.
+              },
+            ],
+            "excludeCountries": True or False, # Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.
+            "postalCodes": [ # Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.
+              { # Contains information about a postal code that can be targeted by ads.
+                "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+                "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+                "code": "A String", # Postal code. This is equivalent to the id field.
+                "id": "A String", # ID of this postal code.
+                "countryCode": "A String", # Country code of the country to which this postal code belongs.
+              },
+            ],
+            "regions": [ # Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.
+              { # Contains information about a region that can be targeted by ads.
+                "kind": "dfareporting#region", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#region".
+                "countryDartId": "A String", # DART ID of the country to which this region belongs.
+                "name": "A String", # Name of this region.
+                "countryCode": "A String", # Country code of the country to which this region belongs.
+                "regionCode": "A String", # Region code.
+                "dartId": "A String", # DART ID of this region.
+              },
+            ],
+            "cities": [ # Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.
+              { # Contains information about a city that can be targeted by ads.
+                "kind": "dfareporting#city", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#city".
+                "countryDartId": "A String", # DART ID of the country to which this city belongs.
+                "name": "A String", # Name of this city.
+                "countryCode": "A String", # Country code of the country to which this city belongs.
+                "metroCode": "A String", # Metro region code of the metro region (DMA) to which this city belongs.
+                "regionCode": "A String", # Region code of the region to which this city belongs.
+                "metroDmaId": "A String", # ID of the metro region (DMA) to which this city belongs.
+                "dartId": "A String", # DART ID of this city. This is the ID used for targeting and generating reports.
+                "regionDartId": "A String", # DART ID of the region to which this city belongs.
+              },
+            ],
+            "metros": [ # Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.
+              { # Contains information about a metro region that can be targeted by ads.
+                "kind": "dfareporting#metro", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metro".
+                "countryDartId": "A String", # DART ID of the country to which this metro region belongs.
+                "name": "A String", # Name of this metro region.
+                "countryCode": "A String", # Country code of the country to which this metro region belongs.
+                "metroCode": "A String", # Metro code of this metro region. This is equivalent to dma_id.
+                "dmaId": "A String", # DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
+                "dartId": "A String", # DART ID of this metro region.
+              },
+            ],
+          },
+          "creativeGroupAssignments": [ # Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.
+            { # Creative Group Assignment.
+              "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+              "creativeGroupId": "A String", # ID of the creative group to be assigned.
+            },
+          ],
+          "deliverySchedule": { # Delivery Schedule. # Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.
+            "priority": "A String", # Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.
+            "hardCutoff": True or False, # Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.
+            "frequencyCap": { # Frequency Cap. # Limit on the number of times an individual user can be served the ad within a specified period of time.
+              "duration": "A String", # Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days in seconds, or 7,776,000.
+              "impressions": "A String", # Number of times an individual user can be served the ad within the specified duration. The maximum allowed is 15.
+            },
+            "impressionRatio": "A String", # Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then DCM will serve ad B three times as often as ad A. Must be between 1 and 10.
+          },
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "eventTagOverrides": [ # Event tag overrides for this ad.
+            { # Event tag override information.
+              "enabled": True or False, # Whether this override is enabled.
+              "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+            },
+          ],
+          "id": "A String", # ID of this ad. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this ad. This is a read-only field that can be left blank.
+          "archived": True or False, # Whether this ad is archived.
+          "technologyTargeting": { # Technology Targeting. # Technology platform targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+            "platformTypes": [ # Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.
+              { # Contains information about a platform type that can be targeted by ads.
+                "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+                "id": "A String", # ID of this platform type.
+                "name": "A String", # Name of this platform type.
+              },
+            ],
+            "operatingSystemVersions": [ # Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.
+              { # Contains information about a particular version of an operating system that can be targeted by ads.
+                "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+                "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+                "name": "A String", # Name of this operating system version.
+                "id": "A String", # ID of this operating system version.
+                "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+                  "mobile": True or False, # Whether this operating system is for mobile.
+                  "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+                  "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+                  "name": "A String", # Name of this operating system.
+                  "desktop": True or False, # Whether this operating system is for desktop.
+                },
+                "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+              },
+            ],
+            "browsers": [ # Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used.The other fields are populated automatically when the ad is inserted or updated.
+              { # Contains information about a browser that can be targeted by ads.
+                "majorVersion": "A String", # Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+                "kind": "dfareporting#browser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browser".
+                "name": "A String", # Name of this browser.
+                "browserVersionId": "A String", # ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
+                "dartId": "A String", # DART ID of this browser. This is the ID used when generating reports.
+                "minorVersion": "A String", # Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+              },
+            ],
+            "operatingSystems": [ # Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.
+              { # Contains information about an operating system that can be targeted by ads.
+                "mobile": True or False, # Whether this operating system is for mobile.
+                "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+                "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+                "name": "A String", # Name of this operating system.
+                "desktop": True or False, # Whether this operating system is for desktop.
+              },
+            ],
+            "mobileCarriers": [ # Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.
+              { # Contains information about a mobile carrier that can be targeted by ads.
+                "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+                "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+                "id": "A String", # ID of this mobile carrier.
+                "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+                "name": "A String", # Name of this mobile carrier.
+              },
+            ],
+            "connectionTypes": [ # Connection types that this ad targets. For each connection type only id is required.The other fields are populated automatically when the ad is inserted or updated.
+              { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+                "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+                "id": "A String", # ID of this connection type.
+                "name": "A String", # Name of this connection type.
+              },
+            ],
+          },
+          "creativeRotation": { # Creative Rotation. # Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment.
+            "creativeAssignments": [ # Creative assignments in this creative rotation.
+              { # Creative Assignment.
+                "weight": 42, # Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM.
+                "sequence": 42, # Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL.
+                "applyEventTags": True or False, # Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.
+                "richMediaExitOverrides": [ # Rich media exit overrides for this creative assignment.
+                    # Applicable when the creative type is any of the following:
+                    # - RICH_MEDIA_INPAGE
+                    # - RICH_MEDIA_INPAGE_FLOATING
+                    # - RICH_MEDIA_IM_EXPAND
+                    # - RICH_MEDIA_EXPANDING
+                    # - RICH_MEDIA_INTERSTITIAL_FLOAT
+                    # - RICH_MEDIA_MOBILE_IN_APP
+                    # - RICH_MEDIA_MULTI_FLOATING
+                    # - RICH_MEDIA_PEEL_DOWN
+                    # - ADVANCED_BANNER
+                    # - VPAID_LINEAR
+                    # - VPAID_NON_LINEAR
+                  { # Rich Media Exit Override.
+                    "customExitUrl": "A String", # Click-through URL to override the default exit URL. Applicable if the useCustomExitUrl field is set to true.
+                    "useCustomExitUrl": True or False, # Whether to use the custom exit URL.
+                    "exitId": "A String", # ID for the override to refer to a specific exit in the creative.
+                  },
+                ],
+                "sslCompliant": True or False, # Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+                "creativeGroupAssignments": [ # Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.
+                  { # Creative Group Assignment.
+                    "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+                    "creativeGroupId": "A String", # ID of the creative group to be assigned.
+                  },
+                ],
+                "companionCreativeOverrides": [ # Companion creative overrides for this creative assignment. Applicable to video ads.
+                  { # Companion Click-through override.
+                    "clickThroughUrl": { # Click-through URL # Click-through URL of this companion click-through override.
+                      "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                          # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                          # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                          # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+                      "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+                      "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+                      "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+                    },
+                    "creativeId": "A String", # ID of the creative for this companion click-through override.
+                  },
+                ],
+                "startTime": "A String", # Date and time that the assigned creative should start serving.
+                "clickThroughUrl": { # Click-through URL # Click-through URL of the creative assignment.
+                  "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                      # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                      # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                      # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+                  "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+                  "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+                  "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+                },
+                "active": True or False, # Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.
+                "creativeId": "A String", # ID of the creative to be assigned. This is a required field.
+                "endTime": "A String", # Date and time that the assigned creative should stop serving. Must be later than the start time.
+                "creativeIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the creative. This is a read-only, auto-generated field.
+                  "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                  "value": "A String", # The value of the dimension.
+                  "dimensionName": "A String", # The name of the dimension.
+                  "etag": "A String", # The eTag of this response for caching purposes.
+                  "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                  "id": "A String", # The ID associated with the value if available.
+                },
+              },
+            ],
+            "weightCalculationStrategy": "A String", # Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.
+            "creativeOptimizationConfigurationId": "A String", # Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.
+            "type": "A String", # Type of creative rotation. Can be used to specify whether to use sequential or random rotation.
+          },
+          "clickThroughUrl": { # Click-through URL # Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER.
+            "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+            "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+            "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+            "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+          },
+          "comments": "A String", # Comments for this ad.
+          "remarketingListExpression": { # Remarketing List Targeting Expression. # Applicable when type is AD_SERVING_STANDARD_AD. Remarketing list targeting expression for this ad.
+            "expression": "A String", # Expression describing which lists are being targeted by the ad.
+          },
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this ad. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "type": "A String", # Type of ad. This is a required field on insertion. Note that default ads (AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).
+          "sslRequired": True or False, # Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.
+          "audienceSegmentId": "A String", # Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+          "keyValueTargetingExpression": { # Key Value Targeting Expression. # Key-value targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+            "expression": "A String", # Keyword expression being targeted by the ad.
+          },
+          "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Default click-through event tag properties for this ad.
+            "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+            "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+          },
+          "createInfo": { # Modification timestamp. # Information about the creation of this ad.This is a read-only field.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "startTime": "A String", # Date and time that this ad should start serving. If creating an ad, this field must be a time in the future. This is a required field on insertion.
+          "active": True or False, # Whether this ad is active.
+          "compatibility": "A String", # Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.
+          "kind": "dfareporting#ad", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#ad".
+          "subaccountId": "A String", # Subaccount ID of this ad. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this ad. This is a required field and must be less than 256 characters long.
+          "dayPartTargeting": { # Day Part Targeting. # Time and day targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+            "userLocalTime": True or False, # Whether or not to use the user's local time. If false, the America/New York time zone applies.
+            "hoursOfDay": [ # Hours of the day when the ad will serve. Must be an integer between 0 and 23 (inclusive), where 0 is midnight to 1 AM, and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example, if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm.
+              42,
+            ],
+            "daysOfWeek": [ # Days of the week when the ad will serve.
+                #
+                # Acceptable values are:
+                # - "SUNDAY"
+                # - "MONDAY"
+                # - "TUESDAY"
+                # - "WEDNESDAY"
+                # - "THURSDAY"
+                # - "FRIDAY"
+                # - "SATURDAY"
+              "A String",
+            ],
+          },
+          "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this ad. This is a read-only field.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "sslCompliant": True or False, # Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+          "placementAssignments": [ # Placement assignments for this ad.
+            { # Placement Assignment.
+              "active": True or False, # Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.
+              "placementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement. This is a read-only, auto-generated field.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+              "placementId": "A String", # ID of the placement to be assigned. This is a required field.
+              "sslRequired": True or False, # Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.
+            },
+          ],
+          "endTime": "A String", # Date and time that this ad should stop serving. Must be later than the start time. This is a required field on insertion.
+          "dynamicClickTracker": True or False, # Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing ad. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Ad ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM ad.
+    "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.
+      "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+      "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+    },
+    "campaignId": "A String", # Campaign ID of this ad. This is a required field on insertion.
+    "advertiserId": "A String", # Advertiser ID of this ad. This is a required field on insertion.
+    "geoTargeting": { # Geographical Targeting. # Geographical targeting information for this ad.Applicable when type is AD_SERVING_STANDARD_AD.
+      "countries": [ # Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.
+        { # Contains information about a country that can be targeted by ads.
+          "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+          "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+          "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+          "countryCode": "A String", # Country code.
+          "name": "A String", # Name of this country.
+        },
+      ],
+      "excludeCountries": True or False, # Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.
+      "postalCodes": [ # Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.
+        { # Contains information about a postal code that can be targeted by ads.
+          "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+          "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+          "code": "A String", # Postal code. This is equivalent to the id field.
+          "id": "A String", # ID of this postal code.
+          "countryCode": "A String", # Country code of the country to which this postal code belongs.
+        },
+      ],
+      "regions": [ # Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.
+        { # Contains information about a region that can be targeted by ads.
+          "kind": "dfareporting#region", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#region".
+          "countryDartId": "A String", # DART ID of the country to which this region belongs.
+          "name": "A String", # Name of this region.
+          "countryCode": "A String", # Country code of the country to which this region belongs.
+          "regionCode": "A String", # Region code.
+          "dartId": "A String", # DART ID of this region.
+        },
+      ],
+      "cities": [ # Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.
+        { # Contains information about a city that can be targeted by ads.
+          "kind": "dfareporting#city", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#city".
+          "countryDartId": "A String", # DART ID of the country to which this city belongs.
+          "name": "A String", # Name of this city.
+          "countryCode": "A String", # Country code of the country to which this city belongs.
+          "metroCode": "A String", # Metro region code of the metro region (DMA) to which this city belongs.
+          "regionCode": "A String", # Region code of the region to which this city belongs.
+          "metroDmaId": "A String", # ID of the metro region (DMA) to which this city belongs.
+          "dartId": "A String", # DART ID of this city. This is the ID used for targeting and generating reports.
+          "regionDartId": "A String", # DART ID of the region to which this city belongs.
+        },
+      ],
+      "metros": [ # Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.
+        { # Contains information about a metro region that can be targeted by ads.
+          "kind": "dfareporting#metro", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metro".
+          "countryDartId": "A String", # DART ID of the country to which this metro region belongs.
+          "name": "A String", # Name of this metro region.
+          "countryCode": "A String", # Country code of the country to which this metro region belongs.
+          "metroCode": "A String", # Metro code of this metro region. This is equivalent to dma_id.
+          "dmaId": "A String", # DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
+          "dartId": "A String", # DART ID of this metro region.
+        },
+      ],
+    },
+    "creativeGroupAssignments": [ # Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.
+      { # Creative Group Assignment.
+        "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+        "creativeGroupId": "A String", # ID of the creative group to be assigned.
+      },
+    ],
+    "deliverySchedule": { # Delivery Schedule. # Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.
+      "priority": "A String", # Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.
+      "hardCutoff": True or False, # Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.
+      "frequencyCap": { # Frequency Cap. # Limit on the number of times an individual user can be served the ad within a specified period of time.
+        "duration": "A String", # Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days in seconds, or 7,776,000.
+        "impressions": "A String", # Number of times an individual user can be served the ad within the specified duration. The maximum allowed is 15.
+      },
+      "impressionRatio": "A String", # Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then DCM will serve ad B three times as often as ad A. Must be between 1 and 10.
+    },
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "eventTagOverrides": [ # Event tag overrides for this ad.
+      { # Event tag override information.
+        "enabled": True or False, # Whether this override is enabled.
+        "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+      },
+    ],
+    "id": "A String", # ID of this ad. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this ad. This is a read-only field that can be left blank.
+    "archived": True or False, # Whether this ad is archived.
+    "technologyTargeting": { # Technology Targeting. # Technology platform targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "platformTypes": [ # Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.
+        { # Contains information about a platform type that can be targeted by ads.
+          "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+          "id": "A String", # ID of this platform type.
+          "name": "A String", # Name of this platform type.
+        },
+      ],
+      "operatingSystemVersions": [ # Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.
+        { # Contains information about a particular version of an operating system that can be targeted by ads.
+          "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+          "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+          "name": "A String", # Name of this operating system version.
+          "id": "A String", # ID of this operating system version.
+          "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+            "mobile": True or False, # Whether this operating system is for mobile.
+            "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+            "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+            "name": "A String", # Name of this operating system.
+            "desktop": True or False, # Whether this operating system is for desktop.
+          },
+          "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+        },
+      ],
+      "browsers": [ # Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used.The other fields are populated automatically when the ad is inserted or updated.
+        { # Contains information about a browser that can be targeted by ads.
+          "majorVersion": "A String", # Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+          "kind": "dfareporting#browser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browser".
+          "name": "A String", # Name of this browser.
+          "browserVersionId": "A String", # ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
+          "dartId": "A String", # DART ID of this browser. This is the ID used when generating reports.
+          "minorVersion": "A String", # Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+        },
+      ],
+      "operatingSystems": [ # Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.
+        { # Contains information about an operating system that can be targeted by ads.
+          "mobile": True or False, # Whether this operating system is for mobile.
+          "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+          "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+          "name": "A String", # Name of this operating system.
+          "desktop": True or False, # Whether this operating system is for desktop.
+        },
+      ],
+      "mobileCarriers": [ # Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.
+        { # Contains information about a mobile carrier that can be targeted by ads.
+          "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+          "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+          "id": "A String", # ID of this mobile carrier.
+          "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+          "name": "A String", # Name of this mobile carrier.
+        },
+      ],
+      "connectionTypes": [ # Connection types that this ad targets. For each connection type only id is required.The other fields are populated automatically when the ad is inserted or updated.
+        { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+          "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+          "id": "A String", # ID of this connection type.
+          "name": "A String", # Name of this connection type.
+        },
+      ],
+    },
+    "creativeRotation": { # Creative Rotation. # Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment.
+      "creativeAssignments": [ # Creative assignments in this creative rotation.
+        { # Creative Assignment.
+          "weight": 42, # Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM.
+          "sequence": 42, # Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL.
+          "applyEventTags": True or False, # Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.
+          "richMediaExitOverrides": [ # Rich media exit overrides for this creative assignment.
+              # Applicable when the creative type is any of the following:
+              # - RICH_MEDIA_INPAGE
+              # - RICH_MEDIA_INPAGE_FLOATING
+              # - RICH_MEDIA_IM_EXPAND
+              # - RICH_MEDIA_EXPANDING
+              # - RICH_MEDIA_INTERSTITIAL_FLOAT
+              # - RICH_MEDIA_MOBILE_IN_APP
+              # - RICH_MEDIA_MULTI_FLOATING
+              # - RICH_MEDIA_PEEL_DOWN
+              # - ADVANCED_BANNER
+              # - VPAID_LINEAR
+              # - VPAID_NON_LINEAR
+            { # Rich Media Exit Override.
+              "customExitUrl": "A String", # Click-through URL to override the default exit URL. Applicable if the useCustomExitUrl field is set to true.
+              "useCustomExitUrl": True or False, # Whether to use the custom exit URL.
+              "exitId": "A String", # ID for the override to refer to a specific exit in the creative.
+            },
+          ],
+          "sslCompliant": True or False, # Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+          "creativeGroupAssignments": [ # Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.
+            { # Creative Group Assignment.
+              "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+              "creativeGroupId": "A String", # ID of the creative group to be assigned.
+            },
+          ],
+          "companionCreativeOverrides": [ # Companion creative overrides for this creative assignment. Applicable to video ads.
+            { # Companion Click-through override.
+              "clickThroughUrl": { # Click-through URL # Click-through URL of this companion click-through override.
+                "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                    # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                    # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                    # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+                "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+                "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+                "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+              },
+              "creativeId": "A String", # ID of the creative for this companion click-through override.
+            },
+          ],
+          "startTime": "A String", # Date and time that the assigned creative should start serving.
+          "clickThroughUrl": { # Click-through URL # Click-through URL of the creative assignment.
+            "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+            "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+            "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+            "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+          },
+          "active": True or False, # Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.
+          "creativeId": "A String", # ID of the creative to be assigned. This is a required field.
+          "endTime": "A String", # Date and time that the assigned creative should stop serving. Must be later than the start time.
+          "creativeIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the creative. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        },
+      ],
+      "weightCalculationStrategy": "A String", # Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.
+      "creativeOptimizationConfigurationId": "A String", # Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.
+      "type": "A String", # Type of creative rotation. Can be used to specify whether to use sequential or random rotation.
+    },
+    "clickThroughUrl": { # Click-through URL # Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER.
+      "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+          # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+          # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+          # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+      "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+      "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+      "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+    },
+    "comments": "A String", # Comments for this ad.
+    "remarketingListExpression": { # Remarketing List Targeting Expression. # Applicable when type is AD_SERVING_STANDARD_AD. Remarketing list targeting expression for this ad.
+      "expression": "A String", # Expression describing which lists are being targeted by the ad.
+    },
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this ad. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD.
+      "width": 42, # Width of this size.
+      "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+      "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+      "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+      "height": 42, # Height of this size.
+    },
+    "type": "A String", # Type of ad. This is a required field on insertion. Note that default ads (AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).
+    "sslRequired": True or False, # Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.
+    "audienceSegmentId": "A String", # Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+    "keyValueTargetingExpression": { # Key Value Targeting Expression. # Key-value targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "expression": "A String", # Keyword expression being targeted by the ad.
+    },
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Default click-through event tag properties for this ad.
+      "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+    },
+    "createInfo": { # Modification timestamp. # Information about the creation of this ad.This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "startTime": "A String", # Date and time that this ad should start serving. If creating an ad, this field must be a time in the future. This is a required field on insertion.
+    "active": True or False, # Whether this ad is active.
+    "compatibility": "A String", # Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.
+    "kind": "dfareporting#ad", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#ad".
+    "subaccountId": "A String", # Subaccount ID of this ad. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this ad. This is a required field and must be less than 256 characters long.
+    "dayPartTargeting": { # Day Part Targeting. # Time and day targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "userLocalTime": True or False, # Whether or not to use the user's local time. If false, the America/New York time zone applies.
+      "hoursOfDay": [ # Hours of the day when the ad will serve. Must be an integer between 0 and 23 (inclusive), where 0 is midnight to 1 AM, and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example, if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm.
+        42,
+      ],
+      "daysOfWeek": [ # Days of the week when the ad will serve.
+          #
+          # Acceptable values are:
+          # - "SUNDAY"
+          # - "MONDAY"
+          # - "TUESDAY"
+          # - "WEDNESDAY"
+          # - "THURSDAY"
+          # - "FRIDAY"
+          # - "SATURDAY"
+        "A String",
+      ],
+    },
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this ad. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "sslCompliant": True or False, # Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+    "placementAssignments": [ # Placement assignments for this ad.
+      { # Placement Assignment.
+        "active": True or False, # Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.
+        "placementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement. This is a read-only, auto-generated field.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "placementId": "A String", # ID of the placement to be assigned. This is a required field.
+        "sslRequired": True or False, # Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      },
+    ],
+    "endTime": "A String", # Date and time that this ad should stop serving. Must be later than the start time. This is a required field on insertion.
+    "dynamicClickTracker": True or False, # Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM ad.
+      "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.
+        "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+        "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+      },
+      "campaignId": "A String", # Campaign ID of this ad. This is a required field on insertion.
+      "advertiserId": "A String", # Advertiser ID of this ad. This is a required field on insertion.
+      "geoTargeting": { # Geographical Targeting. # Geographical targeting information for this ad.Applicable when type is AD_SERVING_STANDARD_AD.
+        "countries": [ # Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.
+          { # Contains information about a country that can be targeted by ads.
+            "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+            "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+            "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+            "countryCode": "A String", # Country code.
+            "name": "A String", # Name of this country.
+          },
+        ],
+        "excludeCountries": True or False, # Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.
+        "postalCodes": [ # Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.
+          { # Contains information about a postal code that can be targeted by ads.
+            "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+            "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+            "code": "A String", # Postal code. This is equivalent to the id field.
+            "id": "A String", # ID of this postal code.
+            "countryCode": "A String", # Country code of the country to which this postal code belongs.
+          },
+        ],
+        "regions": [ # Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.
+          { # Contains information about a region that can be targeted by ads.
+            "kind": "dfareporting#region", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#region".
+            "countryDartId": "A String", # DART ID of the country to which this region belongs.
+            "name": "A String", # Name of this region.
+            "countryCode": "A String", # Country code of the country to which this region belongs.
+            "regionCode": "A String", # Region code.
+            "dartId": "A String", # DART ID of this region.
+          },
+        ],
+        "cities": [ # Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.
+          { # Contains information about a city that can be targeted by ads.
+            "kind": "dfareporting#city", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#city".
+            "countryDartId": "A String", # DART ID of the country to which this city belongs.
+            "name": "A String", # Name of this city.
+            "countryCode": "A String", # Country code of the country to which this city belongs.
+            "metroCode": "A String", # Metro region code of the metro region (DMA) to which this city belongs.
+            "regionCode": "A String", # Region code of the region to which this city belongs.
+            "metroDmaId": "A String", # ID of the metro region (DMA) to which this city belongs.
+            "dartId": "A String", # DART ID of this city. This is the ID used for targeting and generating reports.
+            "regionDartId": "A String", # DART ID of the region to which this city belongs.
+          },
+        ],
+        "metros": [ # Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.
+          { # Contains information about a metro region that can be targeted by ads.
+            "kind": "dfareporting#metro", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metro".
+            "countryDartId": "A String", # DART ID of the country to which this metro region belongs.
+            "name": "A String", # Name of this metro region.
+            "countryCode": "A String", # Country code of the country to which this metro region belongs.
+            "metroCode": "A String", # Metro code of this metro region. This is equivalent to dma_id.
+            "dmaId": "A String", # DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
+            "dartId": "A String", # DART ID of this metro region.
+          },
+        ],
+      },
+      "creativeGroupAssignments": [ # Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.
+        { # Creative Group Assignment.
+          "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+          "creativeGroupId": "A String", # ID of the creative group to be assigned.
+        },
+      ],
+      "deliverySchedule": { # Delivery Schedule. # Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.
+        "priority": "A String", # Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.
+        "hardCutoff": True or False, # Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.
+        "frequencyCap": { # Frequency Cap. # Limit on the number of times an individual user can be served the ad within a specified period of time.
+          "duration": "A String", # Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days in seconds, or 7,776,000.
+          "impressions": "A String", # Number of times an individual user can be served the ad within the specified duration. The maximum allowed is 15.
+        },
+        "impressionRatio": "A String", # Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then DCM will serve ad B three times as often as ad A. Must be between 1 and 10.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "eventTagOverrides": [ # Event tag overrides for this ad.
+        { # Event tag override information.
+          "enabled": True or False, # Whether this override is enabled.
+          "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+        },
+      ],
+      "id": "A String", # ID of this ad. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this ad. This is a read-only field that can be left blank.
+      "archived": True or False, # Whether this ad is archived.
+      "technologyTargeting": { # Technology Targeting. # Technology platform targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "platformTypes": [ # Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about a platform type that can be targeted by ads.
+            "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+            "id": "A String", # ID of this platform type.
+            "name": "A String", # Name of this platform type.
+          },
+        ],
+        "operatingSystemVersions": [ # Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.
+          { # Contains information about a particular version of an operating system that can be targeted by ads.
+            "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+            "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+            "name": "A String", # Name of this operating system version.
+            "id": "A String", # ID of this operating system version.
+            "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+              "mobile": True or False, # Whether this operating system is for mobile.
+              "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+              "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+              "name": "A String", # Name of this operating system.
+              "desktop": True or False, # Whether this operating system is for desktop.
+            },
+            "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+          },
+        ],
+        "browsers": [ # Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used.The other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about a browser that can be targeted by ads.
+            "majorVersion": "A String", # Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+            "kind": "dfareporting#browser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browser".
+            "name": "A String", # Name of this browser.
+            "browserVersionId": "A String", # ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
+            "dartId": "A String", # DART ID of this browser. This is the ID used when generating reports.
+            "minorVersion": "A String", # Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+          },
+        ],
+        "operatingSystems": [ # Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.
+          { # Contains information about an operating system that can be targeted by ads.
+            "mobile": True or False, # Whether this operating system is for mobile.
+            "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+            "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+            "name": "A String", # Name of this operating system.
+            "desktop": True or False, # Whether this operating system is for desktop.
+          },
+        ],
+        "mobileCarriers": [ # Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.
+          { # Contains information about a mobile carrier that can be targeted by ads.
+            "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+            "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+            "id": "A String", # ID of this mobile carrier.
+            "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+            "name": "A String", # Name of this mobile carrier.
+          },
+        ],
+        "connectionTypes": [ # Connection types that this ad targets. For each connection type only id is required.The other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+            "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+            "id": "A String", # ID of this connection type.
+            "name": "A String", # Name of this connection type.
+          },
+        ],
+      },
+      "creativeRotation": { # Creative Rotation. # Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment.
+        "creativeAssignments": [ # Creative assignments in this creative rotation.
+          { # Creative Assignment.
+            "weight": 42, # Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM.
+            "sequence": 42, # Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL.
+            "applyEventTags": True or False, # Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.
+            "richMediaExitOverrides": [ # Rich media exit overrides for this creative assignment.
+                # Applicable when the creative type is any of the following:
+                # - RICH_MEDIA_INPAGE
+                # - RICH_MEDIA_INPAGE_FLOATING
+                # - RICH_MEDIA_IM_EXPAND
+                # - RICH_MEDIA_EXPANDING
+                # - RICH_MEDIA_INTERSTITIAL_FLOAT
+                # - RICH_MEDIA_MOBILE_IN_APP
+                # - RICH_MEDIA_MULTI_FLOATING
+                # - RICH_MEDIA_PEEL_DOWN
+                # - ADVANCED_BANNER
+                # - VPAID_LINEAR
+                # - VPAID_NON_LINEAR
+              { # Rich Media Exit Override.
+                "customExitUrl": "A String", # Click-through URL to override the default exit URL. Applicable if the useCustomExitUrl field is set to true.
+                "useCustomExitUrl": True or False, # Whether to use the custom exit URL.
+                "exitId": "A String", # ID for the override to refer to a specific exit in the creative.
+              },
+            ],
+            "sslCompliant": True or False, # Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+            "creativeGroupAssignments": [ # Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.
+              { # Creative Group Assignment.
+                "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+                "creativeGroupId": "A String", # ID of the creative group to be assigned.
+              },
+            ],
+            "companionCreativeOverrides": [ # Companion creative overrides for this creative assignment. Applicable to video ads.
+              { # Companion Click-through override.
+                "clickThroughUrl": { # Click-through URL # Click-through URL of this companion click-through override.
+                  "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                      # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                      # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                      # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+                  "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+                  "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+                  "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+                },
+                "creativeId": "A String", # ID of the creative for this companion click-through override.
+              },
+            ],
+            "startTime": "A String", # Date and time that the assigned creative should start serving.
+            "clickThroughUrl": { # Click-through URL # Click-through URL of the creative assignment.
+              "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                  # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                  # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                  # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+              "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+              "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+              "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+            },
+            "active": True or False, # Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.
+            "creativeId": "A String", # ID of the creative to be assigned. This is a required field.
+            "endTime": "A String", # Date and time that the assigned creative should stop serving. Must be later than the start time.
+            "creativeIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the creative. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          },
+        ],
+        "weightCalculationStrategy": "A String", # Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.
+        "creativeOptimizationConfigurationId": "A String", # Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.
+        "type": "A String", # Type of creative rotation. Can be used to specify whether to use sequential or random rotation.
+      },
+      "clickThroughUrl": { # Click-through URL # Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER.
+        "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+            # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+            # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+            # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+        "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+        "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+        "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+      },
+      "comments": "A String", # Comments for this ad.
+      "remarketingListExpression": { # Remarketing List Targeting Expression. # Applicable when type is AD_SERVING_STANDARD_AD. Remarketing list targeting expression for this ad.
+        "expression": "A String", # Expression describing which lists are being targeted by the ad.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this ad. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "type": "A String", # Type of ad. This is a required field on insertion. Note that default ads (AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).
+      "sslRequired": True or False, # Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      "audienceSegmentId": "A String", # Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "keyValueTargetingExpression": { # Key Value Targeting Expression. # Key-value targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "expression": "A String", # Keyword expression being targeted by the ad.
+      },
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Default click-through event tag properties for this ad.
+        "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+        "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+      },
+      "createInfo": { # Modification timestamp. # Information about the creation of this ad.This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "startTime": "A String", # Date and time that this ad should start serving. If creating an ad, this field must be a time in the future. This is a required field on insertion.
+      "active": True or False, # Whether this ad is active.
+      "compatibility": "A String", # Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.
+      "kind": "dfareporting#ad", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#ad".
+      "subaccountId": "A String", # Subaccount ID of this ad. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this ad. This is a required field and must be less than 256 characters long.
+      "dayPartTargeting": { # Day Part Targeting. # Time and day targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "userLocalTime": True or False, # Whether or not to use the user's local time. If false, the America/New York time zone applies.
+        "hoursOfDay": [ # Hours of the day when the ad will serve. Must be an integer between 0 and 23 (inclusive), where 0 is midnight to 1 AM, and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example, if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm.
+          42,
+        ],
+        "daysOfWeek": [ # Days of the week when the ad will serve.
+            #
+            # Acceptable values are:
+            # - "SUNDAY"
+            # - "MONDAY"
+            # - "TUESDAY"
+            # - "WEDNESDAY"
+            # - "THURSDAY"
+            # - "FRIDAY"
+            # - "SATURDAY"
+          "A String",
+        ],
+      },
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this ad. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "sslCompliant": True or False, # Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      "placementAssignments": [ # Placement assignments for this ad.
+        { # Placement Assignment.
+          "active": True or False, # Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.
+          "placementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "placementId": "A String", # ID of the placement to be assigned. This is a required field.
+          "sslRequired": True or False, # Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.
+        },
+      ],
+      "endTime": "A String", # Date and time that this ad should stop serving. Must be later than the start time. This is a required field on insertion.
+      "dynamicClickTracker": True or False, # Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing ad.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM ad.
+    "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.
+      "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+      "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+    },
+    "campaignId": "A String", # Campaign ID of this ad. This is a required field on insertion.
+    "advertiserId": "A String", # Advertiser ID of this ad. This is a required field on insertion.
+    "geoTargeting": { # Geographical Targeting. # Geographical targeting information for this ad.Applicable when type is AD_SERVING_STANDARD_AD.
+      "countries": [ # Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.
+        { # Contains information about a country that can be targeted by ads.
+          "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+          "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+          "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+          "countryCode": "A String", # Country code.
+          "name": "A String", # Name of this country.
+        },
+      ],
+      "excludeCountries": True or False, # Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.
+      "postalCodes": [ # Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.
+        { # Contains information about a postal code that can be targeted by ads.
+          "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+          "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+          "code": "A String", # Postal code. This is equivalent to the id field.
+          "id": "A String", # ID of this postal code.
+          "countryCode": "A String", # Country code of the country to which this postal code belongs.
+        },
+      ],
+      "regions": [ # Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.
+        { # Contains information about a region that can be targeted by ads.
+          "kind": "dfareporting#region", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#region".
+          "countryDartId": "A String", # DART ID of the country to which this region belongs.
+          "name": "A String", # Name of this region.
+          "countryCode": "A String", # Country code of the country to which this region belongs.
+          "regionCode": "A String", # Region code.
+          "dartId": "A String", # DART ID of this region.
+        },
+      ],
+      "cities": [ # Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.
+        { # Contains information about a city that can be targeted by ads.
+          "kind": "dfareporting#city", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#city".
+          "countryDartId": "A String", # DART ID of the country to which this city belongs.
+          "name": "A String", # Name of this city.
+          "countryCode": "A String", # Country code of the country to which this city belongs.
+          "metroCode": "A String", # Metro region code of the metro region (DMA) to which this city belongs.
+          "regionCode": "A String", # Region code of the region to which this city belongs.
+          "metroDmaId": "A String", # ID of the metro region (DMA) to which this city belongs.
+          "dartId": "A String", # DART ID of this city. This is the ID used for targeting and generating reports.
+          "regionDartId": "A String", # DART ID of the region to which this city belongs.
+        },
+      ],
+      "metros": [ # Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.
+        { # Contains information about a metro region that can be targeted by ads.
+          "kind": "dfareporting#metro", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metro".
+          "countryDartId": "A String", # DART ID of the country to which this metro region belongs.
+          "name": "A String", # Name of this metro region.
+          "countryCode": "A String", # Country code of the country to which this metro region belongs.
+          "metroCode": "A String", # Metro code of this metro region. This is equivalent to dma_id.
+          "dmaId": "A String", # DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
+          "dartId": "A String", # DART ID of this metro region.
+        },
+      ],
+    },
+    "creativeGroupAssignments": [ # Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.
+      { # Creative Group Assignment.
+        "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+        "creativeGroupId": "A String", # ID of the creative group to be assigned.
+      },
+    ],
+    "deliverySchedule": { # Delivery Schedule. # Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.
+      "priority": "A String", # Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.
+      "hardCutoff": True or False, # Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.
+      "frequencyCap": { # Frequency Cap. # Limit on the number of times an individual user can be served the ad within a specified period of time.
+        "duration": "A String", # Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days in seconds, or 7,776,000.
+        "impressions": "A String", # Number of times an individual user can be served the ad within the specified duration. The maximum allowed is 15.
+      },
+      "impressionRatio": "A String", # Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then DCM will serve ad B three times as often as ad A. Must be between 1 and 10.
+    },
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "eventTagOverrides": [ # Event tag overrides for this ad.
+      { # Event tag override information.
+        "enabled": True or False, # Whether this override is enabled.
+        "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+      },
+    ],
+    "id": "A String", # ID of this ad. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this ad. This is a read-only field that can be left blank.
+    "archived": True or False, # Whether this ad is archived.
+    "technologyTargeting": { # Technology Targeting. # Technology platform targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "platformTypes": [ # Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.
+        { # Contains information about a platform type that can be targeted by ads.
+          "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+          "id": "A String", # ID of this platform type.
+          "name": "A String", # Name of this platform type.
+        },
+      ],
+      "operatingSystemVersions": [ # Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.
+        { # Contains information about a particular version of an operating system that can be targeted by ads.
+          "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+          "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+          "name": "A String", # Name of this operating system version.
+          "id": "A String", # ID of this operating system version.
+          "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+            "mobile": True or False, # Whether this operating system is for mobile.
+            "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+            "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+            "name": "A String", # Name of this operating system.
+            "desktop": True or False, # Whether this operating system is for desktop.
+          },
+          "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+        },
+      ],
+      "browsers": [ # Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used.The other fields are populated automatically when the ad is inserted or updated.
+        { # Contains information about a browser that can be targeted by ads.
+          "majorVersion": "A String", # Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+          "kind": "dfareporting#browser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browser".
+          "name": "A String", # Name of this browser.
+          "browserVersionId": "A String", # ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
+          "dartId": "A String", # DART ID of this browser. This is the ID used when generating reports.
+          "minorVersion": "A String", # Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+        },
+      ],
+      "operatingSystems": [ # Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.
+        { # Contains information about an operating system that can be targeted by ads.
+          "mobile": True or False, # Whether this operating system is for mobile.
+          "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+          "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+          "name": "A String", # Name of this operating system.
+          "desktop": True or False, # Whether this operating system is for desktop.
+        },
+      ],
+      "mobileCarriers": [ # Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.
+        { # Contains information about a mobile carrier that can be targeted by ads.
+          "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+          "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+          "id": "A String", # ID of this mobile carrier.
+          "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+          "name": "A String", # Name of this mobile carrier.
+        },
+      ],
+      "connectionTypes": [ # Connection types that this ad targets. For each connection type only id is required.The other fields are populated automatically when the ad is inserted or updated.
+        { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+          "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+          "id": "A String", # ID of this connection type.
+          "name": "A String", # Name of this connection type.
+        },
+      ],
+    },
+    "creativeRotation": { # Creative Rotation. # Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment.
+      "creativeAssignments": [ # Creative assignments in this creative rotation.
+        { # Creative Assignment.
+          "weight": 42, # Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM.
+          "sequence": 42, # Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL.
+          "applyEventTags": True or False, # Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.
+          "richMediaExitOverrides": [ # Rich media exit overrides for this creative assignment.
+              # Applicable when the creative type is any of the following:
+              # - RICH_MEDIA_INPAGE
+              # - RICH_MEDIA_INPAGE_FLOATING
+              # - RICH_MEDIA_IM_EXPAND
+              # - RICH_MEDIA_EXPANDING
+              # - RICH_MEDIA_INTERSTITIAL_FLOAT
+              # - RICH_MEDIA_MOBILE_IN_APP
+              # - RICH_MEDIA_MULTI_FLOATING
+              # - RICH_MEDIA_PEEL_DOWN
+              # - ADVANCED_BANNER
+              # - VPAID_LINEAR
+              # - VPAID_NON_LINEAR
+            { # Rich Media Exit Override.
+              "customExitUrl": "A String", # Click-through URL to override the default exit URL. Applicable if the useCustomExitUrl field is set to true.
+              "useCustomExitUrl": True or False, # Whether to use the custom exit URL.
+              "exitId": "A String", # ID for the override to refer to a specific exit in the creative.
+            },
+          ],
+          "sslCompliant": True or False, # Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+          "creativeGroupAssignments": [ # Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.
+            { # Creative Group Assignment.
+              "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+              "creativeGroupId": "A String", # ID of the creative group to be assigned.
+            },
+          ],
+          "companionCreativeOverrides": [ # Companion creative overrides for this creative assignment. Applicable to video ads.
+            { # Companion Click-through override.
+              "clickThroughUrl": { # Click-through URL # Click-through URL of this companion click-through override.
+                "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                    # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                    # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                    # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+                "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+                "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+                "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+              },
+              "creativeId": "A String", # ID of the creative for this companion click-through override.
+            },
+          ],
+          "startTime": "A String", # Date and time that the assigned creative should start serving.
+          "clickThroughUrl": { # Click-through URL # Click-through URL of the creative assignment.
+            "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+            "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+            "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+            "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+          },
+          "active": True or False, # Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.
+          "creativeId": "A String", # ID of the creative to be assigned. This is a required field.
+          "endTime": "A String", # Date and time that the assigned creative should stop serving. Must be later than the start time.
+          "creativeIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the creative. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        },
+      ],
+      "weightCalculationStrategy": "A String", # Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.
+      "creativeOptimizationConfigurationId": "A String", # Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.
+      "type": "A String", # Type of creative rotation. Can be used to specify whether to use sequential or random rotation.
+    },
+    "clickThroughUrl": { # Click-through URL # Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER.
+      "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+          # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+          # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+          # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+      "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+      "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+      "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+    },
+    "comments": "A String", # Comments for this ad.
+    "remarketingListExpression": { # Remarketing List Targeting Expression. # Applicable when type is AD_SERVING_STANDARD_AD. Remarketing list targeting expression for this ad.
+      "expression": "A String", # Expression describing which lists are being targeted by the ad.
+    },
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this ad. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD.
+      "width": 42, # Width of this size.
+      "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+      "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+      "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+      "height": 42, # Height of this size.
+    },
+    "type": "A String", # Type of ad. This is a required field on insertion. Note that default ads (AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).
+    "sslRequired": True or False, # Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.
+    "audienceSegmentId": "A String", # Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+    "keyValueTargetingExpression": { # Key Value Targeting Expression. # Key-value targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "expression": "A String", # Keyword expression being targeted by the ad.
+    },
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Default click-through event tag properties for this ad.
+      "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+    },
+    "createInfo": { # Modification timestamp. # Information about the creation of this ad.This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "startTime": "A String", # Date and time that this ad should start serving. If creating an ad, this field must be a time in the future. This is a required field on insertion.
+    "active": True or False, # Whether this ad is active.
+    "compatibility": "A String", # Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.
+    "kind": "dfareporting#ad", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#ad".
+    "subaccountId": "A String", # Subaccount ID of this ad. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this ad. This is a required field and must be less than 256 characters long.
+    "dayPartTargeting": { # Day Part Targeting. # Time and day targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "userLocalTime": True or False, # Whether or not to use the user's local time. If false, the America/New York time zone applies.
+      "hoursOfDay": [ # Hours of the day when the ad will serve. Must be an integer between 0 and 23 (inclusive), where 0 is midnight to 1 AM, and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example, if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm.
+        42,
+      ],
+      "daysOfWeek": [ # Days of the week when the ad will serve.
+          #
+          # Acceptable values are:
+          # - "SUNDAY"
+          # - "MONDAY"
+          # - "TUESDAY"
+          # - "WEDNESDAY"
+          # - "THURSDAY"
+          # - "FRIDAY"
+          # - "SATURDAY"
+        "A String",
+      ],
+    },
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this ad. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "sslCompliant": True or False, # Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+    "placementAssignments": [ # Placement assignments for this ad.
+      { # Placement Assignment.
+        "active": True or False, # Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.
+        "placementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement. This is a read-only, auto-generated field.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "placementId": "A String", # ID of the placement to be assigned. This is a required field.
+        "sslRequired": True or False, # Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      },
+    ],
+    "endTime": "A String", # Date and time that this ad should stop serving. Must be later than the start time. This is a required field on insertion.
+    "dynamicClickTracker": True or False, # Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM ad.
+      "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix properties for this ad. Applies to the URL in the ad or (if overriding ad properties) the URL in the creative.
+        "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+        "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+      },
+      "campaignId": "A String", # Campaign ID of this ad. This is a required field on insertion.
+      "advertiserId": "A String", # Advertiser ID of this ad. This is a required field on insertion.
+      "geoTargeting": { # Geographical Targeting. # Geographical targeting information for this ad.Applicable when type is AD_SERVING_STANDARD_AD.
+        "countries": [ # Countries to be targeted or excluded from targeting, depending on the setting of the excludeCountries field. For each country only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting or excluding a country, do not target regions, cities, metros, or postal codes in the same country.
+          { # Contains information about a country that can be targeted by ads.
+            "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+            "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+            "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+            "countryCode": "A String", # Country code.
+            "name": "A String", # Name of this country.
+          },
+        ],
+        "excludeCountries": True or False, # Whether or not to exclude the countries in the countries field from targeting. If false, the countries field refers to countries which will be targeted by the ad.
+        "postalCodes": [ # Postal codes to be targeted. For each postal code only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a postal code, do not target or exclude the country of the postal code.
+          { # Contains information about a postal code that can be targeted by ads.
+            "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+            "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+            "code": "A String", # Postal code. This is equivalent to the id field.
+            "id": "A String", # ID of this postal code.
+            "countryCode": "A String", # Country code of the country to which this postal code belongs.
+          },
+        ],
+        "regions": [ # Regions to be targeted. For each region only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a region, do not target or exclude the country of the region.
+          { # Contains information about a region that can be targeted by ads.
+            "kind": "dfareporting#region", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#region".
+            "countryDartId": "A String", # DART ID of the country to which this region belongs.
+            "name": "A String", # Name of this region.
+            "countryCode": "A String", # Country code of the country to which this region belongs.
+            "regionCode": "A String", # Region code.
+            "dartId": "A String", # DART ID of this region.
+          },
+        ],
+        "cities": [ # Cities to be targeted. For each city only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a city, do not target or exclude the country of the city, and do not target the metro or region of the city.
+          { # Contains information about a city that can be targeted by ads.
+            "kind": "dfareporting#city", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#city".
+            "countryDartId": "A String", # DART ID of the country to which this city belongs.
+            "name": "A String", # Name of this city.
+            "countryCode": "A String", # Country code of the country to which this city belongs.
+            "metroCode": "A String", # Metro region code of the metro region (DMA) to which this city belongs.
+            "regionCode": "A String", # Region code of the region to which this city belongs.
+            "metroDmaId": "A String", # ID of the metro region (DMA) to which this city belongs.
+            "dartId": "A String", # DART ID of this city. This is the ID used for targeting and generating reports.
+            "regionDartId": "A String", # DART ID of the region to which this city belongs.
+          },
+        ],
+        "metros": [ # Metros to be targeted. For each metro only dmaId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting a metro, do not target or exclude the country of the metro.
+          { # Contains information about a metro region that can be targeted by ads.
+            "kind": "dfareporting#metro", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metro".
+            "countryDartId": "A String", # DART ID of the country to which this metro region belongs.
+            "name": "A String", # Name of this metro region.
+            "countryCode": "A String", # Country code of the country to which this metro region belongs.
+            "metroCode": "A String", # Metro code of this metro region. This is equivalent to dma_id.
+            "dmaId": "A String", # DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
+            "dartId": "A String", # DART ID of this metro region.
+          },
+        ],
+      },
+      "creativeGroupAssignments": [ # Creative group assignments for this ad. Applicable when type is AD_SERVING_CLICK_TRACKER. Only one assignment per creative group number is allowed for a maximum of two assignments.
+        { # Creative Group Assignment.
+          "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+          "creativeGroupId": "A String", # ID of the creative group to be assigned.
+        },
+      ],
+      "deliverySchedule": { # Delivery Schedule. # Delivery schedule information for this ad. Applicable when type is AD_SERVING_STANDARD_AD or AD_SERVING_TRACKING. This field along with subfields priority and impressionRatio are required on insertion when type is AD_SERVING_STANDARD_AD.
+        "priority": "A String", # Serving priority of an ad, with respect to other ads. The lower the priority number, the greater the priority with which it is served.
+        "hardCutoff": True or False, # Whether or not hard cutoff is enabled. If true, the ad will not serve after the end date and time. Otherwise the ad will continue to be served until it has reached its delivery goals.
+        "frequencyCap": { # Frequency Cap. # Limit on the number of times an individual user can be served the ad within a specified period of time.
+          "duration": "A String", # Duration of time, in seconds, for this frequency cap. The maximum duration is 90 days in seconds, or 7,776,000.
+          "impressions": "A String", # Number of times an individual user can be served the ad within the specified duration. The maximum allowed is 15.
+        },
+        "impressionRatio": "A String", # Impression ratio for this ad. This ratio determines how often each ad is served relative to the others. For example, if ad A has an impression ratio of 1 and ad B has an impression ratio of 3, then DCM will serve ad B three times as often as ad A. Must be between 1 and 10.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "eventTagOverrides": [ # Event tag overrides for this ad.
+        { # Event tag override information.
+          "enabled": True or False, # Whether this override is enabled.
+          "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+        },
+      ],
+      "id": "A String", # ID of this ad. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this ad. This is a read-only field that can be left blank.
+      "archived": True or False, # Whether this ad is archived.
+      "technologyTargeting": { # Technology Targeting. # Technology platform targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "platformTypes": [ # Platform types that this ad targets. For example, desktop, mobile, or tablet. For each platform type, only id is required, and the other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about a platform type that can be targeted by ads.
+            "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+            "id": "A String", # ID of this platform type.
+            "name": "A String", # Name of this platform type.
+          },
+        ],
+        "operatingSystemVersions": [ # Operating system versions that this ad targets. To target all versions, use operatingSystems. For each operating system version, only id is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system version, do not set targeting for the corresponding operating system in operatingSystems.
+          { # Contains information about a particular version of an operating system that can be targeted by ads.
+            "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+            "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+            "name": "A String", # Name of this operating system version.
+            "id": "A String", # ID of this operating system version.
+            "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+              "mobile": True or False, # Whether this operating system is for mobile.
+              "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+              "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+              "name": "A String", # Name of this operating system.
+              "desktop": True or False, # Whether this operating system is for desktop.
+            },
+            "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+          },
+        ],
+        "browsers": [ # Browsers that this ad targets. For each browser either set browserVersionId or dartId along with the version numbers. If both are specified, only browserVersionId will be used.The other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about a browser that can be targeted by ads.
+            "majorVersion": "A String", # Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+            "kind": "dfareporting#browser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browser".
+            "name": "A String", # Name of this browser.
+            "browserVersionId": "A String", # ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
+            "dartId": "A String", # DART ID of this browser. This is the ID used when generating reports.
+            "minorVersion": "A String", # Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+          },
+        ],
+        "operatingSystems": [ # Operating systems that this ad targets. To target specific versions, use operatingSystemVersions. For each operating system only dartId is required. The other fields are populated automatically when the ad is inserted or updated. If targeting an operating system, do not set targeting for operating system versions for the same operating system.
+          { # Contains information about an operating system that can be targeted by ads.
+            "mobile": True or False, # Whether this operating system is for mobile.
+            "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+            "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+            "name": "A String", # Name of this operating system.
+            "desktop": True or False, # Whether this operating system is for desktop.
+          },
+        ],
+        "mobileCarriers": [ # Mobile carriers that this ad targets. For each mobile carrier only id is required, and the other fields are populated automatically when the ad is inserted or updated. If targeting a mobile carrier, do not set targeting for any zip codes.
+          { # Contains information about a mobile carrier that can be targeted by ads.
+            "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+            "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+            "id": "A String", # ID of this mobile carrier.
+            "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+            "name": "A String", # Name of this mobile carrier.
+          },
+        ],
+        "connectionTypes": [ # Connection types that this ad targets. For each connection type only id is required.The other fields are populated automatically when the ad is inserted or updated.
+          { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+            "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+            "id": "A String", # ID of this connection type.
+            "name": "A String", # Name of this connection type.
+          },
+        ],
+      },
+      "creativeRotation": { # Creative Rotation. # Creative rotation for this ad. Applicable when type is AD_SERVING_DEFAULT_AD, AD_SERVING_STANDARD_AD, or AD_SERVING_TRACKING. When type is AD_SERVING_DEFAULT_AD, this field should have exactly one creativeAssignment.
+        "creativeAssignments": [ # Creative assignments in this creative rotation.
+          { # Creative Assignment.
+            "weight": 42, # Weight of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_RANDOM.
+            "sequence": 42, # Sequence number of the creative assignment, applicable when the rotation type is CREATIVE_ROTATION_TYPE_SEQUENTIAL.
+            "applyEventTags": True or False, # Whether applicable event tags should fire when this creative assignment is rendered. If this value is unset when the ad is inserted or updated, it will default to true for all creative types EXCEPT for INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO.
+            "richMediaExitOverrides": [ # Rich media exit overrides for this creative assignment.
+                # Applicable when the creative type is any of the following:
+                # - RICH_MEDIA_INPAGE
+                # - RICH_MEDIA_INPAGE_FLOATING
+                # - RICH_MEDIA_IM_EXPAND
+                # - RICH_MEDIA_EXPANDING
+                # - RICH_MEDIA_INTERSTITIAL_FLOAT
+                # - RICH_MEDIA_MOBILE_IN_APP
+                # - RICH_MEDIA_MULTI_FLOATING
+                # - RICH_MEDIA_PEEL_DOWN
+                # - ADVANCED_BANNER
+                # - VPAID_LINEAR
+                # - VPAID_NON_LINEAR
+              { # Rich Media Exit Override.
+                "customExitUrl": "A String", # Click-through URL to override the default exit URL. Applicable if the useCustomExitUrl field is set to true.
+                "useCustomExitUrl": True or False, # Whether to use the custom exit URL.
+                "exitId": "A String", # ID for the override to refer to a specific exit in the creative.
+              },
+            ],
+            "sslCompliant": True or False, # Whether the creative to be assigned is SSL-compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+            "creativeGroupAssignments": [ # Creative group assignments for this creative assignment. Only one assignment per creative group number is allowed for a maximum of two assignments.
+              { # Creative Group Assignment.
+                "creativeGroupNumber": "A String", # Creative group number of the creative group assignment.
+                "creativeGroupId": "A String", # ID of the creative group to be assigned.
+              },
+            ],
+            "companionCreativeOverrides": [ # Companion creative overrides for this creative assignment. Applicable to video ads.
+              { # Companion Click-through override.
+                "clickThroughUrl": { # Click-through URL # Click-through URL of this companion click-through override.
+                  "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                      # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                      # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                      # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+                  "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+                  "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+                  "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+                },
+                "creativeId": "A String", # ID of the creative for this companion click-through override.
+              },
+            ],
+            "startTime": "A String", # Date and time that the assigned creative should start serving.
+            "clickThroughUrl": { # Click-through URL # Click-through URL of the creative assignment.
+              "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+                  # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+                  # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+                  # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+              "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+              "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+              "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+            },
+            "active": True or False, # Whether this creative assignment is active. When true, the creative will be included in the ad's rotation.
+            "creativeId": "A String", # ID of the creative to be assigned. This is a required field.
+            "endTime": "A String", # Date and time that the assigned creative should stop serving. Must be later than the start time.
+            "creativeIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the creative. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          },
+        ],
+        "weightCalculationStrategy": "A String", # Strategy for calculating weights. Used with CREATIVE_ROTATION_TYPE_RANDOM.
+        "creativeOptimizationConfigurationId": "A String", # Creative optimization configuration that is used by this ad. It should refer to one of the existing optimization configurations in the ad's campaign. If it is unset or set to 0, then the campaign's default optimization configuration will be used for this ad.
+        "type": "A String", # Type of creative rotation. Can be used to specify whether to use sequential or random rotation.
+      },
+      "clickThroughUrl": { # Click-through URL # Click-through URL for this ad. This is a required field on insertion. Applicable when type is AD_SERVING_CLICK_TRACKER.
+        "computedClickThroughUrl": "A String", # Read-only convenience field representing the actual URL that will be used for this click-through. The URL is computed as follows:
+            # - If defaultLandingPage is enabled then the campaign's default landing page URL is assigned to this field.
+            # - If defaultLandingPage is not enabled and a landingPageId is specified then that landing page's URL is assigned to this field.
+            # - If neither of the above cases apply, then the customClickThroughUrl is assigned to this field.
+        "customClickThroughUrl": "A String", # Custom click-through URL. Applicable if the defaultLandingPage field is set to false and the landingPageId field is left unset.
+        "landingPageId": "A String", # ID of the landing page for the click-through URL. Applicable if the defaultLandingPage field is set to false.
+        "defaultLandingPage": True or False, # Whether the campaign default landing page is used.
+      },
+      "comments": "A String", # Comments for this ad.
+      "remarketingListExpression": { # Remarketing List Targeting Expression. # Applicable when type is AD_SERVING_STANDARD_AD. Remarketing list targeting expression for this ad.
+        "expression": "A String", # Expression describing which lists are being targeted by the ad.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this ad. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of this ad. Applicable when type is AD_SERVING_DEFAULT_AD.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "type": "A String", # Type of ad. This is a required field on insertion. Note that default ads (AD_SERVING_DEFAULT_AD) cannot be created directly (see Creative resource).
+      "sslRequired": True or False, # Whether this ad requires ssl. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      "audienceSegmentId": "A String", # Audience segment ID that is being targeted for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+      "keyValueTargetingExpression": { # Key Value Targeting Expression. # Key-value targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "expression": "A String", # Keyword expression being targeted by the ad.
+      },
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Default click-through event tag properties for this ad.
+        "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+        "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+      },
+      "createInfo": { # Modification timestamp. # Information about the creation of this ad.This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "startTime": "A String", # Date and time that this ad should start serving. If creating an ad, this field must be a time in the future. This is a required field on insertion.
+      "active": True or False, # Whether this ad is active.
+      "compatibility": "A String", # Compatibility of this ad. Applicable when type is AD_SERVING_DEFAULT_AD. DISPLAY and DISPLAY_INTERSTITIAL refer to either rendering on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL are only used for existing default ads. New mobile placements must be assigned DISPLAY or DISPLAY_INTERSTITIAL and default ads created for those placements will be limited to those compatibility types. IN_STREAM_VIDEO refers to rendering in-stream video ads developed with the VAST standard.
+      "kind": "dfareporting#ad", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#ad".
+      "subaccountId": "A String", # Subaccount ID of this ad. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this ad. This is a required field and must be less than 256 characters long.
+      "dayPartTargeting": { # Day Part Targeting. # Time and day targeting information for this ad. Applicable when type is AD_SERVING_STANDARD_AD.
+        "userLocalTime": True or False, # Whether or not to use the user's local time. If false, the America/New York time zone applies.
+        "hoursOfDay": [ # Hours of the day when the ad will serve. Must be an integer between 0 and 23 (inclusive), where 0 is midnight to 1 AM, and 23 is 11 PM to midnight. Can be specified with days of week, in which case the ad would serve during these hours on the specified days. For example, if Monday, Wednesday, Friday are the days of week specified and 9-10am, 3-5pm (hours 9, 15, and 16) is specified, the ad would serve Monday, Wednesdays, and Fridays at 9-10am and 3-5pm.
+          42,
+        ],
+        "daysOfWeek": [ # Days of the week when the ad will serve.
+            #
+            # Acceptable values are:
+            # - "SUNDAY"
+            # - "MONDAY"
+            # - "TUESDAY"
+            # - "WEDNESDAY"
+            # - "THURSDAY"
+            # - "FRIDAY"
+            # - "SATURDAY"
+          "A String",
+        ],
+      },
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this ad. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "sslCompliant": True or False, # Whether this ad is ssl compliant. This is a read-only field that is auto-generated when the ad is inserted or updated.
+      "placementAssignments": [ # Placement assignments for this ad.
+        { # Placement Assignment.
+          "active": True or False, # Whether this placement assignment is active. When true, the placement will be included in the ad's rotation.
+          "placementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "placementId": "A String", # ID of the placement to be assigned. This is a required field.
+          "sslRequired": True or False, # Whether the placement to be assigned requires SSL. This is a read-only field that is auto-generated when the ad is inserted or updated.
+        },
+      ],
+      "endTime": "A String", # Date and time that this ad should stop serving. Must be later than the start time. This is a required field on insertion.
+      "dynamicClickTracker": True or False, # Whether this ad is a dynamic click tracker. Applicable when type is AD_SERVING_CLICK_TRACKER. This is a required field on insert, and is read-only after insert.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.advertiserGroups.html b/docs/dyn/dfareporting_v2_5.advertiserGroups.html
new file mode 100644
index 0000000..9fc9363
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.advertiserGroups.html
@@ -0,0 +1,263 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.advertiserGroups.html">advertiserGroups</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, id)</a></code></p>
+<p class="firstline">Deletes an existing advertiser group.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one advertiser group by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new advertiser group.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of advertiser groups, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing advertiser group. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing advertiser group.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, id)</code>
+  <pre>Deletes an existing advertiser group.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Advertiser group ID. (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one advertiser group by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Advertiser group ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Groups advertisers together so that reports can be generated for the entire group at once.
+      "kind": "dfareporting#advertiserGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiserGroup".
+      "id": "A String", # ID of this advertiser group. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.
+      "accountId": "A String", # Account ID of this advertiser group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new advertiser group.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Groups advertisers together so that reports can be generated for the entire group at once.
+    "kind": "dfareporting#advertiserGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiserGroup".
+    "id": "A String", # ID of this advertiser group. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.
+    "accountId": "A String", # Account ID of this advertiser group. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Groups advertisers together so that reports can be generated for the entire group at once.
+      "kind": "dfareporting#advertiserGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiserGroup".
+      "id": "A String", # ID of this advertiser group. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.
+      "accountId": "A String", # Account ID of this advertiser group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</code>
+  <pre>Retrieves a list of advertiser groups, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "advertiser*2015" will return objects with names like "advertiser group June 2015", "advertiser group April 2015", or simply "advertiser group 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "advertisergroup" will match objects with name "my advertisergroup", "advertisergroup 2015", or simply "advertisergroup".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only advertiser groups with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Advertiser Group List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#advertiserGroupsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiserGroupsListResponse".
+    "advertiserGroups": [ # Advertiser group collection.
+      { # Groups advertisers together so that reports can be generated for the entire group at once.
+          "kind": "dfareporting#advertiserGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiserGroup".
+          "id": "A String", # ID of this advertiser group. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.
+          "accountId": "A String", # Account ID of this advertiser group. This is a read-only field that can be left blank.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing advertiser group. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Advertiser group ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Groups advertisers together so that reports can be generated for the entire group at once.
+    "kind": "dfareporting#advertiserGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiserGroup".
+    "id": "A String", # ID of this advertiser group. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.
+    "accountId": "A String", # Account ID of this advertiser group. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Groups advertisers together so that reports can be generated for the entire group at once.
+      "kind": "dfareporting#advertiserGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiserGroup".
+      "id": "A String", # ID of this advertiser group. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.
+      "accountId": "A String", # Account ID of this advertiser group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing advertiser group.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Groups advertisers together so that reports can be generated for the entire group at once.
+    "kind": "dfareporting#advertiserGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiserGroup".
+    "id": "A String", # ID of this advertiser group. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.
+    "accountId": "A String", # Account ID of this advertiser group. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Groups advertisers together so that reports can be generated for the entire group at once.
+      "kind": "dfareporting#advertiserGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiserGroup".
+      "id": "A String", # ID of this advertiser group. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this advertiser group. This is a required field and must be less than 256 characters long and unique among advertiser groups of the same account.
+      "accountId": "A String", # Account ID of this advertiser group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.advertisers.html b/docs/dyn/dfareporting_v2_5.advertisers.html
new file mode 100644
index 0000000..6c569f6
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.advertisers.html
@@ -0,0 +1,475 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.advertisers.html">advertisers</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one advertiser by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new advertiser.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, includeAdvertisersWithoutGroupsOnly=None, onlyParent=None, pageToken=None, sortOrder=None, status=None, maxResults=None, advertiserGroupIds=None, searchString=None, subaccountId=None, ids=None, floodlightConfigurationIds=None, sortField=None)</a></code></p>
+<p class="firstline">Retrieves a list of advertisers, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing advertiser. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing advertiser.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one advertiser by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Advertiser ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM advertiser.
+      "status": "A String", # Status of this advertiser.
+      "kind": "dfareporting#advertiser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiser".
+      "subaccountId": "A String", # Subaccount ID of this advertiser.This is a read-only field that can be left blank.
+      "name": "A String", # Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.
+      "originalFloodlightConfigurationId": "A String", # Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.
+      "clickThroughUrlSuffix": "A String", # Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as:
+          # - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups.
+          # - This advertiser's original floodlight configuration is not already shared with another advertiser.
+      "suspended": True or False, # Suspension status of this advertiser.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserGroupId": "A String", # ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "defaultEmail": "A String", # Default email address used in sender field for tag emails.
+      "id": "A String", # ID of this advertiser. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this advertiser.This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new advertiser.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM advertiser.
+    "status": "A String", # Status of this advertiser.
+    "kind": "dfareporting#advertiser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiser".
+    "subaccountId": "A String", # Subaccount ID of this advertiser.This is a read-only field that can be left blank.
+    "name": "A String", # Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.
+    "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.
+    "originalFloodlightConfigurationId": "A String", # Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.
+    "clickThroughUrlSuffix": "A String", # Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.
+    "floodlightConfigurationId": "A String", # Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as:
+        # - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups.
+        # - This advertiser's original floodlight configuration is not already shared with another advertiser.
+    "suspended": True or False, # Suspension status of this advertiser.
+    "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserGroupId": "A String", # ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "defaultEmail": "A String", # Default email address used in sender field for tag emails.
+    "id": "A String", # ID of this advertiser. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this advertiser.This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM advertiser.
+      "status": "A String", # Status of this advertiser.
+      "kind": "dfareporting#advertiser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiser".
+      "subaccountId": "A String", # Subaccount ID of this advertiser.This is a read-only field that can be left blank.
+      "name": "A String", # Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.
+      "originalFloodlightConfigurationId": "A String", # Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.
+      "clickThroughUrlSuffix": "A String", # Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as:
+          # - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups.
+          # - This advertiser's original floodlight configuration is not already shared with another advertiser.
+      "suspended": True or False, # Suspension status of this advertiser.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserGroupId": "A String", # ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "defaultEmail": "A String", # Default email address used in sender field for tag emails.
+      "id": "A String", # ID of this advertiser. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this advertiser.This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, includeAdvertisersWithoutGroupsOnly=None, onlyParent=None, pageToken=None, sortOrder=None, status=None, maxResults=None, advertiserGroupIds=None, searchString=None, subaccountId=None, ids=None, floodlightConfigurationIds=None, sortField=None)</code>
+  <pre>Retrieves a list of advertisers, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  includeAdvertisersWithoutGroupsOnly: boolean, Select only advertisers which do not belong to any advertiser group.
+  onlyParent: boolean, Select only advertisers which use another advertiser's floodlight configuration.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  status: string, Select only advertisers with the specified status.
+    Allowed values
+      APPROVED - 
+      ON_HOLD - 
+  maxResults: integer, Maximum number of results to return.
+  advertiserGroupIds: string, Select only advertisers with these advertiser group IDs. (repeated)
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "advertiser*2015" will return objects with names like "advertiser June 2015", "advertiser April 2015", or simply "advertiser 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "advertiser" will match objects with name "my advertiser", "advertiser 2015", or simply "advertiser".
+  subaccountId: string, Select only advertisers with these subaccount IDs.
+  ids: string, Select only advertisers with these IDs. (repeated)
+  floodlightConfigurationIds: string, Select only advertisers with these floodlight configuration IDs. (repeated)
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+
+Returns:
+  An object of the form:
+
+    { # Advertiser List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "advertisers": [ # Advertiser collection.
+      { # Contains properties of a DCM advertiser.
+          "status": "A String", # Status of this advertiser.
+          "kind": "dfareporting#advertiser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiser".
+          "subaccountId": "A String", # Subaccount ID of this advertiser.This is a read-only field that can be left blank.
+          "name": "A String", # Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.
+          "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.
+          "originalFloodlightConfigurationId": "A String", # Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.
+          "clickThroughUrlSuffix": "A String", # Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.
+          "floodlightConfigurationId": "A String", # Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as:
+              # - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups.
+              # - This advertiser's original floodlight configuration is not already shared with another advertiser.
+          "suspended": True or False, # Suspension status of this advertiser.
+          "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "advertiserGroupId": "A String", # ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "defaultEmail": "A String", # Default email address used in sender field for tag emails.
+          "id": "A String", # ID of this advertiser. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this advertiser.This is a read-only field that can be left blank.
+        },
+    ],
+    "kind": "dfareporting#advertisersListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertisersListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing advertiser. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Advertiser ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM advertiser.
+    "status": "A String", # Status of this advertiser.
+    "kind": "dfareporting#advertiser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiser".
+    "subaccountId": "A String", # Subaccount ID of this advertiser.This is a read-only field that can be left blank.
+    "name": "A String", # Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.
+    "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.
+    "originalFloodlightConfigurationId": "A String", # Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.
+    "clickThroughUrlSuffix": "A String", # Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.
+    "floodlightConfigurationId": "A String", # Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as:
+        # - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups.
+        # - This advertiser's original floodlight configuration is not already shared with another advertiser.
+    "suspended": True or False, # Suspension status of this advertiser.
+    "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserGroupId": "A String", # ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "defaultEmail": "A String", # Default email address used in sender field for tag emails.
+    "id": "A String", # ID of this advertiser. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this advertiser.This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM advertiser.
+      "status": "A String", # Status of this advertiser.
+      "kind": "dfareporting#advertiser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiser".
+      "subaccountId": "A String", # Subaccount ID of this advertiser.This is a read-only field that can be left blank.
+      "name": "A String", # Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.
+      "originalFloodlightConfigurationId": "A String", # Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.
+      "clickThroughUrlSuffix": "A String", # Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as:
+          # - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups.
+          # - This advertiser's original floodlight configuration is not already shared with another advertiser.
+      "suspended": True or False, # Suspension status of this advertiser.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserGroupId": "A String", # ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "defaultEmail": "A String", # Default email address used in sender field for tag emails.
+      "id": "A String", # ID of this advertiser. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this advertiser.This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing advertiser.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM advertiser.
+    "status": "A String", # Status of this advertiser.
+    "kind": "dfareporting#advertiser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiser".
+    "subaccountId": "A String", # Subaccount ID of this advertiser.This is a read-only field that can be left blank.
+    "name": "A String", # Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.
+    "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.
+    "originalFloodlightConfigurationId": "A String", # Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.
+    "clickThroughUrlSuffix": "A String", # Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.
+    "floodlightConfigurationId": "A String", # Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as:
+        # - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups.
+        # - This advertiser's original floodlight configuration is not already shared with another advertiser.
+    "suspended": True or False, # Suspension status of this advertiser.
+    "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserGroupId": "A String", # ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "defaultEmail": "A String", # Default email address used in sender field for tag emails.
+    "id": "A String", # ID of this advertiser. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this advertiser.This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM advertiser.
+      "status": "A String", # Status of this advertiser.
+      "kind": "dfareporting#advertiser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#advertiser".
+      "subaccountId": "A String", # Subaccount ID of this advertiser.This is a read-only field that can be left blank.
+      "name": "A String", # Name of this advertiser. This is a required field and must be less than 256 characters long and unique among advertisers of the same account.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply by default to the landing pages of this advertiser's campaigns.
+      "originalFloodlightConfigurationId": "A String", # Original floodlight configuration before any sharing occurred. Set the floodlightConfigurationId of this advertiser to originalFloodlightConfigurationId to unshare the advertiser's current floodlight configuration. You cannot unshare an advertiser's floodlight configuration if the shared configuration has activities associated with any campaign or placement.
+      "clickThroughUrlSuffix": "A String", # Suffix added to click-through URL of ad creative associations under this advertiser. Must be less than 129 characters long.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this advertiser. The floodlight configuration ID will be created automatically, so on insert this field should be left blank. This field can be set to another advertiser's floodlight configuration ID in order to share that advertiser's floodlight configuration with this advertiser, so long as:
+          # - This advertiser's original floodlight configuration is not already associated with floodlight activities or floodlight activity groups.
+          # - This advertiser's original floodlight configuration is not already shared with another advertiser.
+      "suspended": True or False, # Suspension status of this advertiser.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserGroupId": "A String", # ID of the advertiser group this advertiser belongs to. You can group advertisers for reporting purposes, allowing you to see aggregated information for all advertisers in each group.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "defaultEmail": "A String", # Default email address used in sender field for tag emails.
+      "id": "A String", # ID of this advertiser. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this advertiser.This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.browsers.html b/docs/dyn/dfareporting_v2_5.browsers.html
new file mode 100644
index 0000000..3bb6a35
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.browsers.html
@@ -0,0 +1,106 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.browsers.html">browsers</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of browsers.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of browsers.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Browser List Response
+    "kind": "dfareporting#browsersListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browsersListResponse".
+    "browsers": [ # Browser collection.
+      { # Contains information about a browser that can be targeted by ads.
+        "majorVersion": "A String", # Major version number (leftmost number) of this browser. For example, for Chrome 5.0.376.86 beta, this field should be set to 5. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+        "kind": "dfareporting#browser", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#browser".
+        "name": "A String", # Name of this browser.
+        "browserVersionId": "A String", # ID referring to this grouping of browser and version numbers. This is the ID used for targeting.
+        "dartId": "A String", # DART ID of this browser. This is the ID used when generating reports.
+        "minorVersion": "A String", # Minor version number (number after first dot on left) of this browser. For example, for Chrome 5.0.375.86 beta, this field should be set to 0. An asterisk (*) may be used to target any version number, and a question mark (?) may be used to target cases where the version number cannot be identified. For example, Chrome *.* targets any version of Chrome: 1.2, 2.5, 3.5, and so on. Chrome 3.* targets Chrome 3.1, 3.5, but not 4.0. Firefox ?.? targets cases where the ad server knows the browser is Firefox but can't tell which version it is.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.campaignCreativeAssociations.html b/docs/dyn/dfareporting_v2_5.campaignCreativeAssociations.html
new file mode 100644
index 0000000..f2b20e2
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.campaignCreativeAssociations.html
@@ -0,0 +1,155 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.campaignCreativeAssociations.html">campaignCreativeAssociations</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, campaignId, body)</a></code></p>
+<p class="firstline">Associates a creative with the specified campaign. This method creates a default ad with dimensions matching the creative in the campaign if such a default ad does not exist already.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, campaignId, maxResults=None, pageToken=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves the list of creative IDs associated with the specified campaign.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="insert">insert(profileId, campaignId, body)</code>
+  <pre>Associates a creative with the specified campaign. This method creates a default ad with dimensions matching the creative in the campaign if such a default ad does not exist already.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Campaign ID in this association. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Identifies a creative which has been associated with a given campaign.
+    "creativeId": "A String", # ID of the creative associated with the campaign. This is a required field.
+    "kind": "dfareporting#campaignCreativeAssociation", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaignCreativeAssociation".
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Identifies a creative which has been associated with a given campaign.
+      "creativeId": "A String", # ID of the creative associated with the campaign. This is a required field.
+      "kind": "dfareporting#campaignCreativeAssociation", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaignCreativeAssociation".
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, campaignId, maxResults=None, pageToken=None, sortOrder=None)</code>
+  <pre>Retrieves the list of creative IDs associated with the specified campaign.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Campaign ID in this association. (required)
+  maxResults: integer, Maximum number of results to return.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Campaign Creative Association List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "campaignCreativeAssociations": [ # Campaign creative association collection
+      { # Identifies a creative which has been associated with a given campaign.
+          "creativeId": "A String", # ID of the creative associated with the campaign. This is a required field.
+          "kind": "dfareporting#campaignCreativeAssociation", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaignCreativeAssociation".
+        },
+    ],
+    "kind": "dfareporting#campaignCreativeAssociationsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaignCreativeAssociationsListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.campaigns.html b/docs/dyn/dfareporting_v2_5.campaigns.html
new file mode 100644
index 0000000..84fa83d
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.campaigns.html
@@ -0,0 +1,1139 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.campaigns.html">campaigns</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one campaign by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, defaultLandingPageName, defaultLandingPageUrl, body)</a></code></p>
+<p class="firstline">Inserts a new campaign.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, overriddenEventTagId=None, archived=None, advertiserIds=None, pageToken=None, sortOrder=None, maxResults=None, excludedIds=None, advertiserGroupIds=None, searchString=None, subaccountId=None, ids=None, sortField=None, atLeastOneOptimizationActivity=None)</a></code></p>
+<p class="firstline">Retrieves a list of campaigns, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing campaign. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing campaign.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one campaign by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Campaign ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM campaign.
+      "comment": "A String", # Arbitrary comments about this campaign. Must be less than 256 characters long.
+      "startDate": "A String", # Date on which the campaign starts running. The start date can be any date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This is a required field.
+      "endDate": "A String", # Date on which the campaign will stop running. On insert, the end date must be today or a future date. The end date must be later than or be the same as the start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective campaign run date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This is a required field.
+      "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix override properties for this campaign.
+        "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+        "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+      },
+      "advertiserId": "A String", # Advertiser ID of this campaign. This is a required field.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "eventTagOverrides": [ # Overrides that can be used to activate or deactivate advertiser event tags.
+        { # Event tag override information.
+          "enabled": True or False, # Whether this override is enabled.
+          "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+        },
+      ],
+      "creativeOptimizationConfiguration": { # Creative optimization settings. # Creative optimization configuration for the campaign.
+        "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+          { # Creative optimization activity.
+            "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+            "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+            "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+          },
+        ],
+        "optimizationModel": "A String", # Optimization model for this configuration.
+        "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+        "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+      },
+      "id": "A String", # ID of this campaign. This is a read-only auto-generated field.
+      "accountId": "A String", # Account ID of this campaign. This is a read-only field that can be left blank.
+      "traffickerEmails": [ # Campaign trafficker contact emails.
+        "A String",
+      ],
+      "archived": True or False, # Whether this campaign has been archived.
+      "externalId": "A String", # External ID for this campaign.
+      "advertiserGroupId": "A String", # Advertiser group ID of the associated advertiser.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "billingInvoiceCode": "A String", # Billing invoice code included in the DCM client billing invoices associated with the campaign.
+      "comscoreVceEnabled": True or False, # Whether comScore vCE reports are enabled for this campaign.
+      "creativeGroupIds": [ # List of creative group IDs that are assigned to the campaign.
+        "A String",
+      ],
+      "additionalCreativeOptimizationConfigurations": [ # Additional creative optimization configurations for the campaign.
+        { # Creative optimization settings.
+          "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+            { # Creative optimization activity.
+              "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+              "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+              "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+            },
+          ],
+          "optimizationModel": "A String", # Optimization model for this configuration.
+          "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+          "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+        },
+      ],
+      "createInfo": { # Modification timestamp. # Information about the creation of this campaign. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Click-through event tag ID override properties for this campaign.
+        "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+        "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+      },
+      "kind": "dfareporting#campaign", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaign".
+      "subaccountId": "A String", # Subaccount ID of this campaign. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for the campaign.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "nielsenOcrEnabled": True or False, # Whether Nielsen reports are enabled for this campaign.
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this campaign. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "audienceSegmentGroups": [ # Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.
+        { # Audience Segment Group.
+          "audienceSegments": [ # Audience segments assigned to this group. The number of segments must be between 2 and 100.
+            { # Audience Segment.
+              "allocation": 42, # Weight allocated to this segment. Must be between 1 and 1000. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group.
+              "id": "A String", # ID of this audience segment. This is a read-only, auto-generated field.
+              "name": "A String", # Name of this audience segment. This is a required field and must be less than 65 characters long.
+            },
+          ],
+          "id": "A String", # ID of this audience segment group. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this audience segment group. This is a required field and must be less than 65 characters long.
+        },
+      ],
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, defaultLandingPageName, defaultLandingPageUrl, body)</code>
+  <pre>Inserts a new campaign.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  defaultLandingPageName: string, Default landing page name for this new campaign. Must be less than 256 characters long. (required)
+  defaultLandingPageUrl: string, Default landing page URL for this new campaign. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM campaign.
+    "comment": "A String", # Arbitrary comments about this campaign. Must be less than 256 characters long.
+    "startDate": "A String", # Date on which the campaign starts running. The start date can be any date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This is a required field.
+    "endDate": "A String", # Date on which the campaign will stop running. On insert, the end date must be today or a future date. The end date must be later than or be the same as the start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective campaign run date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This is a required field.
+    "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix override properties for this campaign.
+      "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+      "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+    },
+    "advertiserId": "A String", # Advertiser ID of this campaign. This is a required field.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "eventTagOverrides": [ # Overrides that can be used to activate or deactivate advertiser event tags.
+      { # Event tag override information.
+        "enabled": True or False, # Whether this override is enabled.
+        "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+      },
+    ],
+    "creativeOptimizationConfiguration": { # Creative optimization settings. # Creative optimization configuration for the campaign.
+      "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+        { # Creative optimization activity.
+          "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+          "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+        },
+      ],
+      "optimizationModel": "A String", # Optimization model for this configuration.
+      "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+      "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+    },
+    "id": "A String", # ID of this campaign. This is a read-only auto-generated field.
+    "accountId": "A String", # Account ID of this campaign. This is a read-only field that can be left blank.
+    "traffickerEmails": [ # Campaign trafficker contact emails.
+      "A String",
+    ],
+    "archived": True or False, # Whether this campaign has been archived.
+    "externalId": "A String", # External ID for this campaign.
+    "advertiserGroupId": "A String", # Advertiser group ID of the associated advertiser.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "billingInvoiceCode": "A String", # Billing invoice code included in the DCM client billing invoices associated with the campaign.
+    "comscoreVceEnabled": True or False, # Whether comScore vCE reports are enabled for this campaign.
+    "creativeGroupIds": [ # List of creative group IDs that are assigned to the campaign.
+      "A String",
+    ],
+    "additionalCreativeOptimizationConfigurations": [ # Additional creative optimization configurations for the campaign.
+      { # Creative optimization settings.
+        "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+          { # Creative optimization activity.
+            "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+            "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+            "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+          },
+        ],
+        "optimizationModel": "A String", # Optimization model for this configuration.
+        "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+        "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+      },
+    ],
+    "createInfo": { # Modification timestamp. # Information about the creation of this campaign. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Click-through event tag ID override properties for this campaign.
+      "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+    },
+    "kind": "dfareporting#campaign", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaign".
+    "subaccountId": "A String", # Subaccount ID of this campaign. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.
+    "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for the campaign.
+      "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+    },
+    "nielsenOcrEnabled": True or False, # Whether Nielsen reports are enabled for this campaign.
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this campaign. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "audienceSegmentGroups": [ # Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.
+      { # Audience Segment Group.
+        "audienceSegments": [ # Audience segments assigned to this group. The number of segments must be between 2 and 100.
+          { # Audience Segment.
+            "allocation": 42, # Weight allocated to this segment. Must be between 1 and 1000. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group.
+            "id": "A String", # ID of this audience segment. This is a read-only, auto-generated field.
+            "name": "A String", # Name of this audience segment. This is a required field and must be less than 65 characters long.
+          },
+        ],
+        "id": "A String", # ID of this audience segment group. This is a read-only, auto-generated field.
+        "name": "A String", # Name of this audience segment group. This is a required field and must be less than 65 characters long.
+      },
+    ],
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM campaign.
+      "comment": "A String", # Arbitrary comments about this campaign. Must be less than 256 characters long.
+      "startDate": "A String", # Date on which the campaign starts running. The start date can be any date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This is a required field.
+      "endDate": "A String", # Date on which the campaign will stop running. On insert, the end date must be today or a future date. The end date must be later than or be the same as the start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective campaign run date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This is a required field.
+      "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix override properties for this campaign.
+        "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+        "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+      },
+      "advertiserId": "A String", # Advertiser ID of this campaign. This is a required field.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "eventTagOverrides": [ # Overrides that can be used to activate or deactivate advertiser event tags.
+        { # Event tag override information.
+          "enabled": True or False, # Whether this override is enabled.
+          "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+        },
+      ],
+      "creativeOptimizationConfiguration": { # Creative optimization settings. # Creative optimization configuration for the campaign.
+        "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+          { # Creative optimization activity.
+            "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+            "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+            "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+          },
+        ],
+        "optimizationModel": "A String", # Optimization model for this configuration.
+        "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+        "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+      },
+      "id": "A String", # ID of this campaign. This is a read-only auto-generated field.
+      "accountId": "A String", # Account ID of this campaign. This is a read-only field that can be left blank.
+      "traffickerEmails": [ # Campaign trafficker contact emails.
+        "A String",
+      ],
+      "archived": True or False, # Whether this campaign has been archived.
+      "externalId": "A String", # External ID for this campaign.
+      "advertiserGroupId": "A String", # Advertiser group ID of the associated advertiser.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "billingInvoiceCode": "A String", # Billing invoice code included in the DCM client billing invoices associated with the campaign.
+      "comscoreVceEnabled": True or False, # Whether comScore vCE reports are enabled for this campaign.
+      "creativeGroupIds": [ # List of creative group IDs that are assigned to the campaign.
+        "A String",
+      ],
+      "additionalCreativeOptimizationConfigurations": [ # Additional creative optimization configurations for the campaign.
+        { # Creative optimization settings.
+          "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+            { # Creative optimization activity.
+              "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+              "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+              "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+            },
+          ],
+          "optimizationModel": "A String", # Optimization model for this configuration.
+          "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+          "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+        },
+      ],
+      "createInfo": { # Modification timestamp. # Information about the creation of this campaign. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Click-through event tag ID override properties for this campaign.
+        "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+        "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+      },
+      "kind": "dfareporting#campaign", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaign".
+      "subaccountId": "A String", # Subaccount ID of this campaign. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for the campaign.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "nielsenOcrEnabled": True or False, # Whether Nielsen reports are enabled for this campaign.
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this campaign. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "audienceSegmentGroups": [ # Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.
+        { # Audience Segment Group.
+          "audienceSegments": [ # Audience segments assigned to this group. The number of segments must be between 2 and 100.
+            { # Audience Segment.
+              "allocation": 42, # Weight allocated to this segment. Must be between 1 and 1000. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group.
+              "id": "A String", # ID of this audience segment. This is a read-only, auto-generated field.
+              "name": "A String", # Name of this audience segment. This is a required field and must be less than 65 characters long.
+            },
+          ],
+          "id": "A String", # ID of this audience segment group. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this audience segment group. This is a required field and must be less than 65 characters long.
+        },
+      ],
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, overriddenEventTagId=None, archived=None, advertiserIds=None, pageToken=None, sortOrder=None, maxResults=None, excludedIds=None, advertiserGroupIds=None, searchString=None, subaccountId=None, ids=None, sortField=None, atLeastOneOptimizationActivity=None)</code>
+  <pre>Retrieves a list of campaigns, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  overriddenEventTagId: string, Select only campaigns that have overridden this event tag ID.
+  archived: boolean, Select only archived campaigns. Don't set this field to select both archived and non-archived campaigns.
+  advertiserIds: string, Select only campaigns that belong to these advertisers. (repeated)
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  maxResults: integer, Maximum number of results to return.
+  excludedIds: string, Exclude campaigns with these IDs. (repeated)
+  advertiserGroupIds: string, Select only campaigns whose advertisers belong to these advertiser groups. (repeated)
+  searchString: string, Allows searching for campaigns by name or ID. Wildcards (*) are allowed. For example, "campaign*2015" will return campaigns with names like "campaign June 2015", "campaign April 2015", or simply "campaign 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "campaign" will match campaigns with name "my campaign", "campaign 2015", or simply "campaign".
+  subaccountId: string, Select only campaigns that belong to this subaccount.
+  ids: string, Select only campaigns with these IDs. (repeated)
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  atLeastOneOptimizationActivity: boolean, Select only campaigns that have at least one optimization activity.
+
+Returns:
+  An object of the form:
+
+    { # Campaign List Response
+    "campaigns": [ # Campaign collection.
+      { # Contains properties of a DCM campaign.
+          "comment": "A String", # Arbitrary comments about this campaign. Must be less than 256 characters long.
+          "startDate": "A String", # Date on which the campaign starts running. The start date can be any date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This is a required field.
+          "endDate": "A String", # Date on which the campaign will stop running. On insert, the end date must be today or a future date. The end date must be later than or be the same as the start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective campaign run date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This is a required field.
+          "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix override properties for this campaign.
+            "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+            "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+          },
+          "advertiserId": "A String", # Advertiser ID of this campaign. This is a required field.
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "eventTagOverrides": [ # Overrides that can be used to activate or deactivate advertiser event tags.
+            { # Event tag override information.
+              "enabled": True or False, # Whether this override is enabled.
+              "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+            },
+          ],
+          "creativeOptimizationConfiguration": { # Creative optimization settings. # Creative optimization configuration for the campaign.
+            "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+              { # Creative optimization activity.
+                "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+                "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+                  "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                  "value": "A String", # The value of the dimension.
+                  "dimensionName": "A String", # The name of the dimension.
+                  "etag": "A String", # The eTag of this response for caching purposes.
+                  "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                  "id": "A String", # The ID associated with the value if available.
+                },
+                "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+              },
+            ],
+            "optimizationModel": "A String", # Optimization model for this configuration.
+            "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+            "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+          },
+          "id": "A String", # ID of this campaign. This is a read-only auto-generated field.
+          "accountId": "A String", # Account ID of this campaign. This is a read-only field that can be left blank.
+          "traffickerEmails": [ # Campaign trafficker contact emails.
+            "A String",
+          ],
+          "archived": True or False, # Whether this campaign has been archived.
+          "externalId": "A String", # External ID for this campaign.
+          "advertiserGroupId": "A String", # Advertiser group ID of the associated advertiser.
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this campaign. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "billingInvoiceCode": "A String", # Billing invoice code included in the DCM client billing invoices associated with the campaign.
+          "comscoreVceEnabled": True or False, # Whether comScore vCE reports are enabled for this campaign.
+          "creativeGroupIds": [ # List of creative group IDs that are assigned to the campaign.
+            "A String",
+          ],
+          "additionalCreativeOptimizationConfigurations": [ # Additional creative optimization configurations for the campaign.
+            { # Creative optimization settings.
+              "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+                { # Creative optimization activity.
+                  "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+                  "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+                    "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                    "value": "A String", # The value of the dimension.
+                    "dimensionName": "A String", # The name of the dimension.
+                    "etag": "A String", # The eTag of this response for caching purposes.
+                    "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                    "id": "A String", # The ID associated with the value if available.
+                  },
+                  "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+                },
+              ],
+              "optimizationModel": "A String", # Optimization model for this configuration.
+              "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+              "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+            },
+          ],
+          "createInfo": { # Modification timestamp. # Information about the creation of this campaign. This is a read-only field.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Click-through event tag ID override properties for this campaign.
+            "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+            "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+          },
+          "kind": "dfareporting#campaign", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaign".
+          "subaccountId": "A String", # Subaccount ID of this campaign. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.
+          "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for the campaign.
+            "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+            "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          },
+          "nielsenOcrEnabled": True or False, # Whether Nielsen reports are enabled for this campaign.
+          "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this campaign. This is a read-only field.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "audienceSegmentGroups": [ # Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.
+            { # Audience Segment Group.
+              "audienceSegments": [ # Audience segments assigned to this group. The number of segments must be between 2 and 100.
+                { # Audience Segment.
+                  "allocation": 42, # Weight allocated to this segment. Must be between 1 and 1000. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group.
+                  "id": "A String", # ID of this audience segment. This is a read-only, auto-generated field.
+                  "name": "A String", # Name of this audience segment. This is a required field and must be less than 65 characters long.
+                },
+              ],
+              "id": "A String", # ID of this audience segment group. This is a read-only, auto-generated field.
+              "name": "A String", # Name of this audience segment group. This is a required field and must be less than 65 characters long.
+            },
+          ],
+        },
+    ],
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#campaignsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaignsListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing campaign. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Campaign ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM campaign.
+    "comment": "A String", # Arbitrary comments about this campaign. Must be less than 256 characters long.
+    "startDate": "A String", # Date on which the campaign starts running. The start date can be any date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This is a required field.
+    "endDate": "A String", # Date on which the campaign will stop running. On insert, the end date must be today or a future date. The end date must be later than or be the same as the start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective campaign run date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This is a required field.
+    "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix override properties for this campaign.
+      "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+      "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+    },
+    "advertiserId": "A String", # Advertiser ID of this campaign. This is a required field.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "eventTagOverrides": [ # Overrides that can be used to activate or deactivate advertiser event tags.
+      { # Event tag override information.
+        "enabled": True or False, # Whether this override is enabled.
+        "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+      },
+    ],
+    "creativeOptimizationConfiguration": { # Creative optimization settings. # Creative optimization configuration for the campaign.
+      "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+        { # Creative optimization activity.
+          "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+          "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+        },
+      ],
+      "optimizationModel": "A String", # Optimization model for this configuration.
+      "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+      "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+    },
+    "id": "A String", # ID of this campaign. This is a read-only auto-generated field.
+    "accountId": "A String", # Account ID of this campaign. This is a read-only field that can be left blank.
+    "traffickerEmails": [ # Campaign trafficker contact emails.
+      "A String",
+    ],
+    "archived": True or False, # Whether this campaign has been archived.
+    "externalId": "A String", # External ID for this campaign.
+    "advertiserGroupId": "A String", # Advertiser group ID of the associated advertiser.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "billingInvoiceCode": "A String", # Billing invoice code included in the DCM client billing invoices associated with the campaign.
+    "comscoreVceEnabled": True or False, # Whether comScore vCE reports are enabled for this campaign.
+    "creativeGroupIds": [ # List of creative group IDs that are assigned to the campaign.
+      "A String",
+    ],
+    "additionalCreativeOptimizationConfigurations": [ # Additional creative optimization configurations for the campaign.
+      { # Creative optimization settings.
+        "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+          { # Creative optimization activity.
+            "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+            "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+            "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+          },
+        ],
+        "optimizationModel": "A String", # Optimization model for this configuration.
+        "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+        "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+      },
+    ],
+    "createInfo": { # Modification timestamp. # Information about the creation of this campaign. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Click-through event tag ID override properties for this campaign.
+      "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+    },
+    "kind": "dfareporting#campaign", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaign".
+    "subaccountId": "A String", # Subaccount ID of this campaign. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.
+    "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for the campaign.
+      "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+    },
+    "nielsenOcrEnabled": True or False, # Whether Nielsen reports are enabled for this campaign.
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this campaign. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "audienceSegmentGroups": [ # Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.
+      { # Audience Segment Group.
+        "audienceSegments": [ # Audience segments assigned to this group. The number of segments must be between 2 and 100.
+          { # Audience Segment.
+            "allocation": 42, # Weight allocated to this segment. Must be between 1 and 1000. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group.
+            "id": "A String", # ID of this audience segment. This is a read-only, auto-generated field.
+            "name": "A String", # Name of this audience segment. This is a required field and must be less than 65 characters long.
+          },
+        ],
+        "id": "A String", # ID of this audience segment group. This is a read-only, auto-generated field.
+        "name": "A String", # Name of this audience segment group. This is a required field and must be less than 65 characters long.
+      },
+    ],
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM campaign.
+      "comment": "A String", # Arbitrary comments about this campaign. Must be less than 256 characters long.
+      "startDate": "A String", # Date on which the campaign starts running. The start date can be any date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This is a required field.
+      "endDate": "A String", # Date on which the campaign will stop running. On insert, the end date must be today or a future date. The end date must be later than or be the same as the start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective campaign run date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This is a required field.
+      "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix override properties for this campaign.
+        "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+        "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+      },
+      "advertiserId": "A String", # Advertiser ID of this campaign. This is a required field.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "eventTagOverrides": [ # Overrides that can be used to activate or deactivate advertiser event tags.
+        { # Event tag override information.
+          "enabled": True or False, # Whether this override is enabled.
+          "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+        },
+      ],
+      "creativeOptimizationConfiguration": { # Creative optimization settings. # Creative optimization configuration for the campaign.
+        "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+          { # Creative optimization activity.
+            "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+            "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+            "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+          },
+        ],
+        "optimizationModel": "A String", # Optimization model for this configuration.
+        "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+        "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+      },
+      "id": "A String", # ID of this campaign. This is a read-only auto-generated field.
+      "accountId": "A String", # Account ID of this campaign. This is a read-only field that can be left blank.
+      "traffickerEmails": [ # Campaign trafficker contact emails.
+        "A String",
+      ],
+      "archived": True or False, # Whether this campaign has been archived.
+      "externalId": "A String", # External ID for this campaign.
+      "advertiserGroupId": "A String", # Advertiser group ID of the associated advertiser.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "billingInvoiceCode": "A String", # Billing invoice code included in the DCM client billing invoices associated with the campaign.
+      "comscoreVceEnabled": True or False, # Whether comScore vCE reports are enabled for this campaign.
+      "creativeGroupIds": [ # List of creative group IDs that are assigned to the campaign.
+        "A String",
+      ],
+      "additionalCreativeOptimizationConfigurations": [ # Additional creative optimization configurations for the campaign.
+        { # Creative optimization settings.
+          "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+            { # Creative optimization activity.
+              "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+              "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+              "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+            },
+          ],
+          "optimizationModel": "A String", # Optimization model for this configuration.
+          "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+          "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+        },
+      ],
+      "createInfo": { # Modification timestamp. # Information about the creation of this campaign. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Click-through event tag ID override properties for this campaign.
+        "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+        "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+      },
+      "kind": "dfareporting#campaign", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaign".
+      "subaccountId": "A String", # Subaccount ID of this campaign. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for the campaign.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "nielsenOcrEnabled": True or False, # Whether Nielsen reports are enabled for this campaign.
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this campaign. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "audienceSegmentGroups": [ # Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.
+        { # Audience Segment Group.
+          "audienceSegments": [ # Audience segments assigned to this group. The number of segments must be between 2 and 100.
+            { # Audience Segment.
+              "allocation": 42, # Weight allocated to this segment. Must be between 1 and 1000. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group.
+              "id": "A String", # ID of this audience segment. This is a read-only, auto-generated field.
+              "name": "A String", # Name of this audience segment. This is a required field and must be less than 65 characters long.
+            },
+          ],
+          "id": "A String", # ID of this audience segment group. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this audience segment group. This is a required field and must be less than 65 characters long.
+        },
+      ],
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing campaign.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM campaign.
+    "comment": "A String", # Arbitrary comments about this campaign. Must be less than 256 characters long.
+    "startDate": "A String", # Date on which the campaign starts running. The start date can be any date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This is a required field.
+    "endDate": "A String", # Date on which the campaign will stop running. On insert, the end date must be today or a future date. The end date must be later than or be the same as the start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective campaign run date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This is a required field.
+    "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix override properties for this campaign.
+      "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+      "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+    },
+    "advertiserId": "A String", # Advertiser ID of this campaign. This is a required field.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "eventTagOverrides": [ # Overrides that can be used to activate or deactivate advertiser event tags.
+      { # Event tag override information.
+        "enabled": True or False, # Whether this override is enabled.
+        "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+      },
+    ],
+    "creativeOptimizationConfiguration": { # Creative optimization settings. # Creative optimization configuration for the campaign.
+      "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+        { # Creative optimization activity.
+          "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+          "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+        },
+      ],
+      "optimizationModel": "A String", # Optimization model for this configuration.
+      "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+      "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+    },
+    "id": "A String", # ID of this campaign. This is a read-only auto-generated field.
+    "accountId": "A String", # Account ID of this campaign. This is a read-only field that can be left blank.
+    "traffickerEmails": [ # Campaign trafficker contact emails.
+      "A String",
+    ],
+    "archived": True or False, # Whether this campaign has been archived.
+    "externalId": "A String", # External ID for this campaign.
+    "advertiserGroupId": "A String", # Advertiser group ID of the associated advertiser.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "billingInvoiceCode": "A String", # Billing invoice code included in the DCM client billing invoices associated with the campaign.
+    "comscoreVceEnabled": True or False, # Whether comScore vCE reports are enabled for this campaign.
+    "creativeGroupIds": [ # List of creative group IDs that are assigned to the campaign.
+      "A String",
+    ],
+    "additionalCreativeOptimizationConfigurations": [ # Additional creative optimization configurations for the campaign.
+      { # Creative optimization settings.
+        "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+          { # Creative optimization activity.
+            "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+            "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+            "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+          },
+        ],
+        "optimizationModel": "A String", # Optimization model for this configuration.
+        "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+        "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+      },
+    ],
+    "createInfo": { # Modification timestamp. # Information about the creation of this campaign. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Click-through event tag ID override properties for this campaign.
+      "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+      "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+    },
+    "kind": "dfareporting#campaign", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaign".
+    "subaccountId": "A String", # Subaccount ID of this campaign. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.
+    "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for the campaign.
+      "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+    },
+    "nielsenOcrEnabled": True or False, # Whether Nielsen reports are enabled for this campaign.
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this campaign. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "audienceSegmentGroups": [ # Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.
+      { # Audience Segment Group.
+        "audienceSegments": [ # Audience segments assigned to this group. The number of segments must be between 2 and 100.
+          { # Audience Segment.
+            "allocation": 42, # Weight allocated to this segment. Must be between 1 and 1000. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group.
+            "id": "A String", # ID of this audience segment. This is a read-only, auto-generated field.
+            "name": "A String", # Name of this audience segment. This is a required field and must be less than 65 characters long.
+          },
+        ],
+        "id": "A String", # ID of this audience segment group. This is a read-only, auto-generated field.
+        "name": "A String", # Name of this audience segment group. This is a required field and must be less than 65 characters long.
+      },
+    ],
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM campaign.
+      "comment": "A String", # Arbitrary comments about this campaign. Must be less than 256 characters long.
+      "startDate": "A String", # Date on which the campaign starts running. The start date can be any date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This is a required field.
+      "endDate": "A String", # Date on which the campaign will stop running. On insert, the end date must be today or a future date. The end date must be later than or be the same as the start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective campaign run date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This is a required field.
+      "clickThroughUrlSuffixProperties": { # Click Through URL Suffix settings. # Click-through URL suffix override properties for this campaign.
+        "clickThroughUrlSuffix": "A String", # Click-through URL suffix to apply to all ads in this entity's scope. Must be less than 128 characters long.
+        "overrideInheritedSuffix": True or False, # Whether this entity should override the inherited click-through URL suffix with its own defined value.
+      },
+      "advertiserId": "A String", # Advertiser ID of this campaign. This is a required field.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the advertiser ID of this campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "eventTagOverrides": [ # Overrides that can be used to activate or deactivate advertiser event tags.
+        { # Event tag override information.
+          "enabled": True or False, # Whether this override is enabled.
+          "id": "A String", # ID of this event tag override. This is a read-only, auto-generated field.
+        },
+      ],
+      "creativeOptimizationConfiguration": { # Creative optimization settings. # Creative optimization configuration for the campaign.
+        "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+          { # Creative optimization activity.
+            "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+            "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+            "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+          },
+        ],
+        "optimizationModel": "A String", # Optimization model for this configuration.
+        "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+        "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+      },
+      "id": "A String", # ID of this campaign. This is a read-only auto-generated field.
+      "accountId": "A String", # Account ID of this campaign. This is a read-only field that can be left blank.
+      "traffickerEmails": [ # Campaign trafficker contact emails.
+        "A String",
+      ],
+      "archived": True or False, # Whether this campaign has been archived.
+      "externalId": "A String", # External ID for this campaign.
+      "advertiserGroupId": "A String", # Advertiser group ID of the associated advertiser.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "billingInvoiceCode": "A String", # Billing invoice code included in the DCM client billing invoices associated with the campaign.
+      "comscoreVceEnabled": True or False, # Whether comScore vCE reports are enabled for this campaign.
+      "creativeGroupIds": [ # List of creative group IDs that are assigned to the campaign.
+        "A String",
+      ],
+      "additionalCreativeOptimizationConfigurations": [ # Additional creative optimization configurations for the campaign.
+        { # Creative optimization settings.
+          "optimizationActivitys": [ # List of optimization activities associated with this configuration.
+            { # Creative optimization activity.
+              "floodlightActivityId": "A String", # Floodlight activity ID of this optimization activity. This is a required field.
+              "floodlightActivityIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight activity. This is a read-only, auto-generated field.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+              "weight": 42, # Weight associated with this optimization. Must be greater than 1. The weight assigned will be understood in proportion to the weights assigned to the other optimization activities.
+            },
+          ],
+          "optimizationModel": "A String", # Optimization model for this configuration.
+          "id": "A String", # ID of this creative optimization config. This field is auto-generated when the campaign is inserted or updated. It can be null for existing campaigns.
+          "name": "A String", # Name of this creative optimization config. This is a required field and must be less than 129 characters long.
+        },
+      ],
+      "createInfo": { # Modification timestamp. # Information about the creation of this campaign. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "defaultClickThroughEventTagProperties": { # Properties of inheriting and overriding the default click-through event tag. A campaign may override the event tag defined at the advertiser level, and an ad may also override the campaign's setting further. # Click-through event tag ID override properties for this campaign.
+        "overrideInheritedEventTag": True or False, # Whether this entity should override the inherited default click-through event tag with its own defined value.
+        "defaultClickThroughEventTagId": "A String", # ID of the click-through event tag to apply to all ads in this entity's scope.
+      },
+      "kind": "dfareporting#campaign", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#campaign".
+      "subaccountId": "A String", # Subaccount ID of this campaign. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this campaign. This is a required field and must be less than 256 characters long and unique among campaigns of the same advertiser.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for the campaign.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "nielsenOcrEnabled": True or False, # Whether Nielsen reports are enabled for this campaign.
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this campaign. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "audienceSegmentGroups": [ # Audience segment groups assigned to this campaign. Cannot have more than 300 segment groups.
+        { # Audience Segment Group.
+          "audienceSegments": [ # Audience segments assigned to this group. The number of segments must be between 2 and 100.
+            { # Audience Segment.
+              "allocation": 42, # Weight allocated to this segment. Must be between 1 and 1000. The weight assigned will be understood in proportion to the weights assigned to other segments in the same segment group.
+              "id": "A String", # ID of this audience segment. This is a read-only, auto-generated field.
+              "name": "A String", # Name of this audience segment. This is a required field and must be less than 65 characters long.
+            },
+          ],
+          "id": "A String", # ID of this audience segment group. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this audience segment group. This is a required field and must be less than 65 characters long.
+        },
+      ],
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.changeLogs.html b/docs/dyn/dfareporting_v2_5.changeLogs.html
new file mode 100644
index 0000000..0380f2c
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.changeLogs.html
@@ -0,0 +1,230 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.changeLogs.html">changeLogs</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one change log by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, objectType=None, maxChangeTime=None, pageToken=None, maxResults=None, action=None, minChangeTime=None, searchString=None, userProfileIds=None, ids=None, objectIds=None)</a></code></p>
+<p class="firstline">Retrieves a list of change logs.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one change log by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Change log ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Describes a change that a user has made to a resource.
+    "changeTime": "A String", # Time when the object was modified.
+    "kind": "dfareporting#changeLog", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#changeLog".
+    "subaccountId": "A String", # Subaccount ID of the modified object.
+    "userProfileId": "A String", # ID of the user who modified the object.
+    "objectId": "A String", # ID of the object of this change log. The object could be a campaign, placement, ad, or other type.
+    "newValue": "A String", # New value of the object field.
+    "userProfileName": "A String", # User profile name of the user who modified the object.
+    "fieldName": "A String", # Field name of the object which changed.
+    "oldValue": "A String", # Old value of the object field.
+    "action": "A String", # Action which caused the change.
+    "transactionId": "A String", # Transaction ID of this change log. When a single API call results in many changes, each change will have a separate ID in the change log but will share the same transactionId.
+    "objectType": "A String", # Object type of the change log.
+    "id": "A String", # ID of this change log.
+    "accountId": "A String", # Account ID of the modified object.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, objectType=None, maxChangeTime=None, pageToken=None, maxResults=None, action=None, minChangeTime=None, searchString=None, userProfileIds=None, ids=None, objectIds=None)</code>
+  <pre>Retrieves a list of change logs.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  objectType: string, Select only change logs with the specified object type.
+    Allowed values
+      OBJECT_ACCOUNT - 
+      OBJECT_ACCOUNT_BILLING_FEATURE - 
+      OBJECT_AD - 
+      OBJECT_ADVERTISER - 
+      OBJECT_ADVERTISER_GROUP - 
+      OBJECT_BILLING_ACCOUNT_GROUP - 
+      OBJECT_BILLING_FEATURE - 
+      OBJECT_BILLING_MINIMUM_FEE - 
+      OBJECT_BILLING_PROFILE - 
+      OBJECT_CAMPAIGN - 
+      OBJECT_CONTENT_CATEGORY - 
+      OBJECT_CREATIVE - 
+      OBJECT_CREATIVE_ASSET - 
+      OBJECT_CREATIVE_BUNDLE - 
+      OBJECT_CREATIVE_FIELD - 
+      OBJECT_CREATIVE_GROUP - 
+      OBJECT_DFA_SITE - 
+      OBJECT_EVENT_TAG - 
+      OBJECT_FLOODLIGHT_ACTIVITY_GROUP - 
+      OBJECT_FLOODLIGHT_ACTVITY - 
+      OBJECT_FLOODLIGHT_CONFIGURATION - 
+      OBJECT_INSTREAM_CREATIVE - 
+      OBJECT_LANDING_PAGE - 
+      OBJECT_MEDIA_ORDER - 
+      OBJECT_PLACEMENT - 
+      OBJECT_PLACEMENT_STRATEGY - 
+      OBJECT_PLAYSTORE_LINK - 
+      OBJECT_PROVIDED_LIST_CLIENT - 
+      OBJECT_RATE_CARD - 
+      OBJECT_REMARKETING_LIST - 
+      OBJECT_RICHMEDIA_CREATIVE - 
+      OBJECT_SD_SITE - 
+      OBJECT_SIZE - 
+      OBJECT_SUBACCOUNT - 
+      OBJECT_USER_PROFILE - 
+      OBJECT_USER_PROFILE_FILTER - 
+      OBJECT_USER_ROLE - 
+  maxChangeTime: string, Select only change logs whose change time is before the specified maxChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is "2015-07-18T22:54:00-04:00". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  maxResults: integer, Maximum number of results to return.
+  action: string, Select only change logs with the specified action.
+    Allowed values
+      ACTION_ADD - 
+      ACTION_ASSIGN - 
+      ACTION_ASSOCIATE - 
+      ACTION_CREATE - 
+      ACTION_DELETE - 
+      ACTION_DISABLE - 
+      ACTION_EMAIL_TAGS - 
+      ACTION_ENABLE - 
+      ACTION_LINK - 
+      ACTION_MARK_AS_DEFAULT - 
+      ACTION_PUSH - 
+      ACTION_REMOVE - 
+      ACTION_SEND - 
+      ACTION_SHARE - 
+      ACTION_UNASSIGN - 
+      ACTION_UNLINK - 
+      ACTION_UPDATE - 
+  minChangeTime: string, Select only change logs whose change time is before the specified minChangeTime.The time should be formatted as an RFC3339 date/time string. For example, for 10:54 PM on July 18th, 2015, in the America/New York time zone, the format is "2015-07-18T22:54:00-04:00". In other words, the year, month, day, the letter T, the hour (24-hour clock system), minute, second, and then the time zone offset.
+  searchString: string, Select only change logs whose object ID, user name, old or new values match the search string.
+  userProfileIds: string, Select only change logs with these user profile IDs. (repeated)
+  ids: string, Select only change logs with these IDs. (repeated)
+  objectIds: string, Select only change logs with these object IDs. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Change Log List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#changeLogsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#changeLogsListResponse".
+    "changeLogs": [ # Change log collection.
+      { # Describes a change that a user has made to a resource.
+        "changeTime": "A String", # Time when the object was modified.
+        "kind": "dfareporting#changeLog", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#changeLog".
+        "subaccountId": "A String", # Subaccount ID of the modified object.
+        "userProfileId": "A String", # ID of the user who modified the object.
+        "objectId": "A String", # ID of the object of this change log. The object could be a campaign, placement, ad, or other type.
+        "newValue": "A String", # New value of the object field.
+        "userProfileName": "A String", # User profile name of the user who modified the object.
+        "fieldName": "A String", # Field name of the object which changed.
+        "oldValue": "A String", # Old value of the object field.
+        "action": "A String", # Action which caused the change.
+        "transactionId": "A String", # Transaction ID of this change log. When a single API call results in many changes, each change will have a separate ID in the change log but will share the same transactionId.
+        "objectType": "A String", # Object type of the change log.
+        "id": "A String", # ID of this change log.
+        "accountId": "A String", # Account ID of the modified object.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.cities.html b/docs/dyn/dfareporting_v2_5.cities.html
new file mode 100644
index 0000000..004e847
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.cities.html
@@ -0,0 +1,113 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.cities.html">cities</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, dartIds=None, namePrefix=None, regionDartIds=None, countryDartIds=None)</a></code></p>
+<p class="firstline">Retrieves a list of cities, possibly filtered.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(profileId, dartIds=None, namePrefix=None, regionDartIds=None, countryDartIds=None)</code>
+  <pre>Retrieves a list of cities, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  dartIds: string, Select only cities with these DART IDs. (repeated)
+  namePrefix: string, Select only cities with names starting with this prefix.
+  regionDartIds: string, Select only cities from these regions. (repeated)
+  countryDartIds: string, Select only cities from these countries. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # City List Response
+    "kind": "dfareporting#citiesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#citiesListResponse".
+    "cities": [ # City collection.
+      { # Contains information about a city that can be targeted by ads.
+        "kind": "dfareporting#city", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#city".
+        "countryDartId": "A String", # DART ID of the country to which this city belongs.
+        "name": "A String", # Name of this city.
+        "countryCode": "A String", # Country code of the country to which this city belongs.
+        "metroCode": "A String", # Metro region code of the metro region (DMA) to which this city belongs.
+        "regionCode": "A String", # Region code of the region to which this city belongs.
+        "metroDmaId": "A String", # ID of the metro region (DMA) to which this city belongs.
+        "dartId": "A String", # DART ID of this city. This is the ID used for targeting and generating reports.
+        "regionDartId": "A String", # DART ID of the region to which this city belongs.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.connectionTypes.html b/docs/dyn/dfareporting_v2_5.connectionTypes.html
new file mode 100644
index 0000000..457b734
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.connectionTypes.html
@@ -0,0 +1,124 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.connectionTypes.html">connectionTypes</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one connection type by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of connection types.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one connection type by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Connection type ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+    "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+    "id": "A String", # ID of this connection type.
+    "name": "A String", # Name of this connection type.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of connection types.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Connection Type List Response
+    "kind": "dfareporting#connectionTypesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionTypesListResponse".
+    "connectionTypes": [ # Collection of connection types such as broadband and mobile.
+      { # Contains information about an internet connection type that can be targeted by ads. Clients can use the connection type to target mobile vs. broadband users.
+        "kind": "dfareporting#connectionType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#connectionType".
+        "id": "A String", # ID of this connection type.
+        "name": "A String", # Name of this connection type.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.contentCategories.html b/docs/dyn/dfareporting_v2_5.contentCategories.html
new file mode 100644
index 0000000..8ac7be1
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.contentCategories.html
@@ -0,0 +1,263 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.contentCategories.html">contentCategories</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, id)</a></code></p>
+<p class="firstline">Deletes an existing content category.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one content category by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new content category.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of content categories, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing content category. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing content category.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, id)</code>
+  <pre>Deletes an existing content category.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Content category ID. (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one content category by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Content category ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Organizes placements according to the contents of their associated webpages.
+      "kind": "dfareporting#contentCategory", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#contentCategory".
+      "id": "A String", # ID of this content category. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.
+      "accountId": "A String", # Account ID of this content category. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new content category.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Organizes placements according to the contents of their associated webpages.
+    "kind": "dfareporting#contentCategory", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#contentCategory".
+    "id": "A String", # ID of this content category. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.
+    "accountId": "A String", # Account ID of this content category. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Organizes placements according to the contents of their associated webpages.
+      "kind": "dfareporting#contentCategory", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#contentCategory".
+      "id": "A String", # ID of this content category. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.
+      "accountId": "A String", # Account ID of this content category. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</code>
+  <pre>Retrieves a list of content categories, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "contentcategory*2015" will return objects with names like "contentcategory June 2015", "contentcategory April 2015", or simply "contentcategory 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "contentcategory" will match objects with name "my contentcategory", "contentcategory 2015", or simply "contentcategory".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only content categories with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Content Category List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#contentCategoriesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#contentCategoriesListResponse".
+    "contentCategories": [ # Content category collection.
+      { # Organizes placements according to the contents of their associated webpages.
+          "kind": "dfareporting#contentCategory", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#contentCategory".
+          "id": "A String", # ID of this content category. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.
+          "accountId": "A String", # Account ID of this content category. This is a read-only field that can be left blank.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing content category. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Content category ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Organizes placements according to the contents of their associated webpages.
+    "kind": "dfareporting#contentCategory", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#contentCategory".
+    "id": "A String", # ID of this content category. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.
+    "accountId": "A String", # Account ID of this content category. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Organizes placements according to the contents of their associated webpages.
+      "kind": "dfareporting#contentCategory", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#contentCategory".
+      "id": "A String", # ID of this content category. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.
+      "accountId": "A String", # Account ID of this content category. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing content category.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Organizes placements according to the contents of their associated webpages.
+    "kind": "dfareporting#contentCategory", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#contentCategory".
+    "id": "A String", # ID of this content category. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.
+    "accountId": "A String", # Account ID of this content category. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Organizes placements according to the contents of their associated webpages.
+      "kind": "dfareporting#contentCategory", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#contentCategory".
+      "id": "A String", # ID of this content category. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this content category. This is a required field and must be less than 256 characters long and unique among content categories of the same account.
+      "accountId": "A String", # Account ID of this content category. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.conversions.html b/docs/dyn/dfareporting_v2_5.conversions.html
new file mode 100644
index 0000000..e4e0f1d
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.conversions.html
@@ -0,0 +1,164 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.conversions.html">conversions</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#batchinsert">batchinsert(profileId, body)</a></code></p>
+<p class="firstline">Inserts conversions.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="batchinsert">batchinsert(profileId, body)</code>
+  <pre>Inserts conversions.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Insert Conversions Request.
+    "conversions": [ # The set of conversions to insert.
+      { # A Conversion represents when a user successfully performs a desired action after seeing an ad.
+        "ordinal": "A String", # The ordinal of the conversion. Use this field to control how conversions of the same user and day are de-duplicated. This is a required field.
+        "timestampMicros": "A String", # The timestamp of conversion, in Unix epoch micros. This is a required field.
+        "kind": "dfareporting#conversion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#conversion".
+        "childDirectedTreatment": True or False, # Whether the conversion was directed toward children.
+        "encryptedUserId": "A String", # The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with mobileDeviceId. This or mobileDeviceId is a required field.
+        "customVariables": [ # Custom floodlight variables.
+          { # A custom floodlight variable.
+            "kind": "dfareporting#customFloodlightVariable", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#customFloodlightVariable".
+            "type": "A String", # The type of custom floodlight variable to supply a value for. These map to the "u[1-20]=" in the tags.
+            "value": "A String", # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+          },
+        ],
+        "floodlightConfigurationId": "A String", # Floodlight Configuration ID of this conversion. This is a required field.
+        "value": 3.14, # The value of the conversion.
+        "limitAdTracking": True or False, # Whether the user has Limit Ad Tracking set.
+        "quantity": "A String", # The quantity of the conversion.
+        "floodlightActivityId": "A String", # Floodlight Activity ID of this conversion. This is a required field.
+        "mobileDeviceId": "A String", # The mobile device ID. This field is mutually exclusive with encryptedUserId. This or encryptedUserId is a required field.
+      },
+    ],
+    "kind": "dfareporting#conversionsBatchInsertRequest", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#conversionsBatchInsertRequest".
+    "encryptionInfo": { # A description of how user IDs are encrypted. # Describes how encryptedUserId is encrypted. This is a required field if encryptedUserId is used.
+      "kind": "dfareporting#encryptionInfo", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#encryptionInfo".
+      "encryptionEntityId": "A String", # The encryption entity ID. This should match the encryption configuration for ad serving or Data Transfer.
+      "encryptionSource": "A String", # Describes whether the encrypted cookie was received from ad serving (the %m macro) or from Data Transfer.
+      "encryptionEntityType": "A String", # The encryption entity type. This should match the encryption configuration for ad serving or Data Transfer.
+    },
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Insert Conversions Response.
+    "status": [ # The status of each conversion's insertion status. The status is returned in the same order that conversions are inserted.
+      { # The original conversion that was inserted and whether there were any errors.
+        "conversion": { # A Conversion represents when a user successfully performs a desired action after seeing an ad. # The original conversion that was inserted.
+          "ordinal": "A String", # The ordinal of the conversion. Use this field to control how conversions of the same user and day are de-duplicated. This is a required field.
+          "timestampMicros": "A String", # The timestamp of conversion, in Unix epoch micros. This is a required field.
+          "kind": "dfareporting#conversion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#conversion".
+          "childDirectedTreatment": True or False, # Whether the conversion was directed toward children.
+          "encryptedUserId": "A String", # The alphanumeric encrypted user ID. When set, encryptionInfo should also be specified. This field is mutually exclusive with mobileDeviceId. This or mobileDeviceId is a required field.
+          "customVariables": [ # Custom floodlight variables.
+            { # A custom floodlight variable.
+              "kind": "dfareporting#customFloodlightVariable", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#customFloodlightVariable".
+              "type": "A String", # The type of custom floodlight variable to supply a value for. These map to the "u[1-20]=" in the tags.
+              "value": "A String", # The value of the custom floodlight variable. The length of string must not exceed 50 characters.
+            },
+          ],
+          "floodlightConfigurationId": "A String", # Floodlight Configuration ID of this conversion. This is a required field.
+          "value": 3.14, # The value of the conversion.
+          "limitAdTracking": True or False, # Whether the user has Limit Ad Tracking set.
+          "quantity": "A String", # The quantity of the conversion.
+          "floodlightActivityId": "A String", # Floodlight Activity ID of this conversion. This is a required field.
+          "mobileDeviceId": "A String", # The mobile device ID. This field is mutually exclusive with encryptedUserId. This or encryptedUserId is a required field.
+        },
+        "errors": [ # A list of errors related to this conversion.
+          { # The error code and description for a conversion that failed to insert.
+            "kind": "dfareporting#conversionError", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#conversionError".
+            "code": "A String", # The error code.
+            "message": "A String", # A description of the error.
+          },
+        ],
+        "kind": "dfareporting#conversionStatus", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#conversionStatus".
+      },
+    ],
+    "hasFailures": True or False, # Indicates that some or all conversions failed to insert.
+    "kind": "dfareporting#conversionsBatchInsertResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#conversionsBatchInsertResponse".
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.countries.html b/docs/dyn/dfareporting_v2_5.countries.html
new file mode 100644
index 0000000..7fe1091
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.countries.html
@@ -0,0 +1,128 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.countries.html">countries</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, dartId)</a></code></p>
+<p class="firstline">Gets one country by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of countries.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, dartId)</code>
+  <pre>Gets one country by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  dartId: string, Country DART ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains information about a country that can be targeted by ads.
+    "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+    "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+    "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+    "countryCode": "A String", # Country code.
+    "name": "A String", # Name of this country.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of countries.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Country List Response
+    "kind": "dfareporting#countriesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#countriesListResponse".
+    "countries": [ # Country collection.
+      { # Contains information about a country that can be targeted by ads.
+        "dartId": "A String", # DART ID of this country. This is the ID used for targeting and generating reports.
+        "sslEnabled": True or False, # Whether ad serving supports secure servers in this country.
+        "kind": "dfareporting#country", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#country".
+        "countryCode": "A String", # Country code.
+        "name": "A String", # Name of this country.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.creativeAssets.html b/docs/dyn/dfareporting_v2_5.creativeAssets.html
new file mode 100644
index 0000000..240ce6d
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.creativeAssets.html
@@ -0,0 +1,191 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.creativeAssets.html">creativeAssets</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, advertiserId, body=None, media_body=None)</a></code></p>
+<p class="firstline">Inserts a new creative asset.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="insert">insert(profileId, advertiserId, body=None, media_body=None)</code>
+  <pre>Inserts a new creative asset.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  advertiserId: string, Advertiser ID of this creative. This is a required field. (required)
+  body: object, The request body.
+    The object takes the form of:
+
+{ # CreativeAssets contains properties of a creative asset file which will be uploaded or has already been uploaded. Refer to the creative sample code for how to upload assets and insert a creative.
+    "warnedValidationRules": [ # Rules validated during code generation that generated a warning. This is a read-only, auto-generated field.
+        # 
+        # Possible values are:
+        # - "ADMOB_REFERENCED"
+        # - "ASSET_FORMAT_UNSUPPORTED_DCM"
+        # - "ASSET_INVALID"
+        # - "CLICK_TAG_HARD_CODED"
+        # - "CLICK_TAG_INVALID"
+        # - "CLICK_TAG_IN_GWD"
+        # - "CLICK_TAG_MISSING"
+        # - "CLICK_TAG_MORE_THAN_ONE"
+        # - "CLICK_TAG_NON_TOP_LEVEL"
+        # - "COMPONENT_UNSUPPORTED_DCM"
+        # - "ENABLER_UNSUPPORTED_METHOD_DCM"
+        # - "EXTERNAL_FILE_REFERENCED"
+        # - "FILE_DETAIL_EMPTY"
+        # - "FILE_TYPE_INVALID"
+        # - "GWD_PROPERTIES_INVALID"
+        # - "HTML5_FEATURE_UNSUPPORTED"
+        # - "LINKED_FILE_NOT_FOUND"
+        # - "MAX_FLASH_VERSION_11"
+        # - "MRAID_REFERENCED"
+        # - "NOT_SSL_COMPLIANT"
+        # - "ORPHANED_ASSET"
+        # - "PRIMARY_HTML_MISSING"
+        # - "SVG_INVALID"
+        # - "ZIP_INVALID"
+      "A String",
+    ],
+    "clickTags": [ # List of detected click tags for assets. This is a read-only auto-generated field.
+      { # Creative Click Tag.
+        "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+        "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+        "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+      },
+    ],
+    "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field.
+      "A String",
+    ],
+    "kind": "dfareporting#creativeAssetMetadata", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeAssetMetadata".
+    "assetIdentifier": { # Creative Asset ID. # ID of the creative asset. This is a required field.
+      "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+      "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+    },
+  }
+
+  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
+
+Returns:
+  An object of the form:
+
+    { # CreativeAssets contains properties of a creative asset file which will be uploaded or has already been uploaded. Refer to the creative sample code for how to upload assets and insert a creative.
+      "warnedValidationRules": [ # Rules validated during code generation that generated a warning. This is a read-only, auto-generated field.
+          #
+          # Possible values are:
+          # - "ADMOB_REFERENCED"
+          # - "ASSET_FORMAT_UNSUPPORTED_DCM"
+          # - "ASSET_INVALID"
+          # - "CLICK_TAG_HARD_CODED"
+          # - "CLICK_TAG_INVALID"
+          # - "CLICK_TAG_IN_GWD"
+          # - "CLICK_TAG_MISSING"
+          # - "CLICK_TAG_MORE_THAN_ONE"
+          # - "CLICK_TAG_NON_TOP_LEVEL"
+          # - "COMPONENT_UNSUPPORTED_DCM"
+          # - "ENABLER_UNSUPPORTED_METHOD_DCM"
+          # - "EXTERNAL_FILE_REFERENCED"
+          # - "FILE_DETAIL_EMPTY"
+          # - "FILE_TYPE_INVALID"
+          # - "GWD_PROPERTIES_INVALID"
+          # - "HTML5_FEATURE_UNSUPPORTED"
+          # - "LINKED_FILE_NOT_FOUND"
+          # - "MAX_FLASH_VERSION_11"
+          # - "MRAID_REFERENCED"
+          # - "NOT_SSL_COMPLIANT"
+          # - "ORPHANED_ASSET"
+          # - "PRIMARY_HTML_MISSING"
+          # - "SVG_INVALID"
+          # - "ZIP_INVALID"
+        "A String",
+      ],
+      "clickTags": [ # List of detected click tags for assets. This is a read-only auto-generated field.
+        { # Creative Click Tag.
+          "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+          "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+          "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+        },
+      ],
+      "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field.
+        "A String",
+      ],
+      "kind": "dfareporting#creativeAssetMetadata", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeAssetMetadata".
+      "assetIdentifier": { # Creative Asset ID. # ID of the creative asset. This is a required field.
+        "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+        "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+      },
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.creativeFieldValues.html b/docs/dyn/dfareporting_v2_5.creativeFieldValues.html
new file mode 100644
index 0000000..aca8895
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.creativeFieldValues.html
@@ -0,0 +1,261 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.creativeFieldValues.html">creativeFieldValues</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, creativeFieldId, id)</a></code></p>
+<p class="firstline">Deletes an existing creative field value.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, creativeFieldId, id)</a></code></p>
+<p class="firstline">Gets one creative field value by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, creativeFieldId, body)</a></code></p>
+<p class="firstline">Inserts a new creative field value.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, creativeFieldId, searchString=None, sortField=None, ids=None, maxResults=None, pageToken=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of creative field values, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, creativeFieldId, id, body)</a></code></p>
+<p class="firstline">Updates an existing creative field value. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, creativeFieldId, body)</a></code></p>
+<p class="firstline">Updates an existing creative field value.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, creativeFieldId, id)</code>
+  <pre>Deletes an existing creative field value.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  creativeFieldId: string, Creative field ID for this creative field value. (required)
+  id: string, Creative Field Value ID (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, creativeFieldId, id)</code>
+  <pre>Gets one creative field value by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  creativeFieldId: string, Creative field ID for this creative field value. (required)
+  id: string, Creative Field Value ID (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative field value.
+      "kind": "dfareporting#creativeFieldValue", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldValue".
+      "id": "A String", # ID of this creative field value. This is a read-only, auto-generated field.
+      "value": "A String", # Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, creativeFieldId, body)</code>
+  <pre>Inserts a new creative field value.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  creativeFieldId: string, Creative field ID for this creative field value. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a creative field value.
+    "kind": "dfareporting#creativeFieldValue", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldValue".
+    "id": "A String", # ID of this creative field value. This is a read-only, auto-generated field.
+    "value": "A String", # Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative field value.
+      "kind": "dfareporting#creativeFieldValue", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldValue".
+      "id": "A String", # ID of this creative field value. This is a read-only, auto-generated field.
+      "value": "A String", # Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, creativeFieldId, searchString=None, sortField=None, ids=None, maxResults=None, pageToken=None, sortOrder=None)</code>
+  <pre>Retrieves a list of creative field values, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  creativeFieldId: string, Creative field ID for this creative field value. (required)
+  searchString: string, Allows searching for creative field values by their values. Wildcards (e.g. *) are not allowed.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      VALUE - 
+  ids: string, Select only creative field values with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Creative Field Value List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#creativeFieldValuesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldValuesListResponse".
+    "creativeFieldValues": [ # Creative field value collection.
+      { # Contains properties of a creative field value.
+          "kind": "dfareporting#creativeFieldValue", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldValue".
+          "id": "A String", # ID of this creative field value. This is a read-only, auto-generated field.
+          "value": "A String", # Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, creativeFieldId, id, body)</code>
+  <pre>Updates an existing creative field value. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  creativeFieldId: string, Creative field ID for this creative field value. (required)
+  id: string, Creative Field Value ID (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a creative field value.
+    "kind": "dfareporting#creativeFieldValue", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldValue".
+    "id": "A String", # ID of this creative field value. This is a read-only, auto-generated field.
+    "value": "A String", # Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative field value.
+      "kind": "dfareporting#creativeFieldValue", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldValue".
+      "id": "A String", # ID of this creative field value. This is a read-only, auto-generated field.
+      "value": "A String", # Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, creativeFieldId, body)</code>
+  <pre>Updates an existing creative field value.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  creativeFieldId: string, Creative field ID for this creative field value. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a creative field value.
+    "kind": "dfareporting#creativeFieldValue", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldValue".
+    "id": "A String", # ID of this creative field value. This is a read-only, auto-generated field.
+    "value": "A String", # Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative field value.
+      "kind": "dfareporting#creativeFieldValue", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldValue".
+      "id": "A String", # ID of this creative field value. This is a read-only, auto-generated field.
+      "value": "A String", # Value of this creative field value. It needs to be less than 256 characters in length and unique per creative field.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.creativeFields.html b/docs/dyn/dfareporting_v2_5.creativeFields.html
new file mode 100644
index 0000000..f52d3d7
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.creativeFields.html
@@ -0,0 +1,344 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.creativeFields.html">creativeFields</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, id)</a></code></p>
+<p class="firstline">Deletes an existing creative field.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one creative field by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new creative field.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, pageToken=None, sortField=None, advertiserIds=None, ids=None, maxResults=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of creative fields, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing creative field. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing creative field.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, id)</code>
+  <pre>Deletes an existing creative field.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Creative Field ID (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one creative field by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Creative Field ID (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative field.
+      "kind": "dfareporting#creativeField", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeField".
+      "subaccountId": "A String", # Subaccount ID of this creative field. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.
+      "advertiserId": "A String", # Advertiser ID of this creative field. This is a required field on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this creative field. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this creative field. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new creative field.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a creative field.
+    "kind": "dfareporting#creativeField", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeField".
+    "subaccountId": "A String", # Subaccount ID of this creative field. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.
+    "advertiserId": "A String", # Advertiser ID of this creative field. This is a required field on insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this creative field. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this creative field. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative field.
+      "kind": "dfareporting#creativeField", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeField".
+      "subaccountId": "A String", # Subaccount ID of this creative field. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.
+      "advertiserId": "A String", # Advertiser ID of this creative field. This is a required field on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this creative field. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this creative field. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, pageToken=None, sortField=None, advertiserIds=None, ids=None, maxResults=None, sortOrder=None)</code>
+  <pre>Retrieves a list of creative fields, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for creative fields by name or ID. Wildcards (*) are allowed. For example, "creativefield*2015" will return creative fields with names like "creativefield June 2015", "creativefield April 2015", or simply "creativefield 2015". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of "creativefield" will match creative fields with the name "my creativefield", "creativefield 2015", or simply "creativefield".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  advertiserIds: string, Select only creative fields that belong to these advertisers. (repeated)
+  ids: string, Select only creative fields with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Creative Field List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "creativeFields": [ # Creative field collection.
+      { # Contains properties of a creative field.
+          "kind": "dfareporting#creativeField", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeField".
+          "subaccountId": "A String", # Subaccount ID of this creative field. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.
+          "advertiserId": "A String", # Advertiser ID of this creative field. This is a required field on insertion.
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "id": "A String", # ID of this creative field. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this creative field. This is a read-only field that can be left blank.
+        },
+    ],
+    "kind": "dfareporting#creativeFieldsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeFieldsListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing creative field. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Creative Field ID (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a creative field.
+    "kind": "dfareporting#creativeField", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeField".
+    "subaccountId": "A String", # Subaccount ID of this creative field. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.
+    "advertiserId": "A String", # Advertiser ID of this creative field. This is a required field on insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this creative field. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this creative field. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative field.
+      "kind": "dfareporting#creativeField", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeField".
+      "subaccountId": "A String", # Subaccount ID of this creative field. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.
+      "advertiserId": "A String", # Advertiser ID of this creative field. This is a required field on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this creative field. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this creative field. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing creative field.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a creative field.
+    "kind": "dfareporting#creativeField", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeField".
+    "subaccountId": "A String", # Subaccount ID of this creative field. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.
+    "advertiserId": "A String", # Advertiser ID of this creative field. This is a required field on insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this creative field. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this creative field. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative field.
+      "kind": "dfareporting#creativeField", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeField".
+      "subaccountId": "A String", # Subaccount ID of this creative field. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this creative field. This is a required field and must be less than 256 characters long and unique among creative fields of the same advertiser.
+      "advertiserId": "A String", # Advertiser ID of this creative field. This is a required field on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this creative field. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this creative field. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.creativeGroups.html b/docs/dyn/dfareporting_v2_5.creativeGroups.html
new file mode 100644
index 0000000..36fa2d2
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.creativeGroups.html
@@ -0,0 +1,364 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.creativeGroups.html">creativeGroups</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one creative group by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new creative group.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, pageToken=None, sortField=None, advertiserIds=None, groupNumber=None, maxResults=None, ids=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of creative groups, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing creative group. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing creative group.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one creative group by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Creative group ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative group.
+      "kind": "dfareporting#creativeGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeGroup".
+      "subaccountId": "A String", # Subaccount ID of this creative group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.
+      "groupNumber": 42, # Subgroup of the creative group. Assign your creative groups to one of the following subgroups in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion.
+          # Acceptable values are:
+          # - 1
+          # - 2
+      "advertiserId": "A String", # Advertiser ID of this creative group. This is a required field on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this creative group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this creative group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new creative group.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a creative group.
+    "kind": "dfareporting#creativeGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeGroup".
+    "subaccountId": "A String", # Subaccount ID of this creative group. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.
+    "groupNumber": 42, # Subgroup of the creative group. Assign your creative groups to one of the following subgroups in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion.
+        # Acceptable values are:
+        # - 1
+        # - 2
+    "advertiserId": "A String", # Advertiser ID of this creative group. This is a required field on insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this creative group. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this creative group. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative group.
+      "kind": "dfareporting#creativeGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeGroup".
+      "subaccountId": "A String", # Subaccount ID of this creative group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.
+      "groupNumber": 42, # Subgroup of the creative group. Assign your creative groups to one of the following subgroups in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion.
+          # Acceptable values are:
+          # - 1
+          # - 2
+      "advertiserId": "A String", # Advertiser ID of this creative group. This is a required field on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this creative group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this creative group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, pageToken=None, sortField=None, advertiserIds=None, groupNumber=None, maxResults=None, ids=None, sortOrder=None)</code>
+  <pre>Retrieves a list of creative groups, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for creative groups by name or ID. Wildcards (*) are allowed. For example, "creativegroup*2015" will return creative groups with names like "creativegroup June 2015", "creativegroup April 2015", or simply "creativegroup 2015". Most of the searches also add wild-cards implicitly at the start and the end of the search string. For example, a search string of "creativegroup" will match creative groups with the name "my creativegroup", "creativegroup 2015", or simply "creativegroup".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  advertiserIds: string, Select only creative groups that belong to these advertisers. (repeated)
+  groupNumber: integer, Select only creative groups that belong to this subgroup.
+  maxResults: integer, Maximum number of results to return.
+  ids: string, Select only creative groups with these IDs. (repeated)
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Creative Group List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "creativeGroups": [ # Creative group collection.
+      { # Contains properties of a creative group.
+          "kind": "dfareporting#creativeGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeGroup".
+          "subaccountId": "A String", # Subaccount ID of this creative group. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.
+          "groupNumber": 42, # Subgroup of the creative group. Assign your creative groups to one of the following subgroups in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion.
+              # Acceptable values are:
+              # - 1
+              # - 2
+          "advertiserId": "A String", # Advertiser ID of this creative group. This is a required field on insertion.
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "id": "A String", # ID of this creative group. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this creative group. This is a read-only field that can be left blank.
+        },
+    ],
+    "kind": "dfareporting#creativeGroupsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeGroupsListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing creative group. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Creative group ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a creative group.
+    "kind": "dfareporting#creativeGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeGroup".
+    "subaccountId": "A String", # Subaccount ID of this creative group. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.
+    "groupNumber": 42, # Subgroup of the creative group. Assign your creative groups to one of the following subgroups in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion.
+        # Acceptable values are:
+        # - 1
+        # - 2
+    "advertiserId": "A String", # Advertiser ID of this creative group. This is a required field on insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this creative group. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this creative group. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative group.
+      "kind": "dfareporting#creativeGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeGroup".
+      "subaccountId": "A String", # Subaccount ID of this creative group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.
+      "groupNumber": 42, # Subgroup of the creative group. Assign your creative groups to one of the following subgroups in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion.
+          # Acceptable values are:
+          # - 1
+          # - 2
+      "advertiserId": "A String", # Advertiser ID of this creative group. This is a required field on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this creative group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this creative group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing creative group.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a creative group.
+    "kind": "dfareporting#creativeGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeGroup".
+    "subaccountId": "A String", # Subaccount ID of this creative group. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.
+    "groupNumber": 42, # Subgroup of the creative group. Assign your creative groups to one of the following subgroups in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion.
+        # Acceptable values are:
+        # - 1
+        # - 2
+    "advertiserId": "A String", # Advertiser ID of this creative group. This is a required field on insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this creative group. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this creative group. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a creative group.
+      "kind": "dfareporting#creativeGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativeGroup".
+      "subaccountId": "A String", # Subaccount ID of this creative group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this creative group. This is a required field and must be less than 256 characters long and unique among creative groups of the same advertiser.
+      "groupNumber": 42, # Subgroup of the creative group. Assign your creative groups to one of the following subgroups in order to filter or manage them more easily. This field is required on insertion and is read-only after insertion.
+          # Acceptable values are:
+          # - 1
+          # - 2
+      "advertiserId": "A String", # Advertiser ID of this creative group. This is a required field on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this creative group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this creative group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.creatives.html b/docs/dyn/dfareporting_v2_5.creatives.html
new file mode 100644
index 0000000..cdcaa77
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.creatives.html
@@ -0,0 +1,2893 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.creatives.html">creatives</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one creative by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new creative.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, campaignId=None, advertiserId=None, sizeIds=None, archived=None, pageToken=None, sortOrder=None, renderingIds=None, maxResults=None, active=None, companionCreativeIds=None, types=None, searchString=None, ids=None, studioCreativeId=None, sortField=None, creativeFieldIds=None)</a></code></p>
+<p class="firstline">Retrieves a list of creatives, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing creative. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing creative.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one creative by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Creative ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Creative.
+      "thirdPartyUrls": [ # Third-party URLs for tracking in-stream video creative events. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+        { # Third-party Tracking URL.
+          "url": "A String", # URL for the specified third-party URL type.
+          "thirdPartyUrlType": "A String", # Third-party URL type for in-stream video creatives.
+        },
+      ],
+      "artworkType": "A String", # Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "latestTraffickedCreativeId": "A String", # Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "videoDescription": "A String", # Description of the video ad. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "advertiserId": "A String", # Advertiser ID of this creative. This is a required field. Applicable to all creative types.
+      "requiredFlashPluginVersion": "A String", # The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "thirdPartyBackupImageImpressionsUrl": "A String", # Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.
+      "timerCustomEvents": [ # List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "renderingIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "fsCommand": { # FsCommand. # OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE.
+        "windowHeight": 42, # Height of the window.
+        "top": 42, # Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+        "windowWidth": 42, # Width of the window.
+        "positionOption": "A String", # Position in the browser where the window will open.
+        "left": 42, # Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+      },
+      "id": "A String", # ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.
+      "accountId": "A String", # Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+      "studioTraffickedCreativeId": "A String", # Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "archived": True or False, # Whether the creative is archived. Applicable to all creative types.
+      "overrideCss": "A String", # Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.
+      "authoringSource": "A String", # Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.
+      "requiredFlashVersion": 42, # The internal Flash version for this creative as calculated by DoubleClick Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "exitCustomEvents": [ # List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "renderingId": "A String", # ID of current rendering version. This is a read-only field. Applicable to all creative types.
+      "counterCustomEvents": [ # List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "backupImageReportingLabel": "A String", # Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.
+      "version": 42, # The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.
+      "creativeFieldAssignments": [ # Creative field assignments for this creative. Applicable to all creative types.
+        { # Creative Field Assignment.
+          "creativeFieldId": "A String", # ID of the creative field.
+          "creativeFieldValueId": "A String", # ID of the creative field value.
+        },
+      ],
+      "backgroundColor": "A String", # The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.
+      "customKeyValues": [ # Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+        "A String",
+      ],
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "htmlCode": "A String", # HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is false. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "type": "A String", # Type of this creative.This is a required field. Applicable to all creative types.
+      "totalFileSize": "A String", # Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "thirdPartyRichMediaImpressionsUrl": "A String", # Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.
+      "studioAdvertiserId": "A String", # Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "creativeAssets": [ # Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT
+        { # Creative Asset.
+          "mimeType": "A String", # Detected MIME type for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "artworkType": "A String", # Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "positionLeftUnit": "A String", # Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "collapsedSize": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "flashVersion": 42, # Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "pushdown": True or False, # Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+          "hideFlashObjects": True or False, # Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "A String",
+          ],
+          "duration": 42, # Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_VIDEO and VPAID_LINEAR_VIDEO.
+          "positionTopUnit": "A String", # Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.
+          "id": "A String", # Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "alignment": "A String", # Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL.
+          "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "horizontallyLocked": True or False, # Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "startTimeType": "A String", # Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+          "displayType": "A String", # Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "expandedDimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "verticallyLocked": True or False, # Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "role": "A String", # Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field.
+              # PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives.
+              # BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+              # ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives.
+              # OTHER refers to assets from sources other than DCM, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives.
+              # PARENT_VIDEO refers to videos uploaded by the user in DCM and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+              # TRANSCODED_VIDEO refers to videos transcoded by DCM from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+              # ALTERNATE_VIDEO refers to the DCM representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within DCM.
+              # For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative.
+          "zipFilesize": "A String", # Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+          "bitRate": 42, # Detected bit-rate for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "windowMode": "A String", # Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.
+          "progressiveServingUrl": "A String", # Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "durationType": "A String", # Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.
+          "videoDuration": 3.14, # Detected video duration for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "fileSize": "A String", # File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "zipFilename": "A String", # File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+          "offset": { # Offset Position. # Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "active": True or False, # Whether the video asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "originalBackup": True or False, # Whether the backup asset is original or changed by the user in DCM. Applicable to the following creative types: all RICH_MEDIA.
+          "hideSelectionBoxes": True or False, # Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "streamingServingUrl": "A String", # Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "zIndex": 42, # zIndex value of an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY.
+          "childAssetType": "A String", # Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.
+          "backupImageExit": { # Creative Custom Event. # Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.
+            "targetType": "A String", # Target type used by the event.
+            "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+            "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+            "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+              "showStatusBar": True or False, # Whether to display the browser status bar.
+              "showScrollBar": True or False, # Whether to display the browser scroll bar.
+              "showAddressBar": True or False, # Whether to display the browser address bar.
+              "showMenuBar": True or False, # Whether to display the browser menu bar.
+              "title": "A String", # Title of popup window.
+              "showToolBar": True or False, # Whether to display the browser tool bar.
+              "positionType": "A String", # Popup window position either centered or at specific coordinate.
+              "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+                "top": 42, # Offset distance from top side of an asset or a window.
+                "left": 42, # Offset distance from left side of an asset or a window.
+              },
+              "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+                "width": 42, # Width of this size.
+                "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                "height": 42, # Height of this size.
+              },
+            },
+            "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+            "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+            "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+            "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+            "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+            "advertiserCustomEventName": "A String", # User-entered name for the event.
+          },
+          "actionScript3": True or False, # Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "pushdownDuration": 3.14, # Pushdown duration in seconds for an asset. Must be between 0 and 9.99. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+          "assetIdentifier": { # Creative Asset ID. # Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+            "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+            "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+          },
+          "transparency": True or False, # Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.
+          "sslCompliant": True or False, # Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "position": { # Offset Position. # Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "customStartTimeValue": 42, # Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+        },
+      ],
+      "redirectUrl": "A String", # URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT
+      "videoDuration": 3.14, # Creative video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, all RICH_MEDIA, and all VPAID.
+      "htmlCodeLocked": True or False, # Whether HTML code is DCM-generated or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.
+      "convertFlashToHtml5": True or False, # Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "clickTags": [ # Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        { # Creative Click Tag.
+          "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+          "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+          "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+        },
+      ],
+      "commercialId": "A String", # Industry standard ID assigned to creative for reach and frequency. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "active": True or False, # Whether the creative is active. Applicable to all creative types.
+      "compatibility": [ # Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL  are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. Applicable to all creative types.
+          #
+          # Acceptable values are:
+          # - "APP"
+          # - "APP_INTERSTITIAL"
+          # - "IN_STREAM_VIDEO"
+          # - "DISPLAY"
+          # - "DISPLAY_INTERSTITIAL"
+        "A String",
+      ],
+      "adParameters": "A String", # Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.
+      "adTagKeys": [ # Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+        "A String",
+      ],
+      "kind": "dfareporting#creative", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creative".
+      "subaccountId": "A String", # Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+      "name": "A String", # Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.
+      "sslOverride": True or False, # Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.
+      "lastModifiedInfo": { # Modification timestamp. # Creative last modification information. This is a read-only field. Applicable to all creative types.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "backupImageClickThroughUrl": "A String", # Click-through URL for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "sslCompliant": True or False, # Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.
+      "studioCreativeId": "A String", # Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "authoringTool": "A String", # Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+      "allowScriptAccess": True or False, # Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.
+      "companionCreatives": [ # List of companion creatives assigned to an in-Stream videocreative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+        "A String",
+      ],
+      "auto_advance_images": True or False, # Whether images are automatically advanced for enhanced image creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.
+      "backupImageFeatures": [ # List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by DCM for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "A String",
+      ],
+      "backupImageTargetWindow": { # Target Window. # Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "customHtml": "A String", # User-entered value.
+        "targetWindowOption": "A String", # Type of browser window for which the backup image of the flash creative can be displayed.
+      },
+      "skippable": True or False, # Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new creative.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Creative.
+    "thirdPartyUrls": [ # Third-party URLs for tracking in-stream video creative events. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      { # Third-party Tracking URL.
+        "url": "A String", # URL for the specified third-party URL type.
+        "thirdPartyUrlType": "A String", # Third-party URL type for in-stream video creatives.
+      },
+    ],
+    "artworkType": "A String", # Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "latestTraffickedCreativeId": "A String", # Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "videoDescription": "A String", # Description of the video ad. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    "advertiserId": "A String", # Advertiser ID of this creative. This is a required field. Applicable to all creative types.
+    "requiredFlashPluginVersion": "A String", # The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "thirdPartyBackupImageImpressionsUrl": "A String", # Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.
+    "timerCustomEvents": [ # List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.
+      { # Creative Custom Event.
+        "targetType": "A String", # Target type used by the event.
+        "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+        "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+        "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+          "showStatusBar": True or False, # Whether to display the browser status bar.
+          "showScrollBar": True or False, # Whether to display the browser scroll bar.
+          "showAddressBar": True or False, # Whether to display the browser address bar.
+          "showMenuBar": True or False, # Whether to display the browser menu bar.
+          "title": "A String", # Title of popup window.
+          "showToolBar": True or False, # Whether to display the browser tool bar.
+          "positionType": "A String", # Popup window position either centered or at specific coordinate.
+          "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+        },
+        "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+        "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+        "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+        "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventName": "A String", # User-entered name for the event.
+      },
+    ],
+    "renderingIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "fsCommand": { # FsCommand. # OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE.
+      "windowHeight": 42, # Height of the window.
+      "top": 42, # Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+      "windowWidth": 42, # Width of the window.
+      "positionOption": "A String", # Position in the browser where the window will open.
+      "left": 42, # Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+    },
+    "id": "A String", # ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.
+    "accountId": "A String", # Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+    "studioTraffickedCreativeId": "A String", # Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "archived": True or False, # Whether the creative is archived. Applicable to all creative types.
+    "overrideCss": "A String", # Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.
+    "authoringSource": "A String", # Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.
+    "requiredFlashVersion": 42, # The internal Flash version for this creative as calculated by DoubleClick Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+    "exitCustomEvents": [ # List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      { # Creative Custom Event.
+        "targetType": "A String", # Target type used by the event.
+        "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+        "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+        "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+          "showStatusBar": True or False, # Whether to display the browser status bar.
+          "showScrollBar": True or False, # Whether to display the browser scroll bar.
+          "showAddressBar": True or False, # Whether to display the browser address bar.
+          "showMenuBar": True or False, # Whether to display the browser menu bar.
+          "title": "A String", # Title of popup window.
+          "showToolBar": True or False, # Whether to display the browser tool bar.
+          "positionType": "A String", # Popup window position either centered or at specific coordinate.
+          "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+        },
+        "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+        "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+        "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+        "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventName": "A String", # User-entered name for the event.
+      },
+    ],
+    "renderingId": "A String", # ID of current rendering version. This is a read-only field. Applicable to all creative types.
+    "counterCustomEvents": [ # List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.
+      { # Creative Custom Event.
+        "targetType": "A String", # Target type used by the event.
+        "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+        "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+        "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+          "showStatusBar": True or False, # Whether to display the browser status bar.
+          "showScrollBar": True or False, # Whether to display the browser scroll bar.
+          "showAddressBar": True or False, # Whether to display the browser address bar.
+          "showMenuBar": True or False, # Whether to display the browser menu bar.
+          "title": "A String", # Title of popup window.
+          "showToolBar": True or False, # Whether to display the browser tool bar.
+          "positionType": "A String", # Popup window position either centered or at specific coordinate.
+          "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+        },
+        "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+        "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+        "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+        "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventName": "A String", # User-entered name for the event.
+      },
+    ],
+    "backupImageReportingLabel": "A String", # Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.
+    "version": 42, # The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.
+    "creativeFieldAssignments": [ # Creative field assignments for this creative. Applicable to all creative types.
+      { # Creative Field Assignment.
+        "creativeFieldId": "A String", # ID of the creative field.
+        "creativeFieldValueId": "A String", # ID of the creative field value.
+      },
+    ],
+    "backgroundColor": "A String", # The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.
+    "customKeyValues": [ # Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "A String",
+    ],
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "htmlCode": "A String", # HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is false. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.
+    "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.
+      "width": 42, # Width of this size.
+      "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+      "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+      "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+      "height": 42, # Height of this size.
+    },
+    "type": "A String", # Type of this creative.This is a required field. Applicable to all creative types.
+    "totalFileSize": "A String", # Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "thirdPartyRichMediaImpressionsUrl": "A String", # Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.
+    "studioAdvertiserId": "A String", # Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "creativeAssets": [ # Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT
+      { # Creative Asset.
+        "mimeType": "A String", # Detected MIME type for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "artworkType": "A String", # Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "positionLeftUnit": "A String", # Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "collapsedSize": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+          "width": 42, # Width of this size.
+          "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+          "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+          "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+          "height": 42, # Height of this size.
+        },
+        "flashVersion": 42, # Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "pushdown": True or False, # Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+        "hideFlashObjects": True or False, # Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+        "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "A String",
+        ],
+        "duration": 42, # Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_VIDEO and VPAID_LINEAR_VIDEO.
+        "positionTopUnit": "A String", # Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.
+        "id": "A String", # Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+        "alignment": "A String", # Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL.
+        "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "width": 42, # Width of this size.
+          "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+          "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+          "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+          "height": 42, # Height of this size.
+        },
+        "horizontallyLocked": True or False, # Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "startTimeType": "A String", # Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+        "displayType": "A String", # Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "expandedDimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "width": 42, # Width of this size.
+          "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+          "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+          "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+          "height": 42, # Height of this size.
+        },
+        "verticallyLocked": True or False, # Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "role": "A String", # Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field.
+            # PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives.
+            # BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            # ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives.
+            # OTHER refers to assets from sources other than DCM, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives.
+            # PARENT_VIDEO refers to videos uploaded by the user in DCM and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+            # TRANSCODED_VIDEO refers to videos transcoded by DCM from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+            # ALTERNATE_VIDEO refers to the DCM representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within DCM.
+            # For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative.
+        "zipFilesize": "A String", # Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+        "bitRate": 42, # Detected bit-rate for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "windowMode": "A String", # Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.
+        "progressiveServingUrl": "A String", # Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "durationType": "A String", # Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.
+        "videoDuration": 3.14, # Detected video duration for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "fileSize": "A String", # File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+        "zipFilename": "A String", # File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+        "offset": { # Offset Position. # Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+          "top": 42, # Offset distance from top side of an asset or a window.
+          "left": 42, # Offset distance from left side of an asset or a window.
+        },
+        "active": True or False, # Whether the video asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "originalBackup": True or False, # Whether the backup asset is original or changed by the user in DCM. Applicable to the following creative types: all RICH_MEDIA.
+        "hideSelectionBoxes": True or False, # Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+        "streamingServingUrl": "A String", # Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "zIndex": 42, # zIndex value of an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY.
+        "childAssetType": "A String", # Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.
+        "backupImageExit": { # Creative Custom Event. # Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+        "actionScript3": True or False, # Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "pushdownDuration": 3.14, # Pushdown duration in seconds for an asset. Must be between 0 and 9.99. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+        "assetIdentifier": { # Creative Asset ID. # Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+          "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+        },
+        "transparency": True or False, # Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.
+        "sslCompliant": True or False, # Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+        "position": { # Offset Position. # Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "top": 42, # Offset distance from top side of an asset or a window.
+          "left": 42, # Offset distance from left side of an asset or a window.
+        },
+        "customStartTimeValue": 42, # Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+      },
+    ],
+    "redirectUrl": "A String", # URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT
+    "videoDuration": 3.14, # Creative video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, all RICH_MEDIA, and all VPAID.
+    "htmlCodeLocked": True or False, # Whether HTML code is DCM-generated or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.
+    "convertFlashToHtml5": True or False, # Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+    "clickTags": [ # Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      { # Creative Click Tag.
+        "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+        "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+        "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+      },
+    ],
+    "commercialId": "A String", # Industry standard ID assigned to creative for reach and frequency. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    "active": True or False, # Whether the creative is active. Applicable to all creative types.
+    "compatibility": [ # Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL  are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. Applicable to all creative types.
+        # 
+        # Acceptable values are:
+        # - "APP"
+        # - "APP_INTERSTITIAL"
+        # - "IN_STREAM_VIDEO"
+        # - "DISPLAY"
+        # - "DISPLAY_INTERSTITIAL"
+      "A String",
+    ],
+    "adParameters": "A String", # Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.
+    "adTagKeys": [ # Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "A String",
+    ],
+    "kind": "dfareporting#creative", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creative".
+    "subaccountId": "A String", # Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+    "name": "A String", # Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.
+    "sslOverride": True or False, # Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.
+    "lastModifiedInfo": { # Modification timestamp. # Creative last modification information. This is a read-only field. Applicable to all creative types.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "backupImageClickThroughUrl": "A String", # Click-through URL for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+    "sslCompliant": True or False, # Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.
+    "studioCreativeId": "A String", # Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "authoringTool": "A String", # Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+    "allowScriptAccess": True or False, # Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.
+    "companionCreatives": [ # List of companion creatives assigned to an in-Stream videocreative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "A String",
+    ],
+    "auto_advance_images": True or False, # Whether images are automatically advanced for enhanced image creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.
+    "backupImageFeatures": [ # List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by DCM for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "A String",
+    ],
+    "backupImageTargetWindow": { # Target Window. # Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "customHtml": "A String", # User-entered value.
+      "targetWindowOption": "A String", # Type of browser window for which the backup image of the flash creative can be displayed.
+    },
+    "skippable": True or False, # Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Creative.
+      "thirdPartyUrls": [ # Third-party URLs for tracking in-stream video creative events. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+        { # Third-party Tracking URL.
+          "url": "A String", # URL for the specified third-party URL type.
+          "thirdPartyUrlType": "A String", # Third-party URL type for in-stream video creatives.
+        },
+      ],
+      "artworkType": "A String", # Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "latestTraffickedCreativeId": "A String", # Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "videoDescription": "A String", # Description of the video ad. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "advertiserId": "A String", # Advertiser ID of this creative. This is a required field. Applicable to all creative types.
+      "requiredFlashPluginVersion": "A String", # The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "thirdPartyBackupImageImpressionsUrl": "A String", # Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.
+      "timerCustomEvents": [ # List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "renderingIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "fsCommand": { # FsCommand. # OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE.
+        "windowHeight": 42, # Height of the window.
+        "top": 42, # Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+        "windowWidth": 42, # Width of the window.
+        "positionOption": "A String", # Position in the browser where the window will open.
+        "left": 42, # Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+      },
+      "id": "A String", # ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.
+      "accountId": "A String", # Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+      "studioTraffickedCreativeId": "A String", # Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "archived": True or False, # Whether the creative is archived. Applicable to all creative types.
+      "overrideCss": "A String", # Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.
+      "authoringSource": "A String", # Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.
+      "requiredFlashVersion": 42, # The internal Flash version for this creative as calculated by DoubleClick Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "exitCustomEvents": [ # List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "renderingId": "A String", # ID of current rendering version. This is a read-only field. Applicable to all creative types.
+      "counterCustomEvents": [ # List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "backupImageReportingLabel": "A String", # Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.
+      "version": 42, # The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.
+      "creativeFieldAssignments": [ # Creative field assignments for this creative. Applicable to all creative types.
+        { # Creative Field Assignment.
+          "creativeFieldId": "A String", # ID of the creative field.
+          "creativeFieldValueId": "A String", # ID of the creative field value.
+        },
+      ],
+      "backgroundColor": "A String", # The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.
+      "customKeyValues": [ # Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+        "A String",
+      ],
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "htmlCode": "A String", # HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is false. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "type": "A String", # Type of this creative.This is a required field. Applicable to all creative types.
+      "totalFileSize": "A String", # Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "thirdPartyRichMediaImpressionsUrl": "A String", # Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.
+      "studioAdvertiserId": "A String", # Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "creativeAssets": [ # Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT
+        { # Creative Asset.
+          "mimeType": "A String", # Detected MIME type for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "artworkType": "A String", # Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "positionLeftUnit": "A String", # Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "collapsedSize": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "flashVersion": 42, # Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "pushdown": True or False, # Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+          "hideFlashObjects": True or False, # Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "A String",
+          ],
+          "duration": 42, # Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_VIDEO and VPAID_LINEAR_VIDEO.
+          "positionTopUnit": "A String", # Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.
+          "id": "A String", # Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "alignment": "A String", # Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL.
+          "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "horizontallyLocked": True or False, # Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "startTimeType": "A String", # Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+          "displayType": "A String", # Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "expandedDimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "verticallyLocked": True or False, # Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "role": "A String", # Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field.
+              # PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives.
+              # BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+              # ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives.
+              # OTHER refers to assets from sources other than DCM, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives.
+              # PARENT_VIDEO refers to videos uploaded by the user in DCM and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+              # TRANSCODED_VIDEO refers to videos transcoded by DCM from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+              # ALTERNATE_VIDEO refers to the DCM representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within DCM.
+              # For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative.
+          "zipFilesize": "A String", # Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+          "bitRate": 42, # Detected bit-rate for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "windowMode": "A String", # Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.
+          "progressiveServingUrl": "A String", # Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "durationType": "A String", # Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.
+          "videoDuration": 3.14, # Detected video duration for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "fileSize": "A String", # File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "zipFilename": "A String", # File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+          "offset": { # Offset Position. # Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "active": True or False, # Whether the video asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "originalBackup": True or False, # Whether the backup asset is original or changed by the user in DCM. Applicable to the following creative types: all RICH_MEDIA.
+          "hideSelectionBoxes": True or False, # Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "streamingServingUrl": "A String", # Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "zIndex": 42, # zIndex value of an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY.
+          "childAssetType": "A String", # Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.
+          "backupImageExit": { # Creative Custom Event. # Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.
+            "targetType": "A String", # Target type used by the event.
+            "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+            "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+            "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+              "showStatusBar": True or False, # Whether to display the browser status bar.
+              "showScrollBar": True or False, # Whether to display the browser scroll bar.
+              "showAddressBar": True or False, # Whether to display the browser address bar.
+              "showMenuBar": True or False, # Whether to display the browser menu bar.
+              "title": "A String", # Title of popup window.
+              "showToolBar": True or False, # Whether to display the browser tool bar.
+              "positionType": "A String", # Popup window position either centered or at specific coordinate.
+              "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+                "top": 42, # Offset distance from top side of an asset or a window.
+                "left": 42, # Offset distance from left side of an asset or a window.
+              },
+              "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+                "width": 42, # Width of this size.
+                "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                "height": 42, # Height of this size.
+              },
+            },
+            "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+            "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+            "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+            "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+            "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+            "advertiserCustomEventName": "A String", # User-entered name for the event.
+          },
+          "actionScript3": True or False, # Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "pushdownDuration": 3.14, # Pushdown duration in seconds for an asset. Must be between 0 and 9.99. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+          "assetIdentifier": { # Creative Asset ID. # Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+            "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+            "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+          },
+          "transparency": True or False, # Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.
+          "sslCompliant": True or False, # Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "position": { # Offset Position. # Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "customStartTimeValue": 42, # Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+        },
+      ],
+      "redirectUrl": "A String", # URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT
+      "videoDuration": 3.14, # Creative video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, all RICH_MEDIA, and all VPAID.
+      "htmlCodeLocked": True or False, # Whether HTML code is DCM-generated or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.
+      "convertFlashToHtml5": True or False, # Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "clickTags": [ # Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        { # Creative Click Tag.
+          "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+          "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+          "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+        },
+      ],
+      "commercialId": "A String", # Industry standard ID assigned to creative for reach and frequency. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "active": True or False, # Whether the creative is active. Applicable to all creative types.
+      "compatibility": [ # Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL  are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. Applicable to all creative types.
+          #
+          # Acceptable values are:
+          # - "APP"
+          # - "APP_INTERSTITIAL"
+          # - "IN_STREAM_VIDEO"
+          # - "DISPLAY"
+          # - "DISPLAY_INTERSTITIAL"
+        "A String",
+      ],
+      "adParameters": "A String", # Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.
+      "adTagKeys": [ # Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+        "A String",
+      ],
+      "kind": "dfareporting#creative", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creative".
+      "subaccountId": "A String", # Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+      "name": "A String", # Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.
+      "sslOverride": True or False, # Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.
+      "lastModifiedInfo": { # Modification timestamp. # Creative last modification information. This is a read-only field. Applicable to all creative types.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "backupImageClickThroughUrl": "A String", # Click-through URL for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "sslCompliant": True or False, # Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.
+      "studioCreativeId": "A String", # Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "authoringTool": "A String", # Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+      "allowScriptAccess": True or False, # Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.
+      "companionCreatives": [ # List of companion creatives assigned to an in-Stream videocreative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+        "A String",
+      ],
+      "auto_advance_images": True or False, # Whether images are automatically advanced for enhanced image creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.
+      "backupImageFeatures": [ # List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by DCM for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "A String",
+      ],
+      "backupImageTargetWindow": { # Target Window. # Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "customHtml": "A String", # User-entered value.
+        "targetWindowOption": "A String", # Type of browser window for which the backup image of the flash creative can be displayed.
+      },
+      "skippable": True or False, # Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, campaignId=None, advertiserId=None, sizeIds=None, archived=None, pageToken=None, sortOrder=None, renderingIds=None, maxResults=None, active=None, companionCreativeIds=None, types=None, searchString=None, ids=None, studioCreativeId=None, sortField=None, creativeFieldIds=None)</code>
+  <pre>Retrieves a list of creatives, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Select only creatives with this campaign ID.
+  advertiserId: string, Select only creatives with this advertiser ID.
+  sizeIds: string, Select only creatives with these size IDs. (repeated)
+  archived: boolean, Select only archived creatives. Leave blank to select archived and unarchived creatives.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  renderingIds: string, Select only creatives with these rendering IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  active: boolean, Select only active creatives. Leave blank to select active and inactive creatives.
+  companionCreativeIds: string, Select only in-stream video creatives with these companion IDs. (repeated)
+  types: string, Select only creatives with these creative types. (repeated)
+    Allowed values
+      BRAND_SAFE_DEFAULT_INSTREAM_VIDEO - 
+      CUSTOM_DISPLAY - 
+      CUSTOM_DISPLAY_INTERSTITIAL - 
+      DISPLAY - 
+      DISPLAY_IMAGE_GALLERY - 
+      DISPLAY_REDIRECT - 
+      FLASH_INPAGE - 
+      HTML5_BANNER - 
+      IMAGE - 
+      INSTREAM_VIDEO - 
+      INSTREAM_VIDEO_REDIRECT - 
+      INTERNAL_REDIRECT - 
+      INTERSTITIAL_INTERNAL_REDIRECT - 
+      RICH_MEDIA_DISPLAY_BANNER - 
+      RICH_MEDIA_DISPLAY_EXPANDING - 
+      RICH_MEDIA_DISPLAY_INTERSTITIAL - 
+      RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL - 
+      RICH_MEDIA_IM_EXPAND - 
+      RICH_MEDIA_INPAGE_FLOATING - 
+      RICH_MEDIA_MOBILE_IN_APP - 
+      RICH_MEDIA_PEEL_DOWN - 
+      TRACKING_TEXT - 
+      VPAID_LINEAR_VIDEO - 
+      VPAID_NON_LINEAR_VIDEO - 
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "creative*2015" will return objects with names like "creative June 2015", "creative April 2015", or simply "creative 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "creative" will match objects with name "my creative", "creative 2015", or simply "creative".
+  ids: string, Select only creatives with these IDs. (repeated)
+  studioCreativeId: string, Select only creatives corresponding to this Studio creative ID.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  creativeFieldIds: string, Select only creatives with these creative field IDs. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Creative List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#creativesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creativesListResponse".
+    "creatives": [ # Creative collection.
+      { # Contains properties of a Creative.
+          "thirdPartyUrls": [ # Third-party URLs for tracking in-stream video creative events. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+            { # Third-party Tracking URL.
+              "url": "A String", # URL for the specified third-party URL type.
+              "thirdPartyUrlType": "A String", # Third-party URL type for in-stream video creatives.
+            },
+          ],
+          "artworkType": "A String", # Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+          "latestTraffickedCreativeId": "A String", # Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+          "videoDescription": "A String", # Description of the video ad. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+          "advertiserId": "A String", # Advertiser ID of this creative. This is a required field. Applicable to all creative types.
+          "requiredFlashPluginVersion": "A String", # The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+          "thirdPartyBackupImageImpressionsUrl": "A String", # Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.
+          "timerCustomEvents": [ # List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.
+            { # Creative Custom Event.
+              "targetType": "A String", # Target type used by the event.
+              "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+              "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+              "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+                "showStatusBar": True or False, # Whether to display the browser status bar.
+                "showScrollBar": True or False, # Whether to display the browser scroll bar.
+                "showAddressBar": True or False, # Whether to display the browser address bar.
+                "showMenuBar": True or False, # Whether to display the browser menu bar.
+                "title": "A String", # Title of popup window.
+                "showToolBar": True or False, # Whether to display the browser tool bar.
+                "positionType": "A String", # Popup window position either centered or at specific coordinate.
+                "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+                  "top": 42, # Offset distance from top side of an asset or a window.
+                  "left": 42, # Offset distance from left side of an asset or a window.
+                },
+                "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+                  "width": 42, # Width of this size.
+                  "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                  "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                  "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                  "height": 42, # Height of this size.
+                },
+              },
+              "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+              "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+              "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+              "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+              "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+              "advertiserCustomEventName": "A String", # User-entered name for the event.
+            },
+          ],
+          "renderingIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "fsCommand": { # FsCommand. # OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE.
+            "windowHeight": 42, # Height of the window.
+            "top": 42, # Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+            "windowWidth": 42, # Width of the window.
+            "positionOption": "A String", # Position in the browser where the window will open.
+            "left": 42, # Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+          },
+          "id": "A String", # ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.
+          "accountId": "A String", # Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+          "studioTraffickedCreativeId": "A String", # Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+          "archived": True or False, # Whether the creative is archived. Applicable to all creative types.
+          "overrideCss": "A String", # Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.
+          "authoringSource": "A String", # Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.
+          "requiredFlashVersion": 42, # The internal Flash version for this creative as calculated by DoubleClick Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "exitCustomEvents": [ # List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            { # Creative Custom Event.
+              "targetType": "A String", # Target type used by the event.
+              "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+              "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+              "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+                "showStatusBar": True or False, # Whether to display the browser status bar.
+                "showScrollBar": True or False, # Whether to display the browser scroll bar.
+                "showAddressBar": True or False, # Whether to display the browser address bar.
+                "showMenuBar": True or False, # Whether to display the browser menu bar.
+                "title": "A String", # Title of popup window.
+                "showToolBar": True or False, # Whether to display the browser tool bar.
+                "positionType": "A String", # Popup window position either centered or at specific coordinate.
+                "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+                  "top": 42, # Offset distance from top side of an asset or a window.
+                  "left": 42, # Offset distance from left side of an asset or a window.
+                },
+                "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+                  "width": 42, # Width of this size.
+                  "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                  "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                  "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                  "height": 42, # Height of this size.
+                },
+              },
+              "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+              "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+              "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+              "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+              "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+              "advertiserCustomEventName": "A String", # User-entered name for the event.
+            },
+          ],
+          "renderingId": "A String", # ID of current rendering version. This is a read-only field. Applicable to all creative types.
+          "counterCustomEvents": [ # List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.
+            { # Creative Custom Event.
+              "targetType": "A String", # Target type used by the event.
+              "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+              "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+              "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+                "showStatusBar": True or False, # Whether to display the browser status bar.
+                "showScrollBar": True or False, # Whether to display the browser scroll bar.
+                "showAddressBar": True or False, # Whether to display the browser address bar.
+                "showMenuBar": True or False, # Whether to display the browser menu bar.
+                "title": "A String", # Title of popup window.
+                "showToolBar": True or False, # Whether to display the browser tool bar.
+                "positionType": "A String", # Popup window position either centered or at specific coordinate.
+                "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+                  "top": 42, # Offset distance from top side of an asset or a window.
+                  "left": 42, # Offset distance from left side of an asset or a window.
+                },
+                "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+                  "width": 42, # Width of this size.
+                  "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                  "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                  "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                  "height": 42, # Height of this size.
+                },
+              },
+              "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+              "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+              "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+              "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+              "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+              "advertiserCustomEventName": "A String", # User-entered name for the event.
+            },
+          ],
+          "backupImageReportingLabel": "A String", # Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.
+          "version": 42, # The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.
+          "creativeFieldAssignments": [ # Creative field assignments for this creative. Applicable to all creative types.
+            { # Creative Field Assignment.
+              "creativeFieldId": "A String", # ID of the creative field.
+              "creativeFieldValueId": "A String", # ID of the creative field value.
+            },
+          ],
+          "backgroundColor": "A String", # The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.
+          "customKeyValues": [ # Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+            "A String",
+          ],
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "htmlCode": "A String", # HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is false. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.
+          "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "type": "A String", # Type of this creative.This is a required field. Applicable to all creative types.
+          "totalFileSize": "A String", # Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+          "thirdPartyRichMediaImpressionsUrl": "A String", # Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.
+          "studioAdvertiserId": "A String", # Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+          "creativeAssets": [ # Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT
+            { # Creative Asset.
+              "mimeType": "A String", # Detected MIME type for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+              "artworkType": "A String", # Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+              "positionLeftUnit": "A String", # Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+              "collapsedSize": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+                "width": 42, # Width of this size.
+                "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                "height": 42, # Height of this size.
+              },
+              "flashVersion": 42, # Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+              "pushdown": True or False, # Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+              "hideFlashObjects": True or False, # Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+              "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+                "A String",
+              ],
+              "duration": 42, # Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_VIDEO and VPAID_LINEAR_VIDEO.
+              "positionTopUnit": "A String", # Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.
+              "id": "A String", # Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+              "alignment": "A String", # Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL.
+              "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+                "width": 42, # Width of this size.
+                "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                "height": 42, # Height of this size.
+              },
+              "horizontallyLocked": True or False, # Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+              "startTimeType": "A String", # Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+              "displayType": "A String", # Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+              "expandedDimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+                "width": 42, # Width of this size.
+                "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                "height": 42, # Height of this size.
+              },
+              "verticallyLocked": True or False, # Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+              "role": "A String", # Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field.
+                  # PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives.
+                  # BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+                  # ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives.
+                  # OTHER refers to assets from sources other than DCM, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives.
+                  # PARENT_VIDEO refers to videos uploaded by the user in DCM and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+                  # TRANSCODED_VIDEO refers to videos transcoded by DCM from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+                  # ALTERNATE_VIDEO refers to the DCM representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within DCM.
+                  # For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative.
+              "zipFilesize": "A String", # Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+              "bitRate": 42, # Detected bit-rate for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+              "windowMode": "A String", # Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.
+              "progressiveServingUrl": "A String", # Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+              "durationType": "A String", # Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.
+              "videoDuration": 3.14, # Detected video duration for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+              "fileSize": "A String", # File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+              "zipFilename": "A String", # File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+              "offset": { # Offset Position. # Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+                "top": 42, # Offset distance from top side of an asset or a window.
+                "left": 42, # Offset distance from left side of an asset or a window.
+              },
+              "active": True or False, # Whether the video asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+              "originalBackup": True or False, # Whether the backup asset is original or changed by the user in DCM. Applicable to the following creative types: all RICH_MEDIA.
+              "hideSelectionBoxes": True or False, # Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+              "streamingServingUrl": "A String", # Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+              "zIndex": 42, # zIndex value of an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY.
+              "childAssetType": "A String", # Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.
+              "backupImageExit": { # Creative Custom Event. # Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.
+                "targetType": "A String", # Target type used by the event.
+                "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+                "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+                "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+                  "showStatusBar": True or False, # Whether to display the browser status bar.
+                  "showScrollBar": True or False, # Whether to display the browser scroll bar.
+                  "showAddressBar": True or False, # Whether to display the browser address bar.
+                  "showMenuBar": True or False, # Whether to display the browser menu bar.
+                  "title": "A String", # Title of popup window.
+                  "showToolBar": True or False, # Whether to display the browser tool bar.
+                  "positionType": "A String", # Popup window position either centered or at specific coordinate.
+                  "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+                    "top": 42, # Offset distance from top side of an asset or a window.
+                    "left": 42, # Offset distance from left side of an asset or a window.
+                  },
+                  "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+                    "width": 42, # Width of this size.
+                    "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                    "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                    "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                    "height": 42, # Height of this size.
+                  },
+                },
+                "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+                "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+                "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+                "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+                "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+                "advertiserCustomEventName": "A String", # User-entered name for the event.
+              },
+              "actionScript3": True or False, # Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+              "pushdownDuration": 3.14, # Pushdown duration in seconds for an asset. Must be between 0 and 9.99. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+              "assetIdentifier": { # Creative Asset ID. # Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+                "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+                "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+              },
+              "transparency": True or False, # Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.
+              "sslCompliant": True or False, # Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+              "position": { # Offset Position. # Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.
+                "top": 42, # Offset distance from top side of an asset or a window.
+                "left": 42, # Offset distance from left side of an asset or a window.
+              },
+              "customStartTimeValue": 42, # Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+            },
+          ],
+          "redirectUrl": "A String", # URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT
+          "videoDuration": 3.14, # Creative video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, all RICH_MEDIA, and all VPAID.
+          "htmlCodeLocked": True or False, # Whether HTML code is DCM-generated or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.
+          "convertFlashToHtml5": True or False, # Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "clickTags": [ # Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            { # Creative Click Tag.
+              "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+              "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+              "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+            },
+          ],
+          "commercialId": "A String", # Industry standard ID assigned to creative for reach and frequency. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+          "active": True or False, # Whether the creative is active. Applicable to all creative types.
+          "compatibility": [ # Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL  are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. Applicable to all creative types.
+              #
+              # Acceptable values are:
+              # - "APP"
+              # - "APP_INTERSTITIAL"
+              # - "IN_STREAM_VIDEO"
+              # - "DISPLAY"
+              # - "DISPLAY_INTERSTITIAL"
+            "A String",
+          ],
+          "adParameters": "A String", # Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.
+          "adTagKeys": [ # Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+            "A String",
+          ],
+          "kind": "dfareporting#creative", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creative".
+          "subaccountId": "A String", # Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+          "name": "A String", # Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.
+          "sslOverride": True or False, # Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.
+          "lastModifiedInfo": { # Modification timestamp. # Creative last modification information. This is a read-only field. Applicable to all creative types.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "backupImageClickThroughUrl": "A String", # Click-through URL for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "sslCompliant": True or False, # Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.
+          "studioCreativeId": "A String", # Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+          "authoringTool": "A String", # Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+          "allowScriptAccess": True or False, # Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.
+          "companionCreatives": [ # List of companion creatives assigned to an in-Stream videocreative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+            "A String",
+          ],
+          "auto_advance_images": True or False, # Whether images are automatically advanced for enhanced image creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.
+          "backupImageFeatures": [ # List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by DCM for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "A String",
+          ],
+          "backupImageTargetWindow": { # Target Window. # Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "customHtml": "A String", # User-entered value.
+            "targetWindowOption": "A String", # Type of browser window for which the backup image of the flash creative can be displayed.
+          },
+          "skippable": True or False, # Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing creative. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Creative ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Creative.
+    "thirdPartyUrls": [ # Third-party URLs for tracking in-stream video creative events. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      { # Third-party Tracking URL.
+        "url": "A String", # URL for the specified third-party URL type.
+        "thirdPartyUrlType": "A String", # Third-party URL type for in-stream video creatives.
+      },
+    ],
+    "artworkType": "A String", # Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "latestTraffickedCreativeId": "A String", # Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "videoDescription": "A String", # Description of the video ad. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    "advertiserId": "A String", # Advertiser ID of this creative. This is a required field. Applicable to all creative types.
+    "requiredFlashPluginVersion": "A String", # The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "thirdPartyBackupImageImpressionsUrl": "A String", # Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.
+    "timerCustomEvents": [ # List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.
+      { # Creative Custom Event.
+        "targetType": "A String", # Target type used by the event.
+        "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+        "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+        "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+          "showStatusBar": True or False, # Whether to display the browser status bar.
+          "showScrollBar": True or False, # Whether to display the browser scroll bar.
+          "showAddressBar": True or False, # Whether to display the browser address bar.
+          "showMenuBar": True or False, # Whether to display the browser menu bar.
+          "title": "A String", # Title of popup window.
+          "showToolBar": True or False, # Whether to display the browser tool bar.
+          "positionType": "A String", # Popup window position either centered or at specific coordinate.
+          "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+        },
+        "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+        "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+        "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+        "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventName": "A String", # User-entered name for the event.
+      },
+    ],
+    "renderingIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "fsCommand": { # FsCommand. # OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE.
+      "windowHeight": 42, # Height of the window.
+      "top": 42, # Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+      "windowWidth": 42, # Width of the window.
+      "positionOption": "A String", # Position in the browser where the window will open.
+      "left": 42, # Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+    },
+    "id": "A String", # ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.
+    "accountId": "A String", # Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+    "studioTraffickedCreativeId": "A String", # Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "archived": True or False, # Whether the creative is archived. Applicable to all creative types.
+    "overrideCss": "A String", # Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.
+    "authoringSource": "A String", # Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.
+    "requiredFlashVersion": 42, # The internal Flash version for this creative as calculated by DoubleClick Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+    "exitCustomEvents": [ # List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      { # Creative Custom Event.
+        "targetType": "A String", # Target type used by the event.
+        "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+        "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+        "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+          "showStatusBar": True or False, # Whether to display the browser status bar.
+          "showScrollBar": True or False, # Whether to display the browser scroll bar.
+          "showAddressBar": True or False, # Whether to display the browser address bar.
+          "showMenuBar": True or False, # Whether to display the browser menu bar.
+          "title": "A String", # Title of popup window.
+          "showToolBar": True or False, # Whether to display the browser tool bar.
+          "positionType": "A String", # Popup window position either centered or at specific coordinate.
+          "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+        },
+        "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+        "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+        "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+        "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventName": "A String", # User-entered name for the event.
+      },
+    ],
+    "renderingId": "A String", # ID of current rendering version. This is a read-only field. Applicable to all creative types.
+    "counterCustomEvents": [ # List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.
+      { # Creative Custom Event.
+        "targetType": "A String", # Target type used by the event.
+        "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+        "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+        "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+          "showStatusBar": True or False, # Whether to display the browser status bar.
+          "showScrollBar": True or False, # Whether to display the browser scroll bar.
+          "showAddressBar": True or False, # Whether to display the browser address bar.
+          "showMenuBar": True or False, # Whether to display the browser menu bar.
+          "title": "A String", # Title of popup window.
+          "showToolBar": True or False, # Whether to display the browser tool bar.
+          "positionType": "A String", # Popup window position either centered or at specific coordinate.
+          "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+        },
+        "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+        "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+        "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+        "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventName": "A String", # User-entered name for the event.
+      },
+    ],
+    "backupImageReportingLabel": "A String", # Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.
+    "version": 42, # The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.
+    "creativeFieldAssignments": [ # Creative field assignments for this creative. Applicable to all creative types.
+      { # Creative Field Assignment.
+        "creativeFieldId": "A String", # ID of the creative field.
+        "creativeFieldValueId": "A String", # ID of the creative field value.
+      },
+    ],
+    "backgroundColor": "A String", # The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.
+    "customKeyValues": [ # Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "A String",
+    ],
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "htmlCode": "A String", # HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is false. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.
+    "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.
+      "width": 42, # Width of this size.
+      "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+      "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+      "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+      "height": 42, # Height of this size.
+    },
+    "type": "A String", # Type of this creative.This is a required field. Applicable to all creative types.
+    "totalFileSize": "A String", # Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "thirdPartyRichMediaImpressionsUrl": "A String", # Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.
+    "studioAdvertiserId": "A String", # Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "creativeAssets": [ # Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT
+      { # Creative Asset.
+        "mimeType": "A String", # Detected MIME type for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "artworkType": "A String", # Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "positionLeftUnit": "A String", # Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "collapsedSize": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+          "width": 42, # Width of this size.
+          "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+          "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+          "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+          "height": 42, # Height of this size.
+        },
+        "flashVersion": 42, # Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "pushdown": True or False, # Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+        "hideFlashObjects": True or False, # Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+        "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "A String",
+        ],
+        "duration": 42, # Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_VIDEO and VPAID_LINEAR_VIDEO.
+        "positionTopUnit": "A String", # Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.
+        "id": "A String", # Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+        "alignment": "A String", # Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL.
+        "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "width": 42, # Width of this size.
+          "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+          "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+          "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+          "height": 42, # Height of this size.
+        },
+        "horizontallyLocked": True or False, # Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "startTimeType": "A String", # Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+        "displayType": "A String", # Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "expandedDimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "width": 42, # Width of this size.
+          "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+          "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+          "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+          "height": 42, # Height of this size.
+        },
+        "verticallyLocked": True or False, # Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "role": "A String", # Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field.
+            # PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives.
+            # BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            # ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives.
+            # OTHER refers to assets from sources other than DCM, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives.
+            # PARENT_VIDEO refers to videos uploaded by the user in DCM and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+            # TRANSCODED_VIDEO refers to videos transcoded by DCM from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+            # ALTERNATE_VIDEO refers to the DCM representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within DCM.
+            # For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative.
+        "zipFilesize": "A String", # Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+        "bitRate": 42, # Detected bit-rate for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "windowMode": "A String", # Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.
+        "progressiveServingUrl": "A String", # Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "durationType": "A String", # Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.
+        "videoDuration": 3.14, # Detected video duration for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "fileSize": "A String", # File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+        "zipFilename": "A String", # File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+        "offset": { # Offset Position. # Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+          "top": 42, # Offset distance from top side of an asset or a window.
+          "left": 42, # Offset distance from left side of an asset or a window.
+        },
+        "active": True or False, # Whether the video asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "originalBackup": True or False, # Whether the backup asset is original or changed by the user in DCM. Applicable to the following creative types: all RICH_MEDIA.
+        "hideSelectionBoxes": True or False, # Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+        "streamingServingUrl": "A String", # Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "zIndex": 42, # zIndex value of an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY.
+        "childAssetType": "A String", # Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.
+        "backupImageExit": { # Creative Custom Event. # Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+        "actionScript3": True or False, # Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "pushdownDuration": 3.14, # Pushdown duration in seconds for an asset. Must be between 0 and 9.99. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+        "assetIdentifier": { # Creative Asset ID. # Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+          "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+        },
+        "transparency": True or False, # Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.
+        "sslCompliant": True or False, # Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+        "position": { # Offset Position. # Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "top": 42, # Offset distance from top side of an asset or a window.
+          "left": 42, # Offset distance from left side of an asset or a window.
+        },
+        "customStartTimeValue": 42, # Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+      },
+    ],
+    "redirectUrl": "A String", # URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT
+    "videoDuration": 3.14, # Creative video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, all RICH_MEDIA, and all VPAID.
+    "htmlCodeLocked": True or False, # Whether HTML code is DCM-generated or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.
+    "convertFlashToHtml5": True or False, # Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+    "clickTags": [ # Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      { # Creative Click Tag.
+        "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+        "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+        "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+      },
+    ],
+    "commercialId": "A String", # Industry standard ID assigned to creative for reach and frequency. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    "active": True or False, # Whether the creative is active. Applicable to all creative types.
+    "compatibility": [ # Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL  are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. Applicable to all creative types.
+        # 
+        # Acceptable values are:
+        # - "APP"
+        # - "APP_INTERSTITIAL"
+        # - "IN_STREAM_VIDEO"
+        # - "DISPLAY"
+        # - "DISPLAY_INTERSTITIAL"
+      "A String",
+    ],
+    "adParameters": "A String", # Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.
+    "adTagKeys": [ # Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "A String",
+    ],
+    "kind": "dfareporting#creative", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creative".
+    "subaccountId": "A String", # Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+    "name": "A String", # Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.
+    "sslOverride": True or False, # Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.
+    "lastModifiedInfo": { # Modification timestamp. # Creative last modification information. This is a read-only field. Applicable to all creative types.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "backupImageClickThroughUrl": "A String", # Click-through URL for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+    "sslCompliant": True or False, # Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.
+    "studioCreativeId": "A String", # Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "authoringTool": "A String", # Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+    "allowScriptAccess": True or False, # Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.
+    "companionCreatives": [ # List of companion creatives assigned to an in-Stream videocreative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "A String",
+    ],
+    "auto_advance_images": True or False, # Whether images are automatically advanced for enhanced image creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.
+    "backupImageFeatures": [ # List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by DCM for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "A String",
+    ],
+    "backupImageTargetWindow": { # Target Window. # Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "customHtml": "A String", # User-entered value.
+      "targetWindowOption": "A String", # Type of browser window for which the backup image of the flash creative can be displayed.
+    },
+    "skippable": True or False, # Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Creative.
+      "thirdPartyUrls": [ # Third-party URLs for tracking in-stream video creative events. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+        { # Third-party Tracking URL.
+          "url": "A String", # URL for the specified third-party URL type.
+          "thirdPartyUrlType": "A String", # Third-party URL type for in-stream video creatives.
+        },
+      ],
+      "artworkType": "A String", # Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "latestTraffickedCreativeId": "A String", # Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "videoDescription": "A String", # Description of the video ad. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "advertiserId": "A String", # Advertiser ID of this creative. This is a required field. Applicable to all creative types.
+      "requiredFlashPluginVersion": "A String", # The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "thirdPartyBackupImageImpressionsUrl": "A String", # Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.
+      "timerCustomEvents": [ # List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "renderingIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "fsCommand": { # FsCommand. # OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE.
+        "windowHeight": 42, # Height of the window.
+        "top": 42, # Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+        "windowWidth": 42, # Width of the window.
+        "positionOption": "A String", # Position in the browser where the window will open.
+        "left": 42, # Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+      },
+      "id": "A String", # ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.
+      "accountId": "A String", # Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+      "studioTraffickedCreativeId": "A String", # Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "archived": True or False, # Whether the creative is archived. Applicable to all creative types.
+      "overrideCss": "A String", # Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.
+      "authoringSource": "A String", # Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.
+      "requiredFlashVersion": 42, # The internal Flash version for this creative as calculated by DoubleClick Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "exitCustomEvents": [ # List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "renderingId": "A String", # ID of current rendering version. This is a read-only field. Applicable to all creative types.
+      "counterCustomEvents": [ # List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "backupImageReportingLabel": "A String", # Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.
+      "version": 42, # The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.
+      "creativeFieldAssignments": [ # Creative field assignments for this creative. Applicable to all creative types.
+        { # Creative Field Assignment.
+          "creativeFieldId": "A String", # ID of the creative field.
+          "creativeFieldValueId": "A String", # ID of the creative field value.
+        },
+      ],
+      "backgroundColor": "A String", # The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.
+      "customKeyValues": [ # Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+        "A String",
+      ],
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "htmlCode": "A String", # HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is false. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "type": "A String", # Type of this creative.This is a required field. Applicable to all creative types.
+      "totalFileSize": "A String", # Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "thirdPartyRichMediaImpressionsUrl": "A String", # Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.
+      "studioAdvertiserId": "A String", # Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "creativeAssets": [ # Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT
+        { # Creative Asset.
+          "mimeType": "A String", # Detected MIME type for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "artworkType": "A String", # Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "positionLeftUnit": "A String", # Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "collapsedSize": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "flashVersion": 42, # Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "pushdown": True or False, # Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+          "hideFlashObjects": True or False, # Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "A String",
+          ],
+          "duration": 42, # Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_VIDEO and VPAID_LINEAR_VIDEO.
+          "positionTopUnit": "A String", # Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.
+          "id": "A String", # Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "alignment": "A String", # Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL.
+          "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "horizontallyLocked": True or False, # Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "startTimeType": "A String", # Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+          "displayType": "A String", # Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "expandedDimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "verticallyLocked": True or False, # Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "role": "A String", # Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field.
+              # PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives.
+              # BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+              # ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives.
+              # OTHER refers to assets from sources other than DCM, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives.
+              # PARENT_VIDEO refers to videos uploaded by the user in DCM and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+              # TRANSCODED_VIDEO refers to videos transcoded by DCM from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+              # ALTERNATE_VIDEO refers to the DCM representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within DCM.
+              # For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative.
+          "zipFilesize": "A String", # Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+          "bitRate": 42, # Detected bit-rate for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "windowMode": "A String", # Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.
+          "progressiveServingUrl": "A String", # Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "durationType": "A String", # Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.
+          "videoDuration": 3.14, # Detected video duration for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "fileSize": "A String", # File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "zipFilename": "A String", # File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+          "offset": { # Offset Position. # Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "active": True or False, # Whether the video asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "originalBackup": True or False, # Whether the backup asset is original or changed by the user in DCM. Applicable to the following creative types: all RICH_MEDIA.
+          "hideSelectionBoxes": True or False, # Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "streamingServingUrl": "A String", # Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "zIndex": 42, # zIndex value of an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY.
+          "childAssetType": "A String", # Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.
+          "backupImageExit": { # Creative Custom Event. # Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.
+            "targetType": "A String", # Target type used by the event.
+            "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+            "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+            "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+              "showStatusBar": True or False, # Whether to display the browser status bar.
+              "showScrollBar": True or False, # Whether to display the browser scroll bar.
+              "showAddressBar": True or False, # Whether to display the browser address bar.
+              "showMenuBar": True or False, # Whether to display the browser menu bar.
+              "title": "A String", # Title of popup window.
+              "showToolBar": True or False, # Whether to display the browser tool bar.
+              "positionType": "A String", # Popup window position either centered or at specific coordinate.
+              "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+                "top": 42, # Offset distance from top side of an asset or a window.
+                "left": 42, # Offset distance from left side of an asset or a window.
+              },
+              "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+                "width": 42, # Width of this size.
+                "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                "height": 42, # Height of this size.
+              },
+            },
+            "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+            "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+            "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+            "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+            "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+            "advertiserCustomEventName": "A String", # User-entered name for the event.
+          },
+          "actionScript3": True or False, # Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "pushdownDuration": 3.14, # Pushdown duration in seconds for an asset. Must be between 0 and 9.99. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+          "assetIdentifier": { # Creative Asset ID. # Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+            "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+            "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+          },
+          "transparency": True or False, # Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.
+          "sslCompliant": True or False, # Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "position": { # Offset Position. # Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "customStartTimeValue": 42, # Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+        },
+      ],
+      "redirectUrl": "A String", # URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT
+      "videoDuration": 3.14, # Creative video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, all RICH_MEDIA, and all VPAID.
+      "htmlCodeLocked": True or False, # Whether HTML code is DCM-generated or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.
+      "convertFlashToHtml5": True or False, # Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "clickTags": [ # Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        { # Creative Click Tag.
+          "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+          "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+          "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+        },
+      ],
+      "commercialId": "A String", # Industry standard ID assigned to creative for reach and frequency. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "active": True or False, # Whether the creative is active. Applicable to all creative types.
+      "compatibility": [ # Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL  are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. Applicable to all creative types.
+          #
+          # Acceptable values are:
+          # - "APP"
+          # - "APP_INTERSTITIAL"
+          # - "IN_STREAM_VIDEO"
+          # - "DISPLAY"
+          # - "DISPLAY_INTERSTITIAL"
+        "A String",
+      ],
+      "adParameters": "A String", # Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.
+      "adTagKeys": [ # Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+        "A String",
+      ],
+      "kind": "dfareporting#creative", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creative".
+      "subaccountId": "A String", # Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+      "name": "A String", # Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.
+      "sslOverride": True or False, # Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.
+      "lastModifiedInfo": { # Modification timestamp. # Creative last modification information. This is a read-only field. Applicable to all creative types.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "backupImageClickThroughUrl": "A String", # Click-through URL for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "sslCompliant": True or False, # Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.
+      "studioCreativeId": "A String", # Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "authoringTool": "A String", # Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+      "allowScriptAccess": True or False, # Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.
+      "companionCreatives": [ # List of companion creatives assigned to an in-Stream videocreative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+        "A String",
+      ],
+      "auto_advance_images": True or False, # Whether images are automatically advanced for enhanced image creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.
+      "backupImageFeatures": [ # List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by DCM for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "A String",
+      ],
+      "backupImageTargetWindow": { # Target Window. # Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "customHtml": "A String", # User-entered value.
+        "targetWindowOption": "A String", # Type of browser window for which the backup image of the flash creative can be displayed.
+      },
+      "skippable": True or False, # Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing creative.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Creative.
+    "thirdPartyUrls": [ # Third-party URLs for tracking in-stream video creative events. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      { # Third-party Tracking URL.
+        "url": "A String", # URL for the specified third-party URL type.
+        "thirdPartyUrlType": "A String", # Third-party URL type for in-stream video creatives.
+      },
+    ],
+    "artworkType": "A String", # Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "latestTraffickedCreativeId": "A String", # Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "videoDescription": "A String", # Description of the video ad. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    "advertiserId": "A String", # Advertiser ID of this creative. This is a required field. Applicable to all creative types.
+    "requiredFlashPluginVersion": "A String", # The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "thirdPartyBackupImageImpressionsUrl": "A String", # Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.
+    "timerCustomEvents": [ # List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.
+      { # Creative Custom Event.
+        "targetType": "A String", # Target type used by the event.
+        "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+        "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+        "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+          "showStatusBar": True or False, # Whether to display the browser status bar.
+          "showScrollBar": True or False, # Whether to display the browser scroll bar.
+          "showAddressBar": True or False, # Whether to display the browser address bar.
+          "showMenuBar": True or False, # Whether to display the browser menu bar.
+          "title": "A String", # Title of popup window.
+          "showToolBar": True or False, # Whether to display the browser tool bar.
+          "positionType": "A String", # Popup window position either centered or at specific coordinate.
+          "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+        },
+        "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+        "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+        "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+        "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventName": "A String", # User-entered name for the event.
+      },
+    ],
+    "renderingIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "fsCommand": { # FsCommand. # OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE.
+      "windowHeight": 42, # Height of the window.
+      "top": 42, # Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+      "windowWidth": 42, # Width of the window.
+      "positionOption": "A String", # Position in the browser where the window will open.
+      "left": 42, # Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+    },
+    "id": "A String", # ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.
+    "accountId": "A String", # Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+    "studioTraffickedCreativeId": "A String", # Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "archived": True or False, # Whether the creative is archived. Applicable to all creative types.
+    "overrideCss": "A String", # Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.
+    "authoringSource": "A String", # Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.
+    "requiredFlashVersion": 42, # The internal Flash version for this creative as calculated by DoubleClick Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+    "exitCustomEvents": [ # List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      { # Creative Custom Event.
+        "targetType": "A String", # Target type used by the event.
+        "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+        "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+        "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+          "showStatusBar": True or False, # Whether to display the browser status bar.
+          "showScrollBar": True or False, # Whether to display the browser scroll bar.
+          "showAddressBar": True or False, # Whether to display the browser address bar.
+          "showMenuBar": True or False, # Whether to display the browser menu bar.
+          "title": "A String", # Title of popup window.
+          "showToolBar": True or False, # Whether to display the browser tool bar.
+          "positionType": "A String", # Popup window position either centered or at specific coordinate.
+          "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+        },
+        "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+        "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+        "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+        "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventName": "A String", # User-entered name for the event.
+      },
+    ],
+    "renderingId": "A String", # ID of current rendering version. This is a read-only field. Applicable to all creative types.
+    "counterCustomEvents": [ # List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.
+      { # Creative Custom Event.
+        "targetType": "A String", # Target type used by the event.
+        "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+        "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+        "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+          "showStatusBar": True or False, # Whether to display the browser status bar.
+          "showScrollBar": True or False, # Whether to display the browser scroll bar.
+          "showAddressBar": True or False, # Whether to display the browser address bar.
+          "showMenuBar": True or False, # Whether to display the browser menu bar.
+          "title": "A String", # Title of popup window.
+          "showToolBar": True or False, # Whether to display the browser tool bar.
+          "positionType": "A String", # Popup window position either centered or at specific coordinate.
+          "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+        },
+        "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+        "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+        "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+        "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+        "advertiserCustomEventName": "A String", # User-entered name for the event.
+      },
+    ],
+    "backupImageReportingLabel": "A String", # Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.
+    "version": 42, # The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.
+    "creativeFieldAssignments": [ # Creative field assignments for this creative. Applicable to all creative types.
+      { # Creative Field Assignment.
+        "creativeFieldId": "A String", # ID of the creative field.
+        "creativeFieldValueId": "A String", # ID of the creative field value.
+      },
+    ],
+    "backgroundColor": "A String", # The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.
+    "customKeyValues": [ # Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "A String",
+    ],
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "htmlCode": "A String", # HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is false. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.
+    "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.
+      "width": 42, # Width of this size.
+      "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+      "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+      "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+      "height": 42, # Height of this size.
+    },
+    "type": "A String", # Type of this creative.This is a required field. Applicable to all creative types.
+    "totalFileSize": "A String", # Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "thirdPartyRichMediaImpressionsUrl": "A String", # Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.
+    "studioAdvertiserId": "A String", # Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "creativeAssets": [ # Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT
+      { # Creative Asset.
+        "mimeType": "A String", # Detected MIME type for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "artworkType": "A String", # Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "positionLeftUnit": "A String", # Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "collapsedSize": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+          "width": 42, # Width of this size.
+          "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+          "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+          "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+          "height": 42, # Height of this size.
+        },
+        "flashVersion": 42, # Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "pushdown": True or False, # Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+        "hideFlashObjects": True or False, # Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+        "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "A String",
+        ],
+        "duration": 42, # Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_VIDEO and VPAID_LINEAR_VIDEO.
+        "positionTopUnit": "A String", # Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.
+        "id": "A String", # Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+        "alignment": "A String", # Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL.
+        "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "width": 42, # Width of this size.
+          "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+          "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+          "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+          "height": 42, # Height of this size.
+        },
+        "horizontallyLocked": True or False, # Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "startTimeType": "A String", # Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+        "displayType": "A String", # Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "expandedDimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "width": 42, # Width of this size.
+          "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+          "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+          "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+          "height": 42, # Height of this size.
+        },
+        "verticallyLocked": True or False, # Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+        "role": "A String", # Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field.
+            # PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives.
+            # BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            # ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives.
+            # OTHER refers to assets from sources other than DCM, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives.
+            # PARENT_VIDEO refers to videos uploaded by the user in DCM and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+            # TRANSCODED_VIDEO refers to videos transcoded by DCM from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+            # ALTERNATE_VIDEO refers to the DCM representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within DCM.
+            # For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative.
+        "zipFilesize": "A String", # Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+        "bitRate": 42, # Detected bit-rate for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "windowMode": "A String", # Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.
+        "progressiveServingUrl": "A String", # Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "durationType": "A String", # Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.
+        "videoDuration": 3.14, # Detected video duration for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "fileSize": "A String", # File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+        "zipFilename": "A String", # File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+        "offset": { # Offset Position. # Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+          "top": 42, # Offset distance from top side of an asset or a window.
+          "left": 42, # Offset distance from left side of an asset or a window.
+        },
+        "active": True or False, # Whether the video asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "originalBackup": True or False, # Whether the backup asset is original or changed by the user in DCM. Applicable to the following creative types: all RICH_MEDIA.
+        "hideSelectionBoxes": True or False, # Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+        "streamingServingUrl": "A String", # Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+        "zIndex": 42, # zIndex value of an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY.
+        "childAssetType": "A String", # Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.
+        "backupImageExit": { # Creative Custom Event. # Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+        "actionScript3": True or False, # Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "pushdownDuration": 3.14, # Pushdown duration in seconds for an asset. Must be between 0 and 9.99. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+        "assetIdentifier": { # Creative Asset ID. # Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+          "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+        },
+        "transparency": True or False, # Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.
+        "sslCompliant": True or False, # Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+        "position": { # Offset Position. # Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "top": 42, # Offset distance from top side of an asset or a window.
+          "left": 42, # Offset distance from left side of an asset or a window.
+        },
+        "customStartTimeValue": 42, # Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+      },
+    ],
+    "redirectUrl": "A String", # URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT
+    "videoDuration": 3.14, # Creative video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, all RICH_MEDIA, and all VPAID.
+    "htmlCodeLocked": True or False, # Whether HTML code is DCM-generated or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.
+    "convertFlashToHtml5": True or False, # Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+    "clickTags": [ # Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      { # Creative Click Tag.
+        "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+        "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+        "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+      },
+    ],
+    "commercialId": "A String", # Industry standard ID assigned to creative for reach and frequency. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    "active": True or False, # Whether the creative is active. Applicable to all creative types.
+    "compatibility": [ # Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL  are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. Applicable to all creative types.
+        # 
+        # Acceptable values are:
+        # - "APP"
+        # - "APP_INTERSTITIAL"
+        # - "IN_STREAM_VIDEO"
+        # - "DISPLAY"
+        # - "DISPLAY_INTERSTITIAL"
+      "A String",
+    ],
+    "adParameters": "A String", # Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.
+    "adTagKeys": [ # Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "A String",
+    ],
+    "kind": "dfareporting#creative", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creative".
+    "subaccountId": "A String", # Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+    "name": "A String", # Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.
+    "sslOverride": True or False, # Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.
+    "lastModifiedInfo": { # Modification timestamp. # Creative last modification information. This is a read-only field. Applicable to all creative types.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "backupImageClickThroughUrl": "A String", # Click-through URL for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+    "sslCompliant": True or False, # Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.
+    "studioCreativeId": "A String", # Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+    "authoringTool": "A String", # Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+    "allowScriptAccess": True or False, # Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.
+    "companionCreatives": [ # List of companion creatives assigned to an in-Stream videocreative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "A String",
+    ],
+    "auto_advance_images": True or False, # Whether images are automatically advanced for enhanced image creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.
+    "backupImageFeatures": [ # List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by DCM for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "A String",
+    ],
+    "backupImageTargetWindow": { # Target Window. # Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "customHtml": "A String", # User-entered value.
+      "targetWindowOption": "A String", # Type of browser window for which the backup image of the flash creative can be displayed.
+    },
+    "skippable": True or False, # Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Creative.
+      "thirdPartyUrls": [ # Third-party URLs for tracking in-stream video creative events. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+        { # Third-party Tracking URL.
+          "url": "A String", # URL for the specified third-party URL type.
+          "thirdPartyUrlType": "A String", # Third-party URL type for in-stream video creatives.
+        },
+      ],
+      "artworkType": "A String", # Type of artwork used for the creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "latestTraffickedCreativeId": "A String", # Latest Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "videoDescription": "A String", # Description of the video ad. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "advertiserId": "A String", # Advertiser ID of this creative. This is a required field. Applicable to all creative types.
+      "requiredFlashPluginVersion": "A String", # The minimum required Flash plugin version for this creative. For example, 11.2.202.235. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "thirdPartyBackupImageImpressionsUrl": "A String", # Third-party URL used to record backup image impressions. Applicable to the following creative types: all RICH_MEDIA.
+      "timerCustomEvents": [ # List of timer events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset is not HTML_IMAGE.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "renderingIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the rendering ID of this creative. This is a read-only field. Applicable to all creative types.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "fsCommand": { # FsCommand. # OpenWindow FSCommand of this creative. This lets the SWF file communicate with either Flash Player or the program hosting Flash Player, such as a web browser. This is only triggered if allowScriptAccess field is true. Applicable to the following creative types: FLASH_INPAGE.
+        "windowHeight": 42, # Height of the window.
+        "top": 42, # Distance from the top of the browser. Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+        "windowWidth": 42, # Width of the window.
+        "positionOption": "A String", # Position in the browser where the window will open.
+        "left": 42, # Distance from the left of the browser.Applicable when positionOption is DISTANCE_FROM_TOP_LEFT_CORNER.
+      },
+      "id": "A String", # ID of this creative. This is a read-only, auto-generated field. Applicable to all creative types.
+      "accountId": "A String", # Account ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+      "studioTraffickedCreativeId": "A String", # Studio trafficked creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "archived": True or False, # Whether the creative is archived. Applicable to all creative types.
+      "overrideCss": "A String", # Override CSS value for rich media creatives. Applicable to the following creative types: all RICH_MEDIA.
+      "authoringSource": "A String", # Source application where creative was authored. Presently, only DBM authored creatives will have this field set. Applicable to all creative types.
+      "requiredFlashVersion": 42, # The internal Flash version for this creative as calculated by DoubleClick Studio. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "exitCustomEvents": [ # List of exit events configured for the creative. For DISPLAY and DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags, For DISPLAY, an event is also created from the backupImageReportingLabel. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "renderingId": "A String", # ID of current rendering version. This is a read-only field. Applicable to all creative types.
+      "counterCustomEvents": [ # List of counter events configured for the creative. For DISPLAY_IMAGE_GALLERY creatives, these are read-only and auto-generated from clickTags. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, all RICH_MEDIA, and all VPAID.
+        { # Creative Custom Event.
+          "targetType": "A String", # Target type used by the event.
+          "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+          "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+          "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+            "showStatusBar": True or False, # Whether to display the browser status bar.
+            "showScrollBar": True or False, # Whether to display the browser scroll bar.
+            "showAddressBar": True or False, # Whether to display the browser address bar.
+            "showMenuBar": True or False, # Whether to display the browser menu bar.
+            "title": "A String", # Title of popup window.
+            "showToolBar": True or False, # Whether to display the browser tool bar.
+            "positionType": "A String", # Popup window position either centered or at specific coordinate.
+            "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+              "top": 42, # Offset distance from top side of an asset or a window.
+              "left": 42, # Offset distance from left side of an asset or a window.
+            },
+            "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+              "width": 42, # Width of this size.
+              "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+              "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+              "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+              "height": 42, # Height of this size.
+            },
+          },
+          "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+          "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+          "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+          "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+          "advertiserCustomEventName": "A String", # User-entered name for the event.
+        },
+      ],
+      "backupImageReportingLabel": "A String", # Reporting label used for HTML5 banner backup image. Applicable to the following creative types: DISPLAY when the primary asset type is not HTML_IMAGE.
+      "version": 42, # The version number helps you keep track of multiple versions of your creative in your reports. The version number will always be auto-generated during insert operations to start at 1. For tracking creatives the version cannot be incremented and will always remain at 1. For all other creative types the version can be incremented only by 1 during update operations. In addition, the version will be automatically incremented by 1 when undergoing Rich Media creative merging. Applicable to all creative types.
+      "creativeFieldAssignments": [ # Creative field assignments for this creative. Applicable to all creative types.
+        { # Creative Field Assignment.
+          "creativeFieldId": "A String", # ID of the creative field.
+          "creativeFieldValueId": "A String", # ID of the creative field value.
+        },
+      ],
+      "backgroundColor": "A String", # The 6-character HTML color code, beginning with #, for the background of the window area where the Flash file is displayed. Default is white. Applicable to the following creative types: FLASH_INPAGE.
+      "customKeyValues": [ # Custom key-values for a Rich Media creative. Key-values let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use key-values to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+        "A String",
+      ],
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this creative. This is a read-only field. Applicable to all creative types.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "htmlCode": "A String", # HTML code for the creative. This is a required field when applicable. This field is ignored if htmlCodeLocked is false. Applicable to the following creative types: all CUSTOM, FLASH_INPAGE, and HTML5_BANNER, and all RICH_MEDIA.
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative. When inserting or updating a creative either the size ID field or size width and height fields can be used. This is a required field when applicable; however for IMAGE, FLASH_INPAGE creatives, and for DISPLAY creatives with a primary asset of type HTML_IMAGE, if left blank, this field will be automatically set using the actual size of the associated image assets. Applicable to the following creative types: DISPLAY, DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "type": "A String", # Type of this creative.This is a required field. Applicable to all creative types.
+      "totalFileSize": "A String", # Combined size of all creative assets. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "thirdPartyRichMediaImpressionsUrl": "A String", # Third-party URL used to record rich media impressions. Applicable to the following creative types: all RICH_MEDIA.
+      "studioAdvertiserId": "A String", # Studio advertiser ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "creativeAssets": [ # Assets associated with a creative. Applicable to all but the following creative types: INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and REDIRECT
+        { # Creative Asset.
+          "mimeType": "A String", # Detected MIME type for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "artworkType": "A String", # Artwork type of rich media creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "positionLeftUnit": "A String", # Offset left unit for an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "collapsedSize": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size of an asset when collapsed. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "flashVersion": 42, # Flash version of the asset. This is a read-only field. Applicable to the following creative types: FLASH_INPAGE, all RICH_MEDIA, and all VPAID. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "pushdown": True or False, # Whether the asset pushes down other content. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable when the asset offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+          "hideFlashObjects": True or False, # Whether to hide Flash objects flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "detectedFeatures": [ # List of feature dependencies for the creative asset that are detected by DCM. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative correctly. This is a read-only, auto-generated field. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "A String",
+          ],
+          "duration": 42, # Duration in seconds for which an asset will be displayed. Applicable to the following creative types: INSTREAM_VIDEO and VPAID_LINEAR_VIDEO.
+          "positionTopUnit": "A String", # Offset top unit for an asset. This is a read-only field if the asset displayType is ASSET_DISPLAY_TYPE_OVERLAY. Applicable to the following creative types: all RICH_MEDIA.
+          "id": "A String", # Numeric ID of this creative asset. This is a required field and should not be modified. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "alignment": "A String", # Possible alignments for an asset. This is a read-only field. Applicable to the following creative types: RICH_MEDIA_DISPLAY_MULTI_FLOATING_INTERSTITIAL.
+          "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this creative asset. This is a required field when applicable; however for IMAGE and FLASH_INPAGE, creatives if left blank, this field will be automatically set using the actual size of the associated image asset. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER, IMAGE, and all RICH_MEDIA. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "horizontallyLocked": True or False, # Whether the asset is horizontally locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "startTimeType": "A String", # Initial wait time type before making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+          "displayType": "A String", # Type of rich media asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "expandedDimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Detected expanded dimension for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "verticallyLocked": True or False, # Whether the asset is vertically locked. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.
+          "role": "A String", # Role of the asset in relation to creative. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT. This is a required field.
+              # PRIMARY applies to DISPLAY, FLASH_INPAGE, HTML5_BANNER, IMAGE, DISPLAY_IMAGE_GALLERY, all RICH_MEDIA (which may contain multiple primary assets), and all VPAID creatives.
+              # BACKUP_IMAGE applies to FLASH_INPAGE, HTML5_BANNER, all RICH_MEDIA, and all VPAID creatives. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+              # ADDITIONAL_IMAGE and ADDITIONAL_FLASH apply to FLASH_INPAGE creatives.
+              # OTHER refers to assets from sources other than DCM, such as Studio uploaded assets, applicable to all RICH_MEDIA and all VPAID creatives.
+              # PARENT_VIDEO refers to videos uploaded by the user in DCM and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+              # TRANSCODED_VIDEO refers to videos transcoded by DCM from PARENT_VIDEO assets and is applicable to INSTREAM_VIDEO and VPAID_LINEAR_VIDEO creatives.
+              # ALTERNATE_VIDEO refers to the DCM representation of child asset videos from Studio, and is applicable to VPAID_LINEAR_VIDEO creatives. These cannot be added or removed within DCM.
+              # For VPAID_LINEAR_VIDEO creatives, PARENT_VIDEO, TRANSCODED_VIDEO and ALTERNATE_VIDEO assets that are marked active serve as backup in case the VPAID creative cannot be served. Only PARENT_VIDEO assets can be added or removed for an INSTREAM_VIDEO or VPAID_LINEAR_VIDEO creative.
+          "zipFilesize": "A String", # Size of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+          "bitRate": 42, # Detected bit-rate for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "windowMode": "A String", # Window mode options for flash assets. Applicable to the following creative types: FLASH_INPAGE, RICH_MEDIA_DISPLAY_EXPANDING, RICH_MEDIA_IM_EXPAND, RICH_MEDIA_DISPLAY_BANNER, and RICH_MEDIA_INPAGE_FLOATING.
+          "progressiveServingUrl": "A String", # Progressive URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "durationType": "A String", # Duration type for which an asset will be displayed. Applicable to the following creative types: all RICH_MEDIA.
+          "videoDuration": 3.14, # Detected video duration for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "fileSize": "A String", # File size associated with this creative asset. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "zipFilename": "A String", # File name of zip file. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+          "offset": { # Offset Position. # Offset position for an asset in collapsed mode. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID. Additionally, only applicable to assets whose displayType is ASSET_DISPLAY_TYPE_EXPANDING or ASSET_DISPLAY_TYPE_PEEL_DOWN.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "active": True or False, # Whether the video asset is active. This is a read-only field for VPAID_NON_LINEAR_VIDEO assets. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "originalBackup": True or False, # Whether the backup asset is original or changed by the user in DCM. Applicable to the following creative types: all RICH_MEDIA.
+          "hideSelectionBoxes": True or False, # Whether to hide selection boxes flag for an asset. Applicable to the following creative types: all RICH_MEDIA.
+          "streamingServingUrl": "A String", # Streaming URL for video asset. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO and all VPAID.
+          "zIndex": 42, # zIndex value of an asset. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable to assets whose displayType is NOT one of the following types: ASSET_DISPLAY_TYPE_INPAGE or ASSET_DISPLAY_TYPE_OVERLAY.
+          "childAssetType": "A String", # Rich media child asset type. This is a read-only field. Applicable to the following creative types: all VPAID.
+          "backupImageExit": { # Creative Custom Event. # Exit event configured for the backup image. Applicable to the following creative types: all RICH_MEDIA.
+            "targetType": "A String", # Target type used by the event.
+            "artworkType": "A String", # Artwork type used by the creative.This is a read-only field.
+            "videoReportingId": "A String", # Video reporting ID, used to differentiate multiple videos in a single creative. This is a read-only field.
+            "popupWindowProperties": { # Popup Window Properties. # Properties for rich media popup windows. This field is used only for exit events.
+              "showStatusBar": True or False, # Whether to display the browser status bar.
+              "showScrollBar": True or False, # Whether to display the browser scroll bar.
+              "showAddressBar": True or False, # Whether to display the browser address bar.
+              "showMenuBar": True or False, # Whether to display the browser menu bar.
+              "title": "A String", # Title of popup window.
+              "showToolBar": True or False, # Whether to display the browser tool bar.
+              "positionType": "A String", # Popup window position either centered or at specific coordinate.
+              "offset": { # Offset Position. # Upper-left corner coordinates of the popup window. Applicable if positionType is COORDINATES.
+                "top": 42, # Offset distance from top side of an asset or a window.
+                "left": 42, # Offset distance from left side of an asset or a window.
+              },
+              "dimension": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Popup dimension for a creative. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA and all VPAID
+                "width": 42, # Width of this size.
+                "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+                "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+                "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+                "height": 42, # Height of this size.
+              },
+            },
+            "advertiserCustomEventId": "A String", # Unique ID of this event used by DDM Reporting and Data Transfer. This is a read-only field.
+            "artworkLabel": "A String", # Artwork label column, used to link events in DCM back to events in Studio. This is a required field and should not be modified after insertion.
+            "advertiserCustomEventType": "A String", # Type of the event. This is a read-only field.
+            "exitUrl": "A String", # Exit URL of the event. This field is used only for exit events.
+            "id": "A String", # ID of this event. This is a required field and should not be modified after insertion.
+            "advertiserCustomEventName": "A String", # User-entered name for the event.
+          },
+          "actionScript3": True or False, # Whether ActionScript3 is enabled for the flash asset. This is a read-only field. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+          "pushdownDuration": 3.14, # Pushdown duration in seconds for an asset. Must be between 0 and 9.99. Applicable to the following creative types: all RICH_MEDIA.Additionally, only applicable when the asset pushdown field is true, the offsets are 0, the collapsedSize.width matches size.width, and the collapsedSize.height is less than size.height.
+          "assetIdentifier": { # Creative Asset ID. # Identifier of this asset. This is the same identifier returned during creative asset insert operation. This is a required field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+            "type": "A String", # Type of asset to upload. This is a required field. IMAGE is solely used for IMAGE creatives. Other image assets should use HTML_IMAGE.
+            "name": "A String", # Name of the creative asset. This is a required field while inserting an asset. After insertion, this assetIdentifier is used to identify the uploaded asset. Characters in the name must be alphanumeric or one of the following: ".-_ ". Spaces are allowed.
+          },
+          "transparency": True or False, # Whether the asset is transparent. Applicable to the following creative types: all RICH_MEDIA. Additionally, only applicable to HTML5 assets.
+          "sslCompliant": True or False, # Whether the asset is SSL-compliant. This is a read-only field. Applicable to all but the following creative types: all REDIRECT and TRACKING_TEXT.
+          "position": { # Offset Position. # Offset position for an asset. Applicable to the following creative types: all RICH_MEDIA.
+            "top": 42, # Offset distance from top side of an asset or a window.
+            "left": 42, # Offset distance from left side of an asset or a window.
+          },
+          "customStartTimeValue": 42, # Custom start time in seconds for making the asset visible. Applicable to the following creative types: all RICH_MEDIA.
+        },
+      ],
+      "redirectUrl": "A String", # URL of hosted image or hosted video or another ad tag. For INSTREAM_VIDEO_REDIRECT creatives this is the in-stream video redirect URL. The standard for a VAST (Video Ad Serving Template) ad response allows for a redirect link to another VAST 2.0 or 3.0 call. This is a required field when applicable. Applicable to the following creative types: DISPLAY_REDIRECT, INTERNAL_REDIRECT, INTERSTITIAL_INTERNAL_REDIRECT, and INSTREAM_VIDEO_REDIRECT
+      "videoDuration": 3.14, # Creative video duration in seconds. This is a read-only field. Applicable to the following creative types: INSTREAM_VIDEO, all RICH_MEDIA, and all VPAID.
+      "htmlCodeLocked": True or False, # Whether HTML code is DCM-generated or manually entered. Set to true to ignore changes to htmlCode. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER.
+      "convertFlashToHtml5": True or False, # Whether Flash assets associated with the creative need to be automatically converted to HTML5. This flag is enabled by default and users can choose to disable it if they don't want the system to generate and use HTML5 asset for this creative. Applicable to the following creative type: FLASH_INPAGE. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "clickTags": [ # Click tags of the creative. For DISPLAY, FLASH_INPAGE, and HTML5_BANNER creatives, this is a subset of detected click tags for the assets associated with this creative. After creating a flash asset, detected click tags will be returned in the creativeAssetMetadata. When inserting the creative, populate the creative clickTags field using the creativeAssetMetadata.clickTags field. For DISPLAY_IMAGE_GALLERY creatives, there should be exactly one entry in this list for each image creative asset. A click tag is matched with a corresponding creative asset by matching the clickTag.name field with the creativeAsset.assetIdentifier.name field. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY, FLASH_INPAGE, HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        { # Creative Click Tag.
+          "eventName": "A String", # Advertiser event name associated with the click tag. This field is used by ENHANCED_BANNER, ENHANCED_IMAGE, and HTML5_BANNER creatives.
+          "name": "A String", # Parameter name for the specified click tag. For ENHANCED_IMAGE creative assets, this field must match the value of the creative asset's creativeAssetId.name field.
+          "value": "A String", # Parameter value for the specified click tag. This field contains a click-through url.
+        },
+      ],
+      "commercialId": "A String", # Industry standard ID assigned to creative for reach and frequency. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+      "active": True or False, # Whether the creative is active. Applicable to all creative types.
+      "compatibility": [ # Compatibilities associated with this creative. This is a read-only field. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices or in mobile apps for regular or interstitial ads, respectively. APP and APP_INTERSTITIAL  are for rendering in mobile apps. Only pre-existing creatives may have these compatibilities since new creatives will either be assigned DISPLAY or DISPLAY_INTERSTITIAL instead. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. Applicable to all creative types.
+          #
+          # Acceptable values are:
+          # - "APP"
+          # - "APP_INTERSTITIAL"
+          # - "IN_STREAM_VIDEO"
+          # - "DISPLAY"
+          # - "DISPLAY_INTERSTITIAL"
+        "A String",
+      ],
+      "adParameters": "A String", # Ad parameters user for VPAID creative. This is a read-only field. Applicable to the following creative types: all VPAID.
+      "adTagKeys": [ # Keywords for a Rich Media creative. Keywords let you customize the creative settings of a Rich Media ad running on your site without having to contact the advertiser. You can use keywords to dynamically change the look or functionality of a creative. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+        "A String",
+      ],
+      "kind": "dfareporting#creative", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#creative".
+      "subaccountId": "A String", # Subaccount ID of this creative. This field, if left unset, will be auto-generated for both insert and update operations. Applicable to all creative types.
+      "name": "A String", # Name of the creative. This is a required field and must be less than 256 characters long. Applicable to all creative types.
+      "sslOverride": True or False, # Whether creative should be treated as SSL compliant even if the system scan shows it's not. Applicable to all creative types.
+      "lastModifiedInfo": { # Modification timestamp. # Creative last modification information. This is a read-only field. Applicable to all creative types.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "backupImageClickThroughUrl": "A String", # Click-through URL for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+      "sslCompliant": True or False, # Whether the creative is SSL-compliant. This is a read-only field. Applicable to all creative types.
+      "studioCreativeId": "A String", # Studio creative ID associated with rich media and VPAID creatives. This is a read-only field. Applicable to the following creative types: all RICH_MEDIA, and all VPAID.
+      "authoringTool": "A String", # Authoring tool for HTML5 banner creatives. This is a read-only field. Applicable to the following creative types: HTML5_BANNER.
+      "allowScriptAccess": True or False, # Whether script access is allowed for this creative. This is a read-only and deprecated field which will automatically be set to true on update. Applicable to the following creative types: FLASH_INPAGE.
+      "companionCreatives": [ # List of companion creatives assigned to an in-Stream videocreative. Acceptable values include IDs of existing flash and image creatives. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+        "A String",
+      ],
+      "auto_advance_images": True or False, # Whether images are automatically advanced for enhanced image creatives. Applicable to the following creative types: DISPLAY_IMAGE_GALLERY.
+      "backupImageFeatures": [ # List of feature dependencies that will cause a backup image to be served if the browser that serves the ad does not support them. Feature dependencies are features that a browser must be able to support in order to render your HTML5 creative asset correctly. This field is initially auto-generated to contain all features detected by DCM for all the assets of this creative and can then be modified by the client. To reset this field, copy over all the creativeAssets' detected features. Applicable to the following creative types: HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "A String",
+      ],
+      "backupImageTargetWindow": { # Target Window. # Target window for backup image. Applicable to the following creative types: FLASH_INPAGE and HTML5_BANNER. Applicable to DISPLAY when the primary asset type is not HTML_IMAGE.
+        "customHtml": "A String", # User-entered value.
+        "targetWindowOption": "A String", # Type of browser window for which the backup image of the flash creative can be displayed.
+      },
+      "skippable": True or False, # Whether the user can choose to skip the creative. Applicable to the following creative types: all INSTREAM_VIDEO and all VPAID.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.dimensionValues.html b/docs/dyn/dfareporting_v2_5.dimensionValues.html
new file mode 100644
index 0000000..a140852
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.dimensionValues.html
@@ -0,0 +1,144 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.dimensionValues.html">dimensionValues</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#query">query(profileId, body, pageToken=None, maxResults=None)</a></code></p>
+<p class="firstline">Retrieves list of report dimension values for a list of filters.</p>
+<p class="toc_element">
+  <code><a href="#query_next">query_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="query">query(profileId, body, pageToken=None, maxResults=None)</code>
+  <pre>Retrieves list of report dimension values for a list of filters.
+
+Args:
+  profileId: string, The DFA user profile ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Represents a DimensionValuesRequest.
+    "dimensionName": "A String", # The name of the dimension for which values should be requested.
+    "startDate": "A String", # The start date of the date range for which to retrieve dimension values. A string of the format "yyyy-MM-dd".
+    "kind": "dfareporting#dimensionValueRequest", # The kind of request this is, in this case dfareporting#dimensionValueRequest.
+    "endDate": "A String", # The end date of the date range for which to retrieve dimension values. A string of the format "yyyy-MM-dd".
+    "filters": [ # The list of filters by which to filter values. The filters are ANDed.
+      { # Represents a dimension filter.
+        "dimensionName": "A String", # The name of the dimension to filter.
+        "kind": "dfareporting#dimensionFilter", # The kind of resource this is, in this case dfareporting#dimensionFilter.
+        "value": "A String", # The value of the dimension to filter.
+      },
+    ],
+  }
+
+  pageToken: string, The value of the nextToken from the previous result page.
+  maxResults: integer, Maximum number of results to return.
+
+Returns:
+  An object of the form:
+
+    { # Represents the list of DimensionValue resources.
+    "nextPageToken": "A String", # Continuation token used to page through dimension values. To retrieve the next page of results, set the next request's "pageToken" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.
+    "items": [ # The dimension values returned in this response.
+      { # Represents a DimensionValue resource.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+    ],
+    "kind": "dfareporting#dimensionValueList", # The kind of list this is, in this case dfareporting#dimensionValueList.
+    "etag": "A String", # The eTag of this response for caching purposes.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="query_next">query_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.directorySiteContacts.html b/docs/dyn/dfareporting_v2_5.directorySiteContacts.html
new file mode 100644
index 0000000..bea4727
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.directorySiteContacts.html
@@ -0,0 +1,169 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.directorySiteContacts.html">directorySiteContacts</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one directory site contact by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, directorySiteIds=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of directory site contacts, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one directory site contact by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Directory site contact ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Site Directory contact.
+    "kind": "dfareporting#directorySiteContact", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#directorySiteContact".
+    "firstName": "A String", # First name of this directory site contact.
+    "title": "A String", # Title or designation of this directory site contact.
+    "lastName": "A String", # Last name of this directory site contact.
+    "email": "A String", # Email address of this directory site contact.
+    "phone": "A String", # Phone number of this directory site contact.
+    "role": "A String", # Directory site contact role.
+    "address": "A String", # Address of this directory site contact.
+    "type": "A String", # Directory site contact type.
+    "id": "A String", # ID of this directory site contact. This is a read-only, auto-generated field.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, directorySiteIds=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</code>
+  <pre>Retrieves a list of directory site contacts, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for objects by name, ID or email. Wildcards (*) are allowed. For example, "directory site contact*2015" will return objects with names like "directory site contact June 2015", "directory site contact April 2015", or simply "directory site contact 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "directory site contact" will match objects with name "my directory site contact", "directory site contact 2015", or simply "directory site contact".
+  directorySiteIds: string, Select only directory site contacts with these directory site IDs. This is a required field. (repeated)
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only directory site contacts with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Directory Site Contact List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "directorySiteContacts": [ # Directory site contact collection
+      { # Contains properties of a Site Directory contact.
+        "kind": "dfareporting#directorySiteContact", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#directorySiteContact".
+        "firstName": "A String", # First name of this directory site contact.
+        "title": "A String", # Title or designation of this directory site contact.
+        "lastName": "A String", # Last name of this directory site contact.
+        "email": "A String", # Email address of this directory site contact.
+        "phone": "A String", # Phone number of this directory site contact.
+        "role": "A String", # Directory site contact role.
+        "address": "A String", # Address of this directory site contact.
+        "type": "A String", # Directory site contact type.
+        "id": "A String", # ID of this directory site contact. This is a read-only, auto-generated field.
+      },
+    ],
+    "kind": "dfareporting#directorySiteContactsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#directorySiteContactsListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.directorySites.html b/docs/dyn/dfareporting_v2_5.directorySites.html
new file mode 100644
index 0000000..22605a0
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.directorySites.html
@@ -0,0 +1,590 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.directorySites.html">directorySites</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one directory site by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new directory site.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, countryId=None, acceptsInStreamVideoPlacements=None, pageToken=None, sortOrder=None, parentId=None, acceptsPublisherPaidPlacements=None, acceptsInterstitialPlacements=None, maxResults=None, active=None, searchString=None, sortField=None, ids=None, dfp_network_code=None)</a></code></p>
+<p class="firstline">Retrieves a list of directory sites, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one directory site by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Directory site ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # DirectorySites contains properties of a website from the Site Directory. Sites need to be added to an account via the Sites resource before they can be assigned to a placement.
+      "kind": "dfareporting#directorySite", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#directorySite".
+      "countryId": "A String", # Country ID of this directory site.
+      "description": "A String", # Description of this directory site.
+      "settings": { # Directory Site Settings # Directory site settings.
+        "nielsenOcrOptOut": True or False, # Whether this directory site has disabled Nielsen OCR reach ratings.
+        "activeViewOptOut": True or False, # Whether this directory site has disabled active view creatives.
+        "dfp_settings": { # DFP Settings # Directory site DFP settings.
+          "publisherPortalOnly": True or False, # Whether this directory site is available only via DoubleClick Publisher Portal.
+          "dfp_network_name": "A String", # DFP network name for this directory site.
+          "pubPaidPlacementAccepted": True or False, # Whether this directory site accepts publisher-paid tags.
+          "programmaticPlacementAccepted": True or False, # Whether this directory site accepts programmatic placements.
+          "dfp_network_code": "A String", # DFP network code for this directory site.
+        },
+        "verificationTagOptOut": True or False, # Whether this directory site has disabled generation of Verification ins tags.
+        "instream_video_placement_accepted": True or False, # Whether this site accepts in-stream video ads.
+        "interstitialPlacementAccepted": True or False, # Whether this site accepts interstitial ads.
+        "videoActiveViewOptOut": True or False, # Whether this directory site has disabled active view for in-stream video creatives.
+      },
+      "currencyId": "A String", # Currency ID of this directory site.
+          # Possible values are:
+          # - "1" for USD
+          # - "2" for GBP
+          # - "3" for ESP
+          # - "4" for SEK
+          # - "5" for CAD
+          # - "6" for JPY
+          # - "7" for DEM
+          # - "8" for AUD
+          # - "9" for FRF
+          # - "10" for ITL
+          # - "11" for DKK
+          # - "12" for NOK
+          # - "13" for FIM
+          # - "14" for ZAR
+          # - "15" for IEP
+          # - "16" for NLG
+          # - "17" for EUR
+          # - "18" for KRW
+          # - "19" for TWD
+          # - "20" for SGD
+          # - "21" for CNY
+          # - "22" for HKD
+          # - "23" for NZD
+          # - "24" for MYR
+          # - "25" for BRL
+          # - "26" for PTE
+          # - "27" for MXP
+          # - "28" for CLP
+          # - "29" for TRY
+          # - "30" for ARS
+          # - "31" for PEN
+          # - "32" for ILS
+          # - "33" for CHF
+          # - "34" for VEF
+          # - "35" for COP
+          # - "36" for GTQ
+          # - "37" for PLN
+          # - "39" for INR
+          # - "40" for THB
+          # - "41" for IDR
+          # - "42" for CZK
+          # - "43" for RON
+          # - "44" for HUF
+          # - "45" for RUB
+          # - "46" for AED
+          # - "47" for BGN
+          # - "48" for HRK
+      "inpageTagFormats": [ # Tag types for regular placements.
+          #
+          # Acceptable values are:
+          # - "STANDARD"
+          # - "IFRAME_JAVASCRIPT_INPAGE"
+          # - "INTERNAL_REDIRECT_INPAGE"
+          # - "JAVASCRIPT_INPAGE"
+        "A String",
+      ],
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "interstitialTagFormats": [ # Tag types for interstitial placements.
+          #
+          # Acceptable values are:
+          # - "IFRAME_JAVASCRIPT_INTERSTITIAL"
+          # - "INTERNAL_REDIRECT_INTERSTITIAL"
+          # - "JAVASCRIPT_INTERSTITIAL"
+        "A String",
+      ],
+      "contactAssignments": [ # Directory site contacts.
+        { # Directory Site Contact Assignment
+          "contactId": "A String", # ID of this directory site contact. This is a read-only, auto-generated field.
+          "visibility": "A String", # Visibility of this directory site contact assignment. When set to PUBLIC this contact assignment is visible to all account and agency users; when set to PRIVATE it is visible only to the site.
+        },
+      ],
+      "url": "A String", # URL of this directory site.
+      "parentId": "A String", # Parent directory site ID.
+      "active": True or False, # Whether this directory site is active.
+      "id": "A String", # ID of this directory site. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this directory site.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new directory site.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # DirectorySites contains properties of a website from the Site Directory. Sites need to be added to an account via the Sites resource before they can be assigned to a placement.
+    "kind": "dfareporting#directorySite", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#directorySite".
+    "countryId": "A String", # Country ID of this directory site.
+    "description": "A String", # Description of this directory site.
+    "settings": { # Directory Site Settings # Directory site settings.
+      "nielsenOcrOptOut": True or False, # Whether this directory site has disabled Nielsen OCR reach ratings.
+      "activeViewOptOut": True or False, # Whether this directory site has disabled active view creatives.
+      "dfp_settings": { # DFP Settings # Directory site DFP settings.
+        "publisherPortalOnly": True or False, # Whether this directory site is available only via DoubleClick Publisher Portal.
+        "dfp_network_name": "A String", # DFP network name for this directory site.
+        "pubPaidPlacementAccepted": True or False, # Whether this directory site accepts publisher-paid tags.
+        "programmaticPlacementAccepted": True or False, # Whether this directory site accepts programmatic placements.
+        "dfp_network_code": "A String", # DFP network code for this directory site.
+      },
+      "verificationTagOptOut": True or False, # Whether this directory site has disabled generation of Verification ins tags.
+      "instream_video_placement_accepted": True or False, # Whether this site accepts in-stream video ads.
+      "interstitialPlacementAccepted": True or False, # Whether this site accepts interstitial ads.
+      "videoActiveViewOptOut": True or False, # Whether this directory site has disabled active view for in-stream video creatives.
+    },
+    "currencyId": "A String", # Currency ID of this directory site.
+        # Possible values are:
+        # - "1" for USD
+        # - "2" for GBP
+        # - "3" for ESP
+        # - "4" for SEK
+        # - "5" for CAD
+        # - "6" for JPY
+        # - "7" for DEM
+        # - "8" for AUD
+        # - "9" for FRF
+        # - "10" for ITL
+        # - "11" for DKK
+        # - "12" for NOK
+        # - "13" for FIM
+        # - "14" for ZAR
+        # - "15" for IEP
+        # - "16" for NLG
+        # - "17" for EUR
+        # - "18" for KRW
+        # - "19" for TWD
+        # - "20" for SGD
+        # - "21" for CNY
+        # - "22" for HKD
+        # - "23" for NZD
+        # - "24" for MYR
+        # - "25" for BRL
+        # - "26" for PTE
+        # - "27" for MXP
+        # - "28" for CLP
+        # - "29" for TRY
+        # - "30" for ARS
+        # - "31" for PEN
+        # - "32" for ILS
+        # - "33" for CHF
+        # - "34" for VEF
+        # - "35" for COP
+        # - "36" for GTQ
+        # - "37" for PLN
+        # - "39" for INR
+        # - "40" for THB
+        # - "41" for IDR
+        # - "42" for CZK
+        # - "43" for RON
+        # - "44" for HUF
+        # - "45" for RUB
+        # - "46" for AED
+        # - "47" for BGN
+        # - "48" for HRK
+    "inpageTagFormats": [ # Tag types for regular placements.
+        # 
+        # Acceptable values are:
+        # - "STANDARD"
+        # - "IFRAME_JAVASCRIPT_INPAGE"
+        # - "INTERNAL_REDIRECT_INPAGE"
+        # - "JAVASCRIPT_INPAGE"
+      "A String",
+    ],
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "interstitialTagFormats": [ # Tag types for interstitial placements.
+        # 
+        # Acceptable values are:
+        # - "IFRAME_JAVASCRIPT_INTERSTITIAL"
+        # - "INTERNAL_REDIRECT_INTERSTITIAL"
+        # - "JAVASCRIPT_INTERSTITIAL"
+      "A String",
+    ],
+    "contactAssignments": [ # Directory site contacts.
+      { # Directory Site Contact Assignment
+        "contactId": "A String", # ID of this directory site contact. This is a read-only, auto-generated field.
+        "visibility": "A String", # Visibility of this directory site contact assignment. When set to PUBLIC this contact assignment is visible to all account and agency users; when set to PRIVATE it is visible only to the site.
+      },
+    ],
+    "url": "A String", # URL of this directory site.
+    "parentId": "A String", # Parent directory site ID.
+    "active": True or False, # Whether this directory site is active.
+    "id": "A String", # ID of this directory site. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this directory site.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # DirectorySites contains properties of a website from the Site Directory. Sites need to be added to an account via the Sites resource before they can be assigned to a placement.
+      "kind": "dfareporting#directorySite", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#directorySite".
+      "countryId": "A String", # Country ID of this directory site.
+      "description": "A String", # Description of this directory site.
+      "settings": { # Directory Site Settings # Directory site settings.
+        "nielsenOcrOptOut": True or False, # Whether this directory site has disabled Nielsen OCR reach ratings.
+        "activeViewOptOut": True or False, # Whether this directory site has disabled active view creatives.
+        "dfp_settings": { # DFP Settings # Directory site DFP settings.
+          "publisherPortalOnly": True or False, # Whether this directory site is available only via DoubleClick Publisher Portal.
+          "dfp_network_name": "A String", # DFP network name for this directory site.
+          "pubPaidPlacementAccepted": True or False, # Whether this directory site accepts publisher-paid tags.
+          "programmaticPlacementAccepted": True or False, # Whether this directory site accepts programmatic placements.
+          "dfp_network_code": "A String", # DFP network code for this directory site.
+        },
+        "verificationTagOptOut": True or False, # Whether this directory site has disabled generation of Verification ins tags.
+        "instream_video_placement_accepted": True or False, # Whether this site accepts in-stream video ads.
+        "interstitialPlacementAccepted": True or False, # Whether this site accepts interstitial ads.
+        "videoActiveViewOptOut": True or False, # Whether this directory site has disabled active view for in-stream video creatives.
+      },
+      "currencyId": "A String", # Currency ID of this directory site.
+          # Possible values are:
+          # - "1" for USD
+          # - "2" for GBP
+          # - "3" for ESP
+          # - "4" for SEK
+          # - "5" for CAD
+          # - "6" for JPY
+          # - "7" for DEM
+          # - "8" for AUD
+          # - "9" for FRF
+          # - "10" for ITL
+          # - "11" for DKK
+          # - "12" for NOK
+          # - "13" for FIM
+          # - "14" for ZAR
+          # - "15" for IEP
+          # - "16" for NLG
+          # - "17" for EUR
+          # - "18" for KRW
+          # - "19" for TWD
+          # - "20" for SGD
+          # - "21" for CNY
+          # - "22" for HKD
+          # - "23" for NZD
+          # - "24" for MYR
+          # - "25" for BRL
+          # - "26" for PTE
+          # - "27" for MXP
+          # - "28" for CLP
+          # - "29" for TRY
+          # - "30" for ARS
+          # - "31" for PEN
+          # - "32" for ILS
+          # - "33" for CHF
+          # - "34" for VEF
+          # - "35" for COP
+          # - "36" for GTQ
+          # - "37" for PLN
+          # - "39" for INR
+          # - "40" for THB
+          # - "41" for IDR
+          # - "42" for CZK
+          # - "43" for RON
+          # - "44" for HUF
+          # - "45" for RUB
+          # - "46" for AED
+          # - "47" for BGN
+          # - "48" for HRK
+      "inpageTagFormats": [ # Tag types for regular placements.
+          #
+          # Acceptable values are:
+          # - "STANDARD"
+          # - "IFRAME_JAVASCRIPT_INPAGE"
+          # - "INTERNAL_REDIRECT_INPAGE"
+          # - "JAVASCRIPT_INPAGE"
+        "A String",
+      ],
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "interstitialTagFormats": [ # Tag types for interstitial placements.
+          #
+          # Acceptable values are:
+          # - "IFRAME_JAVASCRIPT_INTERSTITIAL"
+          # - "INTERNAL_REDIRECT_INTERSTITIAL"
+          # - "JAVASCRIPT_INTERSTITIAL"
+        "A String",
+      ],
+      "contactAssignments": [ # Directory site contacts.
+        { # Directory Site Contact Assignment
+          "contactId": "A String", # ID of this directory site contact. This is a read-only, auto-generated field.
+          "visibility": "A String", # Visibility of this directory site contact assignment. When set to PUBLIC this contact assignment is visible to all account and agency users; when set to PRIVATE it is visible only to the site.
+        },
+      ],
+      "url": "A String", # URL of this directory site.
+      "parentId": "A String", # Parent directory site ID.
+      "active": True or False, # Whether this directory site is active.
+      "id": "A String", # ID of this directory site. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this directory site.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, countryId=None, acceptsInStreamVideoPlacements=None, pageToken=None, sortOrder=None, parentId=None, acceptsPublisherPaidPlacements=None, acceptsInterstitialPlacements=None, maxResults=None, active=None, searchString=None, sortField=None, ids=None, dfp_network_code=None)</code>
+  <pre>Retrieves a list of directory sites, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  countryId: string, Select only directory sites with this country ID.
+  acceptsInStreamVideoPlacements: boolean, This search filter is no longer supported and will have no effect on the results returned.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  parentId: string, Select only directory sites with this parent ID.
+  acceptsPublisherPaidPlacements: boolean, Select only directory sites that accept publisher paid placements. This field can be left blank.
+  acceptsInterstitialPlacements: boolean, This search filter is no longer supported and will have no effect on the results returned.
+  maxResults: integer, Maximum number of results to return.
+  active: boolean, Select only active directory sites. Leave blank to retrieve both active and inactive directory sites.
+  searchString: string, Allows searching for objects by name, ID or URL. Wildcards (*) are allowed. For example, "directory site*2015" will return objects with names like "directory site June 2015", "directory site April 2015", or simply "directory site 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "directory site" will match objects with name "my directory site", "directory site 2015" or simply, "directory site".
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only directory sites with these IDs. (repeated)
+  dfp_network_code: string, Select only directory sites with this DFP network code.
+
+Returns:
+  An object of the form:
+
+    { # Directory Site List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#directorySitesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#directorySitesListResponse".
+    "directorySites": [ # Directory site collection.
+      { # DirectorySites contains properties of a website from the Site Directory. Sites need to be added to an account via the Sites resource before they can be assigned to a placement.
+          "kind": "dfareporting#directorySite", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#directorySite".
+          "countryId": "A String", # Country ID of this directory site.
+          "description": "A String", # Description of this directory site.
+          "settings": { # Directory Site Settings # Directory site settings.
+            "nielsenOcrOptOut": True or False, # Whether this directory site has disabled Nielsen OCR reach ratings.
+            "activeViewOptOut": True or False, # Whether this directory site has disabled active view creatives.
+            "dfp_settings": { # DFP Settings # Directory site DFP settings.
+              "publisherPortalOnly": True or False, # Whether this directory site is available only via DoubleClick Publisher Portal.
+              "dfp_network_name": "A String", # DFP network name for this directory site.
+              "pubPaidPlacementAccepted": True or False, # Whether this directory site accepts publisher-paid tags.
+              "programmaticPlacementAccepted": True or False, # Whether this directory site accepts programmatic placements.
+              "dfp_network_code": "A String", # DFP network code for this directory site.
+            },
+            "verificationTagOptOut": True or False, # Whether this directory site has disabled generation of Verification ins tags.
+            "instream_video_placement_accepted": True or False, # Whether this site accepts in-stream video ads.
+            "interstitialPlacementAccepted": True or False, # Whether this site accepts interstitial ads.
+            "videoActiveViewOptOut": True or False, # Whether this directory site has disabled active view for in-stream video creatives.
+          },
+          "currencyId": "A String", # Currency ID of this directory site.
+              # Possible values are:
+              # - "1" for USD
+              # - "2" for GBP
+              # - "3" for ESP
+              # - "4" for SEK
+              # - "5" for CAD
+              # - "6" for JPY
+              # - "7" for DEM
+              # - "8" for AUD
+              # - "9" for FRF
+              # - "10" for ITL
+              # - "11" for DKK
+              # - "12" for NOK
+              # - "13" for FIM
+              # - "14" for ZAR
+              # - "15" for IEP
+              # - "16" for NLG
+              # - "17" for EUR
+              # - "18" for KRW
+              # - "19" for TWD
+              # - "20" for SGD
+              # - "21" for CNY
+              # - "22" for HKD
+              # - "23" for NZD
+              # - "24" for MYR
+              # - "25" for BRL
+              # - "26" for PTE
+              # - "27" for MXP
+              # - "28" for CLP
+              # - "29" for TRY
+              # - "30" for ARS
+              # - "31" for PEN
+              # - "32" for ILS
+              # - "33" for CHF
+              # - "34" for VEF
+              # - "35" for COP
+              # - "36" for GTQ
+              # - "37" for PLN
+              # - "39" for INR
+              # - "40" for THB
+              # - "41" for IDR
+              # - "42" for CZK
+              # - "43" for RON
+              # - "44" for HUF
+              # - "45" for RUB
+              # - "46" for AED
+              # - "47" for BGN
+              # - "48" for HRK
+          "inpageTagFormats": [ # Tag types for regular placements.
+              #
+              # Acceptable values are:
+              # - "STANDARD"
+              # - "IFRAME_JAVASCRIPT_INPAGE"
+              # - "INTERNAL_REDIRECT_INPAGE"
+              # - "JAVASCRIPT_INPAGE"
+            "A String",
+          ],
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this directory site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "interstitialTagFormats": [ # Tag types for interstitial placements.
+              #
+              # Acceptable values are:
+              # - "IFRAME_JAVASCRIPT_INTERSTITIAL"
+              # - "INTERNAL_REDIRECT_INTERSTITIAL"
+              # - "JAVASCRIPT_INTERSTITIAL"
+            "A String",
+          ],
+          "contactAssignments": [ # Directory site contacts.
+            { # Directory Site Contact Assignment
+              "contactId": "A String", # ID of this directory site contact. This is a read-only, auto-generated field.
+              "visibility": "A String", # Visibility of this directory site contact assignment. When set to PUBLIC this contact assignment is visible to all account and agency users; when set to PRIVATE it is visible only to the site.
+            },
+          ],
+          "url": "A String", # URL of this directory site.
+          "parentId": "A String", # Parent directory site ID.
+          "active": True or False, # Whether this directory site is active.
+          "id": "A String", # ID of this directory site. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this directory site.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.dynamicTargetingKeys.html b/docs/dyn/dfareporting_v2_5.dynamicTargetingKeys.html
new file mode 100644
index 0000000..5cdcbf6
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.dynamicTargetingKeys.html
@@ -0,0 +1,164 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.dynamicTargetingKeys.html">dynamicTargetingKeys</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, objectId, name, objectType)</a></code></p>
+<p class="firstline">Deletes an existing dynamic targeting key.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new dynamic targeting key. Keys must be created at the advertiser level before being assigned to the advertiser's ads, creatives, or placements. There is a maximum of 1000 keys per advertiser, out of which a maximum of 20 keys can be assigned per ad, creative, or placement.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, advertiserId=None, objectId=None, names=None, objectType=None)</a></code></p>
+<p class="firstline">Retrieves a list of dynamic targeting keys.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, objectId, name, objectType)</code>
+  <pre>Deletes an existing dynamic targeting key.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  objectId: string, ID of the object of this dynamic targeting key. This is a required field. (required)
+  name: string, Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase. (required)
+  objectType: string, Type of the object of this dynamic targeting key. This is a required field. (required)
+    Allowed values
+      OBJECT_AD - 
+      OBJECT_ADVERTISER - 
+      OBJECT_CREATIVE - 
+      OBJECT_PLACEMENT - 
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new dynamic targeting key. Keys must be created at the advertiser level before being assigned to the advertiser's ads, creatives, or placements. There is a maximum of 1000 keys per advertiser, out of which a maximum of 20 keys can be assigned per ad, creative, or placement.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a dynamic targeting key. Dynamic targeting keys are unique, user-friendly labels, created at the advertiser level in DCM, that can be assigned to ads, creatives, and placements and used for targeting with DoubleClick Studio dynamic creatives. Use these labels instead of numeric DCM IDs (such as placement IDs) to save time and avoid errors in your dynamic feeds.
+    "kind": "dfareporting#dynamicTargetingKey", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#dynamicTargetingKey".
+    "name": "A String", # Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.
+    "objectId": "A String", # ID of the object of this dynamic targeting key. This is a required field.
+    "objectType": "A String", # Type of the object of this dynamic targeting key. This is a required field.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a dynamic targeting key. Dynamic targeting keys are unique, user-friendly labels, created at the advertiser level in DCM, that can be assigned to ads, creatives, and placements and used for targeting with DoubleClick Studio dynamic creatives. Use these labels instead of numeric DCM IDs (such as placement IDs) to save time and avoid errors in your dynamic feeds.
+      "kind": "dfareporting#dynamicTargetingKey", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#dynamicTargetingKey".
+      "name": "A String", # Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.
+      "objectId": "A String", # ID of the object of this dynamic targeting key. This is a required field.
+      "objectType": "A String", # Type of the object of this dynamic targeting key. This is a required field.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, advertiserId=None, objectId=None, names=None, objectType=None)</code>
+  <pre>Retrieves a list of dynamic targeting keys.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  advertiserId: string, Select only dynamic targeting keys whose object has this advertiser ID.
+  objectId: string, Select only dynamic targeting keys with this object ID.
+  names: string, Select only dynamic targeting keys exactly matching these names. (repeated)
+  objectType: string, Select only dynamic targeting keys with this object type.
+    Allowed values
+      OBJECT_AD - 
+      OBJECT_ADVERTISER - 
+      OBJECT_CREATIVE - 
+      OBJECT_PLACEMENT - 
+
+Returns:
+  An object of the form:
+
+    { # Dynamic Targeting Key List Response
+    "kind": "dfareporting#dynamicTargetingKeysListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#dynamicTargetingKeysListResponse".
+    "dynamicTargetingKeys": [ # Dynamic targeting key collection.
+      { # Contains properties of a dynamic targeting key. Dynamic targeting keys are unique, user-friendly labels, created at the advertiser level in DCM, that can be assigned to ads, creatives, and placements and used for targeting with DoubleClick Studio dynamic creatives. Use these labels instead of numeric DCM IDs (such as placement IDs) to save time and avoid errors in your dynamic feeds.
+          "kind": "dfareporting#dynamicTargetingKey", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#dynamicTargetingKey".
+          "name": "A String", # Name of this dynamic targeting key. This is a required field. Must be less than 256 characters long and cannot contain commas. All characters are converted to lowercase.
+          "objectId": "A String", # ID of the object of this dynamic targeting key. This is a required field.
+          "objectType": "A String", # Type of the object of this dynamic targeting key. This is a required field.
+        },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.eventTags.html b/docs/dyn/dfareporting_v2_5.eventTags.html
new file mode 100644
index 0000000..3861efc
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.eventTags.html
@@ -0,0 +1,493 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.eventTags.html">eventTags</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, id)</a></code></p>
+<p class="firstline">Deletes an existing event tag.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one event tag by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new event tag.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, campaignId=None, advertiserId=None, adId=None, sortOrder=None, definitionsOnly=None, eventTagTypes=None, searchString=None, sortField=None, enabled=None, ids=None)</a></code></p>
+<p class="firstline">Retrieves a list of event tags, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing event tag. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing event tag.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, id)</code>
+  <pre>Deletes an existing event tag.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Event tag ID. (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one event tag by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Event tag ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of an event tag.
+      "status": "A String", # Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "subaccountId": "A String", # Subaccount ID of this event tag. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this event tag. This is a required field and must be less than 256 characters long.
+      "campaignId": "A String", # Campaign ID of this event tag. This field or the advertiserId field is required on insertion.
+      "url": "A String", # Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.
+      "sslCompliant": True or False, # Whether this tag is SSL-compliant or not. This is a read-only field.
+      "urlEscapeLevels": 42, # Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.
+      "kind": "dfareporting#eventTag", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#eventTag".
+      "enabledByDefault": True or False, # Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.
+      "advertiserId": "A String", # Advertiser ID of this event tag. This field or the campaignId field is required on insertion.
+      "siteFilterType": "A String", # Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteIds": [ # Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a whitelist or blacklist filter.
+        "A String",
+      ],
+      "excludeFromAdxRequests": True or False, # Whether to remove this event tag from ads that are trafficked through DoubleClick Bid Manager to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.
+      "type": "A String", # Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.
+      "id": "A String", # ID of this event tag. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this event tag. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new event tag.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of an event tag.
+    "status": "A String", # Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "subaccountId": "A String", # Subaccount ID of this event tag. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this event tag. This is a required field and must be less than 256 characters long.
+    "campaignId": "A String", # Campaign ID of this event tag. This field or the advertiserId field is required on insertion.
+    "url": "A String", # Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.
+    "sslCompliant": True or False, # Whether this tag is SSL-compliant or not. This is a read-only field.
+    "urlEscapeLevels": 42, # Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.
+    "kind": "dfareporting#eventTag", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#eventTag".
+    "enabledByDefault": True or False, # Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.
+    "advertiserId": "A String", # Advertiser ID of this event tag. This field or the campaignId field is required on insertion.
+    "siteFilterType": "A String", # Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "siteIds": [ # Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a whitelist or blacklist filter.
+      "A String",
+    ],
+    "excludeFromAdxRequests": True or False, # Whether to remove this event tag from ads that are trafficked through DoubleClick Bid Manager to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.
+    "type": "A String", # Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.
+    "id": "A String", # ID of this event tag. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this event tag. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of an event tag.
+      "status": "A String", # Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "subaccountId": "A String", # Subaccount ID of this event tag. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this event tag. This is a required field and must be less than 256 characters long.
+      "campaignId": "A String", # Campaign ID of this event tag. This field or the advertiserId field is required on insertion.
+      "url": "A String", # Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.
+      "sslCompliant": True or False, # Whether this tag is SSL-compliant or not. This is a read-only field.
+      "urlEscapeLevels": 42, # Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.
+      "kind": "dfareporting#eventTag", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#eventTag".
+      "enabledByDefault": True or False, # Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.
+      "advertiserId": "A String", # Advertiser ID of this event tag. This field or the campaignId field is required on insertion.
+      "siteFilterType": "A String", # Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteIds": [ # Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a whitelist or blacklist filter.
+        "A String",
+      ],
+      "excludeFromAdxRequests": True or False, # Whether to remove this event tag from ads that are trafficked through DoubleClick Bid Manager to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.
+      "type": "A String", # Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.
+      "id": "A String", # ID of this event tag. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this event tag. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, campaignId=None, advertiserId=None, adId=None, sortOrder=None, definitionsOnly=None, eventTagTypes=None, searchString=None, sortField=None, enabled=None, ids=None)</code>
+  <pre>Retrieves a list of event tags, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Select only event tags that belong to this campaign.
+  advertiserId: string, Select only event tags that belong to this advertiser.
+  adId: string, Select only event tags that belong to this ad.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  definitionsOnly: boolean, Examine only the specified campaign or advertiser's event tags for matching selector criteria. When set to false, the parent advertiser and parent campaign of the specified ad or campaign is examined as well. In addition, when set to false, the status field is examined as well, along with the enabledByDefault field. This parameter can not be set to true when adId is specified as ads do not define their own even tags.
+  eventTagTypes: string, Select only event tags with the specified event tag types. Event tag types can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. (repeated)
+    Allowed values
+      CLICK_THROUGH_EVENT_TAG - 
+      IMPRESSION_IMAGE_EVENT_TAG - 
+      IMPRESSION_JAVASCRIPT_EVENT_TAG - 
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "eventtag*2015" will return objects with names like "eventtag June 2015", "eventtag April 2015", or simply "eventtag 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "eventtag" will match objects with name "my eventtag", "eventtag 2015", or simply "eventtag".
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  enabled: boolean, Select only enabled event tags. What is considered enabled or disabled depends on the definitionsOnly parameter. When definitionsOnly is set to true, only the specified advertiser or campaign's event tags' enabledByDefault field is examined. When definitionsOnly is set to false, the specified ad or specified campaign's parent advertiser's or parent campaign's event tags' enabledByDefault and status fields are examined as well.
+  ids: string, Select only event tags with these IDs. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Event Tag List Response
+    "eventTags": [ # Event tag collection.
+      { # Contains properties of an event tag.
+          "status": "A String", # Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.
+          "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "subaccountId": "A String", # Subaccount ID of this event tag. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this event tag. This is a required field and must be less than 256 characters long.
+          "campaignId": "A String", # Campaign ID of this event tag. This field or the advertiserId field is required on insertion.
+          "url": "A String", # Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.
+          "sslCompliant": True or False, # Whether this tag is SSL-compliant or not. This is a read-only field.
+          "urlEscapeLevels": 42, # Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.
+          "kind": "dfareporting#eventTag", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#eventTag".
+          "enabledByDefault": True or False, # Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.
+          "advertiserId": "A String", # Advertiser ID of this event tag. This field or the campaignId field is required on insertion.
+          "siteFilterType": "A String", # Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "siteIds": [ # Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a whitelist or blacklist filter.
+            "A String",
+          ],
+          "excludeFromAdxRequests": True or False, # Whether to remove this event tag from ads that are trafficked through DoubleClick Bid Manager to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.
+          "type": "A String", # Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.
+          "id": "A String", # ID of this event tag. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this event tag. This is a read-only field that can be left blank.
+        },
+    ],
+    "kind": "dfareporting#eventTagsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#eventTagsListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing event tag. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Event tag ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of an event tag.
+    "status": "A String", # Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "subaccountId": "A String", # Subaccount ID of this event tag. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this event tag. This is a required field and must be less than 256 characters long.
+    "campaignId": "A String", # Campaign ID of this event tag. This field or the advertiserId field is required on insertion.
+    "url": "A String", # Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.
+    "sslCompliant": True or False, # Whether this tag is SSL-compliant or not. This is a read-only field.
+    "urlEscapeLevels": 42, # Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.
+    "kind": "dfareporting#eventTag", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#eventTag".
+    "enabledByDefault": True or False, # Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.
+    "advertiserId": "A String", # Advertiser ID of this event tag. This field or the campaignId field is required on insertion.
+    "siteFilterType": "A String", # Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "siteIds": [ # Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a whitelist or blacklist filter.
+      "A String",
+    ],
+    "excludeFromAdxRequests": True or False, # Whether to remove this event tag from ads that are trafficked through DoubleClick Bid Manager to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.
+    "type": "A String", # Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.
+    "id": "A String", # ID of this event tag. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this event tag. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of an event tag.
+      "status": "A String", # Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "subaccountId": "A String", # Subaccount ID of this event tag. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this event tag. This is a required field and must be less than 256 characters long.
+      "campaignId": "A String", # Campaign ID of this event tag. This field or the advertiserId field is required on insertion.
+      "url": "A String", # Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.
+      "sslCompliant": True or False, # Whether this tag is SSL-compliant or not. This is a read-only field.
+      "urlEscapeLevels": 42, # Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.
+      "kind": "dfareporting#eventTag", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#eventTag".
+      "enabledByDefault": True or False, # Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.
+      "advertiserId": "A String", # Advertiser ID of this event tag. This field or the campaignId field is required on insertion.
+      "siteFilterType": "A String", # Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteIds": [ # Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a whitelist or blacklist filter.
+        "A String",
+      ],
+      "excludeFromAdxRequests": True or False, # Whether to remove this event tag from ads that are trafficked through DoubleClick Bid Manager to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.
+      "type": "A String", # Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.
+      "id": "A String", # ID of this event tag. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this event tag. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing event tag.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of an event tag.
+    "status": "A String", # Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "subaccountId": "A String", # Subaccount ID of this event tag. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this event tag. This is a required field and must be less than 256 characters long.
+    "campaignId": "A String", # Campaign ID of this event tag. This field or the advertiserId field is required on insertion.
+    "url": "A String", # Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.
+    "sslCompliant": True or False, # Whether this tag is SSL-compliant or not. This is a read-only field.
+    "urlEscapeLevels": 42, # Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.
+    "kind": "dfareporting#eventTag", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#eventTag".
+    "enabledByDefault": True or False, # Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.
+    "advertiserId": "A String", # Advertiser ID of this event tag. This field or the campaignId field is required on insertion.
+    "siteFilterType": "A String", # Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "siteIds": [ # Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a whitelist or blacklist filter.
+      "A String",
+    ],
+    "excludeFromAdxRequests": True or False, # Whether to remove this event tag from ads that are trafficked through DoubleClick Bid Manager to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.
+    "type": "A String", # Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.
+    "id": "A String", # ID of this event tag. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this event tag. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of an event tag.
+      "status": "A String", # Status of this event tag. Must be ENABLED for this event tag to fire. This is a required field.
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "subaccountId": "A String", # Subaccount ID of this event tag. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this event tag. This is a required field and must be less than 256 characters long.
+      "campaignId": "A String", # Campaign ID of this event tag. This field or the advertiserId field is required on insertion.
+      "url": "A String", # Payload URL for this event tag. The URL on a click-through event tag should have a landing page URL appended to the end of it. This field is required on insertion.
+      "sslCompliant": True or False, # Whether this tag is SSL-compliant or not. This is a read-only field.
+      "urlEscapeLevels": 42, # Number of times the landing page URL should be URL-escaped before being appended to the click-through event tag URL. Only applies to click-through event tags as specified by the event tag type.
+      "kind": "dfareporting#eventTag", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#eventTag".
+      "enabledByDefault": True or False, # Whether this event tag should be automatically enabled for all of the advertiser's campaigns and ads.
+      "advertiserId": "A String", # Advertiser ID of this event tag. This field or the campaignId field is required on insertion.
+      "siteFilterType": "A String", # Site filter type for this event tag. If no type is specified then the event tag will be applied to all sites.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteIds": [ # Filter list of site IDs associated with this event tag. The siteFilterType determines whether this is a whitelist or blacklist filter.
+        "A String",
+      ],
+      "excludeFromAdxRequests": True or False, # Whether to remove this event tag from ads that are trafficked through DoubleClick Bid Manager to Ad Exchange. This may be useful if the event tag uses a pixel that is unapproved for Ad Exchange bids on one or more networks, such as the Google Display Network.
+      "type": "A String", # Event tag type. Can be used to specify whether to use a third-party pixel, a third-party JavaScript URL, or a third-party click-through URL for either impression or click tracking. This is a required field.
+      "id": "A String", # ID of this event tag. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this event tag. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.files.html b/docs/dyn/dfareporting_v2_5.files.html
new file mode 100644
index 0000000..1be52b0
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.files.html
@@ -0,0 +1,205 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.files.html">files</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(reportId, fileId)</a></code></p>
+<p class="firstline">Retrieves a report file by its report ID and file ID.</p>
+<p class="toc_element">
+  <code><a href="#get_media">get_media(reportId, fileId)</a></code></p>
+<p class="firstline">Retrieves a report file by its report ID and file ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, pageToken=None, maxResults=None, sortOrder=None, sortField=None, scope=None)</a></code></p>
+<p class="firstline">Lists files for a user profile.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(reportId, fileId)</code>
+  <pre>Retrieves a report file by its report ID and file ID.
+
+Args:
+  reportId: string, The ID of the report. (required)
+  fileId: string, The ID of the report file. (required)
+
+Returns:
+  An object of the form:
+
+    { # Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is "REPORT_AVAILABLE".
+    "status": "A String", # The status of the report file.
+    "kind": "dfareporting#file", # The kind of resource this is, in this case dfareporting#file.
+    "format": "A String", # The output format of the report. Only available once the file is available.
+    "dateRange": { # Represents a date range. # The date range for which the file has report data. The date range will always be the absolute date range for which the report is run.
+      "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+      "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+      "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+      "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+    },
+    "fileName": "A String", # The filename of the file.
+    "etag": "A String", # The eTag of this response for caching purposes.
+    "reportId": "A String", # The ID of the report this file was generated from.
+    "urls": { # The URLs where the completed report file can be downloaded.
+      "browserUrl": "A String", # The URL for downloading the report data through a browser.
+      "apiUrl": "A String", # The URL for downloading the report data through the API.
+    },
+    "lastModifiedTime": "A String", # The timestamp in milliseconds since epoch when this file was last modified.
+    "id": "A String", # The unique ID of this report file.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get_media">get_media(reportId, fileId)</code>
+  <pre>Retrieves a report file by its report ID and file ID.
+
+Args:
+  reportId: string, The ID of the report. (required)
+  fileId: string, The ID of the report file. (required)
+
+Returns:
+  The media object as a string.
+
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, pageToken=None, maxResults=None, sortOrder=None, sortField=None, scope=None)</code>
+  <pre>Lists files for a user profile.
+
+Args:
+  profileId: string, The DFA profile ID. (required)
+  pageToken: string, The value of the nextToken from the previous result page.
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is 'DESCENDING'.
+    Allowed values
+      ASCENDING - Ascending order.
+      DESCENDING - Descending order.
+  sortField: string, The field by which to sort the list.
+    Allowed values
+      ID - Sort by file ID.
+      LAST_MODIFIED_TIME - Sort by 'lastmodifiedAt' field.
+  scope: string, The scope that defines which results are returned, default is 'MINE'.
+    Allowed values
+      ALL - All files in account.
+      MINE - My files.
+      SHARED_WITH_ME - Files shared with me.
+
+Returns:
+  An object of the form:
+
+    { # Represents the list of File resources.
+    "nextPageToken": "A String", # Continuation token used to page through files. To retrieve the next page of results, set the next request's "pageToken" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.
+    "items": [ # The files returned in this response.
+      { # Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is "REPORT_AVAILABLE".
+        "status": "A String", # The status of the report file.
+        "kind": "dfareporting#file", # The kind of resource this is, in this case dfareporting#file.
+        "format": "A String", # The output format of the report. Only available once the file is available.
+        "dateRange": { # Represents a date range. # The date range for which the file has report data. The date range will always be the absolute date range for which the report is run.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "fileName": "A String", # The filename of the file.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "reportId": "A String", # The ID of the report this file was generated from.
+        "urls": { # The URLs where the completed report file can be downloaded.
+          "browserUrl": "A String", # The URL for downloading the report data through a browser.
+          "apiUrl": "A String", # The URL for downloading the report data through the API.
+        },
+        "lastModifiedTime": "A String", # The timestamp in milliseconds since epoch when this file was last modified.
+        "id": "A String", # The unique ID of this report file.
+      },
+    ],
+    "kind": "dfareporting#fileList", # The kind of list this is, in this case dfareporting#fileList.
+    "etag": "A String", # The eTag of this response for caching purposes.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.floodlightActivities.html b/docs/dyn/dfareporting_v2_5.floodlightActivities.html
new file mode 100644
index 0000000..c300f81
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.floodlightActivities.html
@@ -0,0 +1,1045 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.floodlightActivities.html">floodlightActivities</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, id)</a></code></p>
+<p class="firstline">Deletes an existing floodlight activity.</p>
+<p class="toc_element">
+  <code><a href="#generatetag">generatetag(profileId, floodlightActivityId=None)</a></code></p>
+<p class="firstline">Generates a tag for a floodlight activity.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one floodlight activity by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new floodlight activity.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, floodlightActivityGroupName=None, advertiserId=None, tagString=None, floodlightActivityGroupTagString=None, floodlightActivityGroupIds=None, pageToken=None, sortOrder=None, maxResults=None, searchString=None, sortField=None, floodlightConfigurationId=None, ids=None, floodlightActivityGroupType=None)</a></code></p>
+<p class="firstline">Retrieves a list of floodlight activities, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing floodlight activity. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing floodlight activity.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, id)</code>
+  <pre>Deletes an existing floodlight activity.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Floodlight activity ID. (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="generatetag">generatetag(profileId, floodlightActivityId=None)</code>
+  <pre>Generates a tag for a floodlight activity.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  floodlightActivityId: string, Floodlight activity ID for which we want to generate a tag.
+
+Returns:
+  An object of the form:
+
+    { # Floodlight Activity GenerateTag Response
+    "kind": "dfareporting#floodlightActivitiesGenerateTagResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivitiesGenerateTagResponse".
+    "floodlightActivityTag": "A String", # Generated tag for this floodlight activity.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one floodlight activity by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Floodlight activity ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight activity.
+      "tagString": "A String", # Value of the cat= paramter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.
+      "secure": True or False, # Whether this tag should use SSL.
+      "floodlightActivityGroupName": "A String", # Name of the associated floodlight activity group. This is a read-only field.
+      "imageTagEnabled": True or False, # Whether the image tag is enabled for this activity.
+      "advertiserId": "A String", # Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.
+      "tagFormat": "A String", # Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "floodlightActivityGroupId": "A String", # Floodlight activity group ID of this floodlight activity. This is a required field.
+      "id": "A String", # ID of this floodlight activity. This is a read-only, auto-generated field.
+      "floodlightActivityGroupTagString": "A String", # Tag string of the associated floodlight activity group. This is a read-only field.
+      "publisherTags": [ # Publisher dynamic floodlight tags.
+        { # Publisher Dynamic Tag
+          "viewThrough": True or False, # Whether this tag is applicable only for view-throughs.
+          "clickThrough": True or False, # Whether this tag is applicable only for click-throughs.
+          "siteId": "A String", # Site ID of this dynamic tag.
+          "dynamicTag": { # Dynamic Tag # Dynamic floodlight tag.
+            "tag": "A String", # Tag code.
+            "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+            "name": "A String", # Name of this tag.
+          },
+          "directorySiteId": "A String", # Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.
+          "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        },
+      ],
+      "sslCompliant": True or False, # Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "hidden": True or False, # Whether this activity is archived.
+      "accountId": "A String", # Account ID of this floodlight activity. This is a read-only field that can be left blank.
+      "sslRequired": True or False, # Whether this floodlight activity must be SSL-compliant.
+      "expectedUrl": "A String", # URL where this tag will be deployed. If specified, must be less than 256 characters long.
+      "cacheBustingType": "A String", # Code type used for cache busting in the generated tag.
+      "kind": "dfareporting#floodlightActivity", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivity".
+      "subaccountId": "A String", # Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.
+      "notes": "A String", # General notes or implementation instructions for the tag.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.
+      "userDefinedVariableTypes": [ # List of the user-defined variables used by this conversion tag. These map to the "u[1-20]=" in the tags. Each of these can have a user defined type.
+          # Acceptable values are:
+          # - "U1"
+          # - "U2"
+          # - "U3"
+          # - "U4"
+          # - "U5"
+          # - "U6"
+          # - "U7"
+          # - "U8"
+          # - "U9"
+          # - "U10"
+          # - "U11"
+          # - "U12"
+          # - "U13"
+          # - "U14"
+          # - "U15"
+          # - "U16"
+          # - "U17"
+          # - "U18"
+          # - "U19"
+          # - "U20"
+        "A String",
+      ],
+      "defaultTags": [ # Dynamic floodlight tags.
+        { # Dynamic Tag
+          "tag": "A String", # Tag code.
+          "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this tag.
+        },
+      ],
+      "countingMethod": "A String", # Counting method for conversions for this floodlight activity. This is a required field.
+      "floodlightActivityGroupType": "A String", # Type of the associated floodlight activity group. This is a read-only field.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new floodlight activity.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Floodlight activity.
+    "tagString": "A String", # Value of the cat= paramter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.
+    "secure": True or False, # Whether this tag should use SSL.
+    "floodlightActivityGroupName": "A String", # Name of the associated floodlight activity group. This is a read-only field.
+    "imageTagEnabled": True or False, # Whether the image tag is enabled for this activity.
+    "advertiserId": "A String", # Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.
+    "tagFormat": "A String", # Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "floodlightActivityGroupId": "A String", # Floodlight activity group ID of this floodlight activity. This is a required field.
+    "id": "A String", # ID of this floodlight activity. This is a read-only, auto-generated field.
+    "floodlightActivityGroupTagString": "A String", # Tag string of the associated floodlight activity group. This is a read-only field.
+    "publisherTags": [ # Publisher dynamic floodlight tags.
+      { # Publisher Dynamic Tag
+        "viewThrough": True or False, # Whether this tag is applicable only for view-throughs.
+        "clickThrough": True or False, # Whether this tag is applicable only for click-throughs.
+        "siteId": "A String", # Site ID of this dynamic tag.
+        "dynamicTag": { # Dynamic Tag # Dynamic floodlight tag.
+          "tag": "A String", # Tag code.
+          "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this tag.
+        },
+        "directorySiteId": "A String", # Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.
+        "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      },
+    ],
+    "sslCompliant": True or False, # Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.
+    "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "hidden": True or False, # Whether this activity is archived.
+    "accountId": "A String", # Account ID of this floodlight activity. This is a read-only field that can be left blank.
+    "sslRequired": True or False, # Whether this floodlight activity must be SSL-compliant.
+    "expectedUrl": "A String", # URL where this tag will be deployed. If specified, must be less than 256 characters long.
+    "cacheBustingType": "A String", # Code type used for cache busting in the generated tag.
+    "kind": "dfareporting#floodlightActivity", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivity".
+    "subaccountId": "A String", # Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.
+    "notes": "A String", # General notes or implementation instructions for the tag.
+    "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.
+    "userDefinedVariableTypes": [ # List of the user-defined variables used by this conversion tag. These map to the "u[1-20]=" in the tags. Each of these can have a user defined type.
+        # Acceptable values are:
+        # - "U1"
+        # - "U2"
+        # - "U3"
+        # - "U4"
+        # - "U5"
+        # - "U6"
+        # - "U7"
+        # - "U8"
+        # - "U9"
+        # - "U10"
+        # - "U11"
+        # - "U12"
+        # - "U13"
+        # - "U14"
+        # - "U15"
+        # - "U16"
+        # - "U17"
+        # - "U18"
+        # - "U19"
+        # - "U20"
+      "A String",
+    ],
+    "defaultTags": [ # Dynamic floodlight tags.
+      { # Dynamic Tag
+        "tag": "A String", # Tag code.
+        "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+        "name": "A String", # Name of this tag.
+      },
+    ],
+    "countingMethod": "A String", # Counting method for conversions for this floodlight activity. This is a required field.
+    "floodlightActivityGroupType": "A String", # Type of the associated floodlight activity group. This is a read-only field.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight activity.
+      "tagString": "A String", # Value of the cat= paramter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.
+      "secure": True or False, # Whether this tag should use SSL.
+      "floodlightActivityGroupName": "A String", # Name of the associated floodlight activity group. This is a read-only field.
+      "imageTagEnabled": True or False, # Whether the image tag is enabled for this activity.
+      "advertiserId": "A String", # Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.
+      "tagFormat": "A String", # Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "floodlightActivityGroupId": "A String", # Floodlight activity group ID of this floodlight activity. This is a required field.
+      "id": "A String", # ID of this floodlight activity. This is a read-only, auto-generated field.
+      "floodlightActivityGroupTagString": "A String", # Tag string of the associated floodlight activity group. This is a read-only field.
+      "publisherTags": [ # Publisher dynamic floodlight tags.
+        { # Publisher Dynamic Tag
+          "viewThrough": True or False, # Whether this tag is applicable only for view-throughs.
+          "clickThrough": True or False, # Whether this tag is applicable only for click-throughs.
+          "siteId": "A String", # Site ID of this dynamic tag.
+          "dynamicTag": { # Dynamic Tag # Dynamic floodlight tag.
+            "tag": "A String", # Tag code.
+            "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+            "name": "A String", # Name of this tag.
+          },
+          "directorySiteId": "A String", # Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.
+          "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        },
+      ],
+      "sslCompliant": True or False, # Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "hidden": True or False, # Whether this activity is archived.
+      "accountId": "A String", # Account ID of this floodlight activity. This is a read-only field that can be left blank.
+      "sslRequired": True or False, # Whether this floodlight activity must be SSL-compliant.
+      "expectedUrl": "A String", # URL where this tag will be deployed. If specified, must be less than 256 characters long.
+      "cacheBustingType": "A String", # Code type used for cache busting in the generated tag.
+      "kind": "dfareporting#floodlightActivity", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivity".
+      "subaccountId": "A String", # Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.
+      "notes": "A String", # General notes or implementation instructions for the tag.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.
+      "userDefinedVariableTypes": [ # List of the user-defined variables used by this conversion tag. These map to the "u[1-20]=" in the tags. Each of these can have a user defined type.
+          # Acceptable values are:
+          # - "U1"
+          # - "U2"
+          # - "U3"
+          # - "U4"
+          # - "U5"
+          # - "U6"
+          # - "U7"
+          # - "U8"
+          # - "U9"
+          # - "U10"
+          # - "U11"
+          # - "U12"
+          # - "U13"
+          # - "U14"
+          # - "U15"
+          # - "U16"
+          # - "U17"
+          # - "U18"
+          # - "U19"
+          # - "U20"
+        "A String",
+      ],
+      "defaultTags": [ # Dynamic floodlight tags.
+        { # Dynamic Tag
+          "tag": "A String", # Tag code.
+          "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this tag.
+        },
+      ],
+      "countingMethod": "A String", # Counting method for conversions for this floodlight activity. This is a required field.
+      "floodlightActivityGroupType": "A String", # Type of the associated floodlight activity group. This is a read-only field.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, floodlightActivityGroupName=None, advertiserId=None, tagString=None, floodlightActivityGroupTagString=None, floodlightActivityGroupIds=None, pageToken=None, sortOrder=None, maxResults=None, searchString=None, sortField=None, floodlightConfigurationId=None, ids=None, floodlightActivityGroupType=None)</code>
+  <pre>Retrieves a list of floodlight activities, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  floodlightActivityGroupName: string, Select only floodlight activities with the specified floodlight activity group name.
+  advertiserId: string, Select only floodlight activities for the specified advertiser ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.
+  tagString: string, Select only floodlight activities with the specified tag string.
+  floodlightActivityGroupTagString: string, Select only floodlight activities with the specified floodlight activity group tag string.
+  floodlightActivityGroupIds: string, Select only floodlight activities with the specified floodlight activity group IDs. (repeated)
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  maxResults: integer, Maximum number of results to return.
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "floodlightactivity*2015" will return objects with names like "floodlightactivity June 2015", "floodlightactivity April 2015", or simply "floodlightactivity 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "floodlightactivity" will match objects with name "my floodlightactivity activity", "floodlightactivity 2015", or simply "floodlightactivity".
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  floodlightConfigurationId: string, Select only floodlight activities for the specified floodlight configuration ID. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result.
+  ids: string, Select only floodlight activities with the specified IDs. Must specify either ids, advertiserId, or floodlightConfigurationId for a non-empty result. (repeated)
+  floodlightActivityGroupType: string, Select only floodlight activities with the specified floodlight activity group type.
+    Allowed values
+      COUNTER - 
+      SALE - 
+
+Returns:
+  An object of the form:
+
+    { # Floodlight Activity List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#floodlightActivitiesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivitiesListResponse".
+    "floodlightActivities": [ # Floodlight activity collection.
+      { # Contains properties of a Floodlight activity.
+          "tagString": "A String", # Value of the cat= paramter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.
+          "secure": True or False, # Whether this tag should use SSL.
+          "floodlightActivityGroupName": "A String", # Name of the associated floodlight activity group. This is a read-only field.
+          "imageTagEnabled": True or False, # Whether the image tag is enabled for this activity.
+          "advertiserId": "A String", # Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.
+          "tagFormat": "A String", # Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "floodlightActivityGroupId": "A String", # Floodlight activity group ID of this floodlight activity. This is a required field.
+          "id": "A String", # ID of this floodlight activity. This is a read-only, auto-generated field.
+          "floodlightActivityGroupTagString": "A String", # Tag string of the associated floodlight activity group. This is a read-only field.
+          "publisherTags": [ # Publisher dynamic floodlight tags.
+            { # Publisher Dynamic Tag
+              "viewThrough": True or False, # Whether this tag is applicable only for view-throughs.
+              "clickThrough": True or False, # Whether this tag is applicable only for click-throughs.
+              "siteId": "A String", # Site ID of this dynamic tag.
+              "dynamicTag": { # Dynamic Tag # Dynamic floodlight tag.
+                "tag": "A String", # Tag code.
+                "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+                "name": "A String", # Name of this tag.
+              },
+              "directorySiteId": "A String", # Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.
+              "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+            },
+          ],
+          "sslCompliant": True or False, # Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.
+          "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "hidden": True or False, # Whether this activity is archived.
+          "accountId": "A String", # Account ID of this floodlight activity. This is a read-only field that can be left blank.
+          "sslRequired": True or False, # Whether this floodlight activity must be SSL-compliant.
+          "expectedUrl": "A String", # URL where this tag will be deployed. If specified, must be less than 256 characters long.
+          "cacheBustingType": "A String", # Code type used for cache busting in the generated tag.
+          "kind": "dfareporting#floodlightActivity", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivity".
+          "subaccountId": "A String", # Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.
+          "notes": "A String", # General notes or implementation instructions for the tag.
+          "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.
+          "userDefinedVariableTypes": [ # List of the user-defined variables used by this conversion tag. These map to the "u[1-20]=" in the tags. Each of these can have a user defined type.
+              # Acceptable values are:
+              # - "U1"
+              # - "U2"
+              # - "U3"
+              # - "U4"
+              # - "U5"
+              # - "U6"
+              # - "U7"
+              # - "U8"
+              # - "U9"
+              # - "U10"
+              # - "U11"
+              # - "U12"
+              # - "U13"
+              # - "U14"
+              # - "U15"
+              # - "U16"
+              # - "U17"
+              # - "U18"
+              # - "U19"
+              # - "U20"
+            "A String",
+          ],
+          "defaultTags": [ # Dynamic floodlight tags.
+            { # Dynamic Tag
+              "tag": "A String", # Tag code.
+              "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+              "name": "A String", # Name of this tag.
+            },
+          ],
+          "countingMethod": "A String", # Counting method for conversions for this floodlight activity. This is a required field.
+          "floodlightActivityGroupType": "A String", # Type of the associated floodlight activity group. This is a read-only field.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing floodlight activity. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Floodlight activity ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Floodlight activity.
+    "tagString": "A String", # Value of the cat= paramter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.
+    "secure": True or False, # Whether this tag should use SSL.
+    "floodlightActivityGroupName": "A String", # Name of the associated floodlight activity group. This is a read-only field.
+    "imageTagEnabled": True or False, # Whether the image tag is enabled for this activity.
+    "advertiserId": "A String", # Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.
+    "tagFormat": "A String", # Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "floodlightActivityGroupId": "A String", # Floodlight activity group ID of this floodlight activity. This is a required field.
+    "id": "A String", # ID of this floodlight activity. This is a read-only, auto-generated field.
+    "floodlightActivityGroupTagString": "A String", # Tag string of the associated floodlight activity group. This is a read-only field.
+    "publisherTags": [ # Publisher dynamic floodlight tags.
+      { # Publisher Dynamic Tag
+        "viewThrough": True or False, # Whether this tag is applicable only for view-throughs.
+        "clickThrough": True or False, # Whether this tag is applicable only for click-throughs.
+        "siteId": "A String", # Site ID of this dynamic tag.
+        "dynamicTag": { # Dynamic Tag # Dynamic floodlight tag.
+          "tag": "A String", # Tag code.
+          "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this tag.
+        },
+        "directorySiteId": "A String", # Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.
+        "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      },
+    ],
+    "sslCompliant": True or False, # Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.
+    "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "hidden": True or False, # Whether this activity is archived.
+    "accountId": "A String", # Account ID of this floodlight activity. This is a read-only field that can be left blank.
+    "sslRequired": True or False, # Whether this floodlight activity must be SSL-compliant.
+    "expectedUrl": "A String", # URL where this tag will be deployed. If specified, must be less than 256 characters long.
+    "cacheBustingType": "A String", # Code type used for cache busting in the generated tag.
+    "kind": "dfareporting#floodlightActivity", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivity".
+    "subaccountId": "A String", # Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.
+    "notes": "A String", # General notes or implementation instructions for the tag.
+    "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.
+    "userDefinedVariableTypes": [ # List of the user-defined variables used by this conversion tag. These map to the "u[1-20]=" in the tags. Each of these can have a user defined type.
+        # Acceptable values are:
+        # - "U1"
+        # - "U2"
+        # - "U3"
+        # - "U4"
+        # - "U5"
+        # - "U6"
+        # - "U7"
+        # - "U8"
+        # - "U9"
+        # - "U10"
+        # - "U11"
+        # - "U12"
+        # - "U13"
+        # - "U14"
+        # - "U15"
+        # - "U16"
+        # - "U17"
+        # - "U18"
+        # - "U19"
+        # - "U20"
+      "A String",
+    ],
+    "defaultTags": [ # Dynamic floodlight tags.
+      { # Dynamic Tag
+        "tag": "A String", # Tag code.
+        "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+        "name": "A String", # Name of this tag.
+      },
+    ],
+    "countingMethod": "A String", # Counting method for conversions for this floodlight activity. This is a required field.
+    "floodlightActivityGroupType": "A String", # Type of the associated floodlight activity group. This is a read-only field.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight activity.
+      "tagString": "A String", # Value of the cat= paramter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.
+      "secure": True or False, # Whether this tag should use SSL.
+      "floodlightActivityGroupName": "A String", # Name of the associated floodlight activity group. This is a read-only field.
+      "imageTagEnabled": True or False, # Whether the image tag is enabled for this activity.
+      "advertiserId": "A String", # Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.
+      "tagFormat": "A String", # Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "floodlightActivityGroupId": "A String", # Floodlight activity group ID of this floodlight activity. This is a required field.
+      "id": "A String", # ID of this floodlight activity. This is a read-only, auto-generated field.
+      "floodlightActivityGroupTagString": "A String", # Tag string of the associated floodlight activity group. This is a read-only field.
+      "publisherTags": [ # Publisher dynamic floodlight tags.
+        { # Publisher Dynamic Tag
+          "viewThrough": True or False, # Whether this tag is applicable only for view-throughs.
+          "clickThrough": True or False, # Whether this tag is applicable only for click-throughs.
+          "siteId": "A String", # Site ID of this dynamic tag.
+          "dynamicTag": { # Dynamic Tag # Dynamic floodlight tag.
+            "tag": "A String", # Tag code.
+            "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+            "name": "A String", # Name of this tag.
+          },
+          "directorySiteId": "A String", # Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.
+          "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        },
+      ],
+      "sslCompliant": True or False, # Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "hidden": True or False, # Whether this activity is archived.
+      "accountId": "A String", # Account ID of this floodlight activity. This is a read-only field that can be left blank.
+      "sslRequired": True or False, # Whether this floodlight activity must be SSL-compliant.
+      "expectedUrl": "A String", # URL where this tag will be deployed. If specified, must be less than 256 characters long.
+      "cacheBustingType": "A String", # Code type used for cache busting in the generated tag.
+      "kind": "dfareporting#floodlightActivity", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivity".
+      "subaccountId": "A String", # Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.
+      "notes": "A String", # General notes or implementation instructions for the tag.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.
+      "userDefinedVariableTypes": [ # List of the user-defined variables used by this conversion tag. These map to the "u[1-20]=" in the tags. Each of these can have a user defined type.
+          # Acceptable values are:
+          # - "U1"
+          # - "U2"
+          # - "U3"
+          # - "U4"
+          # - "U5"
+          # - "U6"
+          # - "U7"
+          # - "U8"
+          # - "U9"
+          # - "U10"
+          # - "U11"
+          # - "U12"
+          # - "U13"
+          # - "U14"
+          # - "U15"
+          # - "U16"
+          # - "U17"
+          # - "U18"
+          # - "U19"
+          # - "U20"
+        "A String",
+      ],
+      "defaultTags": [ # Dynamic floodlight tags.
+        { # Dynamic Tag
+          "tag": "A String", # Tag code.
+          "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this tag.
+        },
+      ],
+      "countingMethod": "A String", # Counting method for conversions for this floodlight activity. This is a required field.
+      "floodlightActivityGroupType": "A String", # Type of the associated floodlight activity group. This is a read-only field.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing floodlight activity.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Floodlight activity.
+    "tagString": "A String", # Value of the cat= paramter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.
+    "secure": True or False, # Whether this tag should use SSL.
+    "floodlightActivityGroupName": "A String", # Name of the associated floodlight activity group. This is a read-only field.
+    "imageTagEnabled": True or False, # Whether the image tag is enabled for this activity.
+    "advertiserId": "A String", # Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.
+    "tagFormat": "A String", # Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "floodlightActivityGroupId": "A String", # Floodlight activity group ID of this floodlight activity. This is a required field.
+    "id": "A String", # ID of this floodlight activity. This is a read-only, auto-generated field.
+    "floodlightActivityGroupTagString": "A String", # Tag string of the associated floodlight activity group. This is a read-only field.
+    "publisherTags": [ # Publisher dynamic floodlight tags.
+      { # Publisher Dynamic Tag
+        "viewThrough": True or False, # Whether this tag is applicable only for view-throughs.
+        "clickThrough": True or False, # Whether this tag is applicable only for click-throughs.
+        "siteId": "A String", # Site ID of this dynamic tag.
+        "dynamicTag": { # Dynamic Tag # Dynamic floodlight tag.
+          "tag": "A String", # Tag code.
+          "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this tag.
+        },
+        "directorySiteId": "A String", # Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.
+        "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      },
+    ],
+    "sslCompliant": True or False, # Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.
+    "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "hidden": True or False, # Whether this activity is archived.
+    "accountId": "A String", # Account ID of this floodlight activity. This is a read-only field that can be left blank.
+    "sslRequired": True or False, # Whether this floodlight activity must be SSL-compliant.
+    "expectedUrl": "A String", # URL where this tag will be deployed. If specified, must be less than 256 characters long.
+    "cacheBustingType": "A String", # Code type used for cache busting in the generated tag.
+    "kind": "dfareporting#floodlightActivity", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivity".
+    "subaccountId": "A String", # Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.
+    "notes": "A String", # General notes or implementation instructions for the tag.
+    "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.
+    "userDefinedVariableTypes": [ # List of the user-defined variables used by this conversion tag. These map to the "u[1-20]=" in the tags. Each of these can have a user defined type.
+        # Acceptable values are:
+        # - "U1"
+        # - "U2"
+        # - "U3"
+        # - "U4"
+        # - "U5"
+        # - "U6"
+        # - "U7"
+        # - "U8"
+        # - "U9"
+        # - "U10"
+        # - "U11"
+        # - "U12"
+        # - "U13"
+        # - "U14"
+        # - "U15"
+        # - "U16"
+        # - "U17"
+        # - "U18"
+        # - "U19"
+        # - "U20"
+      "A String",
+    ],
+    "defaultTags": [ # Dynamic floodlight tags.
+      { # Dynamic Tag
+        "tag": "A String", # Tag code.
+        "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+        "name": "A String", # Name of this tag.
+      },
+    ],
+    "countingMethod": "A String", # Counting method for conversions for this floodlight activity. This is a required field.
+    "floodlightActivityGroupType": "A String", # Type of the associated floodlight activity group. This is a read-only field.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight activity.
+      "tagString": "A String", # Value of the cat= paramter in the floodlight tag, which the ad servers use to identify the activity. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activities of the same activity group. This field is read-only after insertion.
+      "secure": True or False, # Whether this tag should use SSL.
+      "floodlightActivityGroupName": "A String", # Name of the associated floodlight activity group. This is a read-only field.
+      "imageTagEnabled": True or False, # Whether the image tag is enabled for this activity.
+      "advertiserId": "A String", # Advertiser ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's advertiser or the existing activity's advertiser.
+      "tagFormat": "A String", # Tag format type for the floodlight activity. If left blank, the tag format will default to HTML.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "floodlightActivityGroupId": "A String", # Floodlight activity group ID of this floodlight activity. This is a required field.
+      "id": "A String", # ID of this floodlight activity. This is a read-only, auto-generated field.
+      "floodlightActivityGroupTagString": "A String", # Tag string of the associated floodlight activity group. This is a read-only field.
+      "publisherTags": [ # Publisher dynamic floodlight tags.
+        { # Publisher Dynamic Tag
+          "viewThrough": True or False, # Whether this tag is applicable only for view-throughs.
+          "clickThrough": True or False, # Whether this tag is applicable only for click-throughs.
+          "siteId": "A String", # Site ID of this dynamic tag.
+          "dynamicTag": { # Dynamic Tag # Dynamic floodlight tag.
+            "tag": "A String", # Tag code.
+            "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+            "name": "A String", # Name of this tag.
+          },
+          "directorySiteId": "A String", # Directory site ID of this dynamic tag. This is a write-only field that can be used as an alternative to the siteId field. When this resource is retrieved, only the siteId field will be populated.
+          "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        },
+      ],
+      "sslCompliant": True or False, # Whether the floodlight activity is SSL-compliant. This is a read-only field, its value detected by the system from the floodlight tags.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "hidden": True or False, # Whether this activity is archived.
+      "accountId": "A String", # Account ID of this floodlight activity. This is a read-only field that can be left blank.
+      "sslRequired": True or False, # Whether this floodlight activity must be SSL-compliant.
+      "expectedUrl": "A String", # URL where this tag will be deployed. If specified, must be less than 256 characters long.
+      "cacheBustingType": "A String", # Code type used for cache busting in the generated tag.
+      "kind": "dfareporting#floodlightActivity", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivity".
+      "subaccountId": "A String", # Subaccount ID of this floodlight activity. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this floodlight activity. This is a required field. Must be less than 129 characters long and cannot contain quotes.
+      "notes": "A String", # General notes or implementation instructions for the tag.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity. If this field is left blank, the value will be copied over either from the activity group's floodlight configuration or from the existing activity's floodlight configuration.
+      "userDefinedVariableTypes": [ # List of the user-defined variables used by this conversion tag. These map to the "u[1-20]=" in the tags. Each of these can have a user defined type.
+          # Acceptable values are:
+          # - "U1"
+          # - "U2"
+          # - "U3"
+          # - "U4"
+          # - "U5"
+          # - "U6"
+          # - "U7"
+          # - "U8"
+          # - "U9"
+          # - "U10"
+          # - "U11"
+          # - "U12"
+          # - "U13"
+          # - "U14"
+          # - "U15"
+          # - "U16"
+          # - "U17"
+          # - "U18"
+          # - "U19"
+          # - "U20"
+        "A String",
+      ],
+      "defaultTags": [ # Dynamic floodlight tags.
+        { # Dynamic Tag
+          "tag": "A String", # Tag code.
+          "id": "A String", # ID of this dynamic tag. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this tag.
+        },
+      ],
+      "countingMethod": "A String", # Counting method for conversions for this floodlight activity. This is a required field.
+      "floodlightActivityGroupType": "A String", # Type of the associated floodlight activity group. This is a read-only field.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.floodlightActivityGroups.html b/docs/dyn/dfareporting_v2_5.floodlightActivityGroups.html
new file mode 100644
index 0000000..0249afd
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.floodlightActivityGroups.html
@@ -0,0 +1,488 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.floodlightActivityGroups.html">floodlightActivityGroups</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one floodlight activity group by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new floodlight activity group.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, advertiserId=None, searchString=None, pageToken=None, sortField=None, floodlightConfigurationId=None, ids=None, maxResults=None, sortOrder=None, type=None)</a></code></p>
+<p class="firstline">Retrieves a list of floodlight activity groups, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing floodlight activity group. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing floodlight activity group.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one floodlight activity group by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Floodlight activity Group ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight activity group.
+      "kind": "dfareporting#floodlightActivityGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivityGroup".
+      "subaccountId": "A String", # Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity group. This is a required field.
+      "advertiserId": "A String", # Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "tagString": "A String", # Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.
+      "type": "A String", # Type of the floodlight activity group. This is a required field that is read-only after insertion.
+      "id": "A String", # ID of this floodlight activity group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this floodlight activity group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new floodlight activity group.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Floodlight activity group.
+    "kind": "dfareporting#floodlightActivityGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivityGroup".
+    "subaccountId": "A String", # Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.
+    "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity group. This is a required field.
+    "advertiserId": "A String", # Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.
+    "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "tagString": "A String", # Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.
+    "type": "A String", # Type of the floodlight activity group. This is a required field that is read-only after insertion.
+    "id": "A String", # ID of this floodlight activity group. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this floodlight activity group. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight activity group.
+      "kind": "dfareporting#floodlightActivityGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivityGroup".
+      "subaccountId": "A String", # Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity group. This is a required field.
+      "advertiserId": "A String", # Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "tagString": "A String", # Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.
+      "type": "A String", # Type of the floodlight activity group. This is a required field that is read-only after insertion.
+      "id": "A String", # ID of this floodlight activity group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this floodlight activity group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, advertiserId=None, searchString=None, pageToken=None, sortField=None, floodlightConfigurationId=None, ids=None, maxResults=None, sortOrder=None, type=None)</code>
+  <pre>Retrieves a list of floodlight activity groups, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  advertiserId: string, Select only floodlight activity groups with the specified advertiser ID. Must specify either advertiserId or floodlightConfigurationId for a non-empty result.
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "floodlightactivitygroup*2015" will return objects with names like "floodlightactivitygroup June 2015", "floodlightactivitygroup April 2015", or simply "floodlightactivitygroup 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "floodlightactivitygroup" will match objects with name "my floodlightactivitygroup activity", "floodlightactivitygroup 2015", or simply "floodlightactivitygroup".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  floodlightConfigurationId: string, Select only floodlight activity groups with the specified floodlight configuration ID. Must specify either advertiserId, or floodlightConfigurationId for a non-empty result.
+  ids: string, Select only floodlight activity groups with the specified IDs. Must specify either advertiserId or floodlightConfigurationId for a non-empty result. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  type: string, Select only floodlight activity groups with the specified floodlight activity group type.
+    Allowed values
+      COUNTER - 
+      SALE - 
+
+Returns:
+  An object of the form:
+
+    { # Floodlight Activity Group List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#floodlightActivityGroupsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivityGroupsListResponse".
+    "floodlightActivityGroups": [ # Floodlight activity group collection.
+      { # Contains properties of a Floodlight activity group.
+          "kind": "dfareporting#floodlightActivityGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivityGroup".
+          "subaccountId": "A String", # Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.
+          "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity group. This is a required field.
+          "advertiserId": "A String", # Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.
+          "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "tagString": "A String", # Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.
+          "type": "A String", # Type of the floodlight activity group. This is a required field that is read-only after insertion.
+          "id": "A String", # ID of this floodlight activity group. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this floodlight activity group. This is a read-only field that can be left blank.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing floodlight activity group. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Floodlight activity Group ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Floodlight activity group.
+    "kind": "dfareporting#floodlightActivityGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivityGroup".
+    "subaccountId": "A String", # Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.
+    "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity group. This is a required field.
+    "advertiserId": "A String", # Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.
+    "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "tagString": "A String", # Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.
+    "type": "A String", # Type of the floodlight activity group. This is a required field that is read-only after insertion.
+    "id": "A String", # ID of this floodlight activity group. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this floodlight activity group. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight activity group.
+      "kind": "dfareporting#floodlightActivityGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivityGroup".
+      "subaccountId": "A String", # Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity group. This is a required field.
+      "advertiserId": "A String", # Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "tagString": "A String", # Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.
+      "type": "A String", # Type of the floodlight activity group. This is a required field that is read-only after insertion.
+      "id": "A String", # ID of this floodlight activity group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this floodlight activity group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing floodlight activity group.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Floodlight activity group.
+    "kind": "dfareporting#floodlightActivityGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivityGroup".
+    "subaccountId": "A String", # Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.
+    "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity group. This is a required field.
+    "advertiserId": "A String", # Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.
+    "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "tagString": "A String", # Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.
+    "type": "A String", # Type of the floodlight activity group. This is a required field that is read-only after insertion.
+    "id": "A String", # ID of this floodlight activity group. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this floodlight activity group. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight activity group.
+      "kind": "dfareporting#floodlightActivityGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightActivityGroup".
+      "subaccountId": "A String", # Subaccount ID of this floodlight activity group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this floodlight activity group. This is a required field. Must be less than 65 characters long and cannot contain quotes.
+      "floodlightConfigurationId": "A String", # Floodlight configuration ID of this floodlight activity group. This is a required field.
+      "advertiserId": "A String", # Advertiser ID of this floodlight activity group. If this field is left blank, the value will be copied over either from the floodlight configuration's advertiser or from the existing activity group's advertiser.
+      "floodlightConfigurationIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight activity group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "tagString": "A String", # Value of the type= parameter in the floodlight tag, which the ad servers use to identify the activity group that the activity belongs to. This is optional: if empty, a new tag string will be generated for you. This string must be 1 to 8 characters long, with valid characters being [a-z][A-Z][0-9][-][ _ ]. This tag string must also be unique among activity groups of the same floodlight configuration. This field is read-only after insertion.
+      "type": "A String", # Type of the floodlight activity group. This is a required field that is read-only after insertion.
+      "id": "A String", # ID of this floodlight activity group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this floodlight activity group. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.floodlightConfigurations.html b/docs/dyn/dfareporting_v2_5.floodlightConfigurations.html
new file mode 100644
index 0000000..03f53de
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.floodlightConfigurations.html
@@ -0,0 +1,514 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.floodlightConfigurations.html">floodlightConfigurations</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one floodlight configuration by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, ids=None)</a></code></p>
+<p class="firstline">Retrieves a list of floodlight configurations, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing floodlight configuration. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing floodlight configuration.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one floodlight configuration by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Floodlight configuration ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight configuration.
+      "naturalSearchConversionAttributionOption": "A String", # Types of attribution options for natural search conversions.
+      "kind": "dfareporting#floodlightConfiguration", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightConfiguration".
+      "exposureToConversionEnabled": True or False, # Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this floodlight configuration.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "tagSettings": { # Dynamic and Image Tag Settings. # Configuration settings for dynamic and image floodlight tags.
+        "dynamicTagEnabled": True or False, # Whether dynamic floodlight tags are enabled.
+        "imageTagEnabled": True or False, # Whether image tags are enabled.
+      },
+      "firstDayOfWeek": "A String", # Day that will be counted as the first day of the week in reports. This is a required field.
+      "standardVariableTypes": [ # List of standard variables enabled for this configuration.
+          #
+          # Acceptable values are:
+          # - "ORD"
+          # - "NUM"
+        "A String",
+      ],
+      "omnitureSettings": { # Omniture Integration Settings. # Settings for DCM Omniture integration.
+        "omnitureCostDataEnabled": True or False, # Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.
+        "omnitureIntegrationEnabled": True or False, # Whether Omniture integration is enabled. This property can be enabled only when the "Advanced Ad Serving" account setting is enabled.
+      },
+      "subaccountId": "A String", # Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.
+      "advertiserId": "A String", # Advertiser ID of the parent advertiser of this floodlight configuration.
+      "analyticsDataSharingEnabled": True or False, # Whether advertiser data is shared with Google Analytics.
+      "inAppAttributionTrackingEnabled": True or False, # Whether in-app attribution tracking is enabled.
+      "thirdPartyAuthenticationTokens": [ # List of third-party authentication tokens enabled for this configuration.
+        { # Third Party Authentication Token
+          "name": "A String", # Name of the third-party authentication token.
+          "value": "A String", # Value of the third-party authentication token. This is a read-only, auto-generated field.
+        },
+      ],
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this floodlight configuration. This is a read-only, auto-generated field.
+      "userDefinedVariableConfigurations": [ # List of user defined variables enabled for this configuration.
+        { # User Defined Variable configuration.
+          "dataType": "A String", # Data type for the variable. This is a required field.
+          "reportName": "A String", # User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: ""<>".
+          "variableType": "A String", # Variable name in the tag. This is a required field.
+        },
+      ],
+      "accountId": "A String", # Account ID of this floodlight configuration. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, ids=None)</code>
+  <pre>Retrieves a list of floodlight configurations, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  ids: string, Set of IDs of floodlight configurations to retrieve. Required field; otherwise an empty list will be returned. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Floodlight Configuration List Response
+    "floodlightConfigurations": [ # Floodlight configuration collection.
+      { # Contains properties of a Floodlight configuration.
+          "naturalSearchConversionAttributionOption": "A String", # Types of attribution options for natural search conversions.
+          "kind": "dfareporting#floodlightConfiguration", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightConfiguration".
+          "exposureToConversionEnabled": True or False, # Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+          "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this floodlight configuration.
+            "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+            "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          },
+          "tagSettings": { # Dynamic and Image Tag Settings. # Configuration settings for dynamic and image floodlight tags.
+            "dynamicTagEnabled": True or False, # Whether dynamic floodlight tags are enabled.
+            "imageTagEnabled": True or False, # Whether image tags are enabled.
+          },
+          "firstDayOfWeek": "A String", # Day that will be counted as the first day of the week in reports. This is a required field.
+          "standardVariableTypes": [ # List of standard variables enabled for this configuration.
+              #
+              # Acceptable values are:
+              # - "ORD"
+              # - "NUM"
+            "A String",
+          ],
+          "omnitureSettings": { # Omniture Integration Settings. # Settings for DCM Omniture integration.
+            "omnitureCostDataEnabled": True or False, # Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.
+            "omnitureIntegrationEnabled": True or False, # Whether Omniture integration is enabled. This property can be enabled only when the "Advanced Ad Serving" account setting is enabled.
+          },
+          "subaccountId": "A String", # Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.
+          "advertiserId": "A String", # Advertiser ID of the parent advertiser of this floodlight configuration.
+          "analyticsDataSharingEnabled": True or False, # Whether advertiser data is shared with Google Analytics.
+          "inAppAttributionTrackingEnabled": True or False, # Whether in-app attribution tracking is enabled.
+          "thirdPartyAuthenticationTokens": [ # List of third-party authentication tokens enabled for this configuration.
+            { # Third Party Authentication Token
+              "name": "A String", # Name of the third-party authentication token.
+              "value": "A String", # Value of the third-party authentication token. This is a read-only, auto-generated field.
+            },
+          ],
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "id": "A String", # ID of this floodlight configuration. This is a read-only, auto-generated field.
+          "userDefinedVariableConfigurations": [ # List of user defined variables enabled for this configuration.
+            { # User Defined Variable configuration.
+              "dataType": "A String", # Data type for the variable. This is a required field.
+              "reportName": "A String", # User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: ""<>".
+              "variableType": "A String", # Variable name in the tag. This is a required field.
+            },
+          ],
+          "accountId": "A String", # Account ID of this floodlight configuration. This is a read-only field that can be left blank.
+        },
+    ],
+    "kind": "dfareporting#floodlightConfigurationsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightConfigurationsListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing floodlight configuration. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Floodlight configuration ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Floodlight configuration.
+    "naturalSearchConversionAttributionOption": "A String", # Types of attribution options for natural search conversions.
+    "kind": "dfareporting#floodlightConfiguration", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightConfiguration".
+    "exposureToConversionEnabled": True or False, # Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+    "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this floodlight configuration.
+      "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+    },
+    "tagSettings": { # Dynamic and Image Tag Settings. # Configuration settings for dynamic and image floodlight tags.
+      "dynamicTagEnabled": True or False, # Whether dynamic floodlight tags are enabled.
+      "imageTagEnabled": True or False, # Whether image tags are enabled.
+    },
+    "firstDayOfWeek": "A String", # Day that will be counted as the first day of the week in reports. This is a required field.
+    "standardVariableTypes": [ # List of standard variables enabled for this configuration.
+        # 
+        # Acceptable values are:
+        # - "ORD"
+        # - "NUM"
+      "A String",
+    ],
+    "omnitureSettings": { # Omniture Integration Settings. # Settings for DCM Omniture integration.
+      "omnitureCostDataEnabled": True or False, # Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.
+      "omnitureIntegrationEnabled": True or False, # Whether Omniture integration is enabled. This property can be enabled only when the "Advanced Ad Serving" account setting is enabled.
+    },
+    "subaccountId": "A String", # Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.
+    "advertiserId": "A String", # Advertiser ID of the parent advertiser of this floodlight configuration.
+    "analyticsDataSharingEnabled": True or False, # Whether advertiser data is shared with Google Analytics.
+    "inAppAttributionTrackingEnabled": True or False, # Whether in-app attribution tracking is enabled.
+    "thirdPartyAuthenticationTokens": [ # List of third-party authentication tokens enabled for this configuration.
+      { # Third Party Authentication Token
+        "name": "A String", # Name of the third-party authentication token.
+        "value": "A String", # Value of the third-party authentication token. This is a read-only, auto-generated field.
+      },
+    ],
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this floodlight configuration. This is a read-only, auto-generated field.
+    "userDefinedVariableConfigurations": [ # List of user defined variables enabled for this configuration.
+      { # User Defined Variable configuration.
+        "dataType": "A String", # Data type for the variable. This is a required field.
+        "reportName": "A String", # User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: ""<>".
+        "variableType": "A String", # Variable name in the tag. This is a required field.
+      },
+    ],
+    "accountId": "A String", # Account ID of this floodlight configuration. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight configuration.
+      "naturalSearchConversionAttributionOption": "A String", # Types of attribution options for natural search conversions.
+      "kind": "dfareporting#floodlightConfiguration", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightConfiguration".
+      "exposureToConversionEnabled": True or False, # Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this floodlight configuration.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "tagSettings": { # Dynamic and Image Tag Settings. # Configuration settings for dynamic and image floodlight tags.
+        "dynamicTagEnabled": True or False, # Whether dynamic floodlight tags are enabled.
+        "imageTagEnabled": True or False, # Whether image tags are enabled.
+      },
+      "firstDayOfWeek": "A String", # Day that will be counted as the first day of the week in reports. This is a required field.
+      "standardVariableTypes": [ # List of standard variables enabled for this configuration.
+          #
+          # Acceptable values are:
+          # - "ORD"
+          # - "NUM"
+        "A String",
+      ],
+      "omnitureSettings": { # Omniture Integration Settings. # Settings for DCM Omniture integration.
+        "omnitureCostDataEnabled": True or False, # Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.
+        "omnitureIntegrationEnabled": True or False, # Whether Omniture integration is enabled. This property can be enabled only when the "Advanced Ad Serving" account setting is enabled.
+      },
+      "subaccountId": "A String", # Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.
+      "advertiserId": "A String", # Advertiser ID of the parent advertiser of this floodlight configuration.
+      "analyticsDataSharingEnabled": True or False, # Whether advertiser data is shared with Google Analytics.
+      "inAppAttributionTrackingEnabled": True or False, # Whether in-app attribution tracking is enabled.
+      "thirdPartyAuthenticationTokens": [ # List of third-party authentication tokens enabled for this configuration.
+        { # Third Party Authentication Token
+          "name": "A String", # Name of the third-party authentication token.
+          "value": "A String", # Value of the third-party authentication token. This is a read-only, auto-generated field.
+        },
+      ],
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this floodlight configuration. This is a read-only, auto-generated field.
+      "userDefinedVariableConfigurations": [ # List of user defined variables enabled for this configuration.
+        { # User Defined Variable configuration.
+          "dataType": "A String", # Data type for the variable. This is a required field.
+          "reportName": "A String", # User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: ""<>".
+          "variableType": "A String", # Variable name in the tag. This is a required field.
+        },
+      ],
+      "accountId": "A String", # Account ID of this floodlight configuration. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing floodlight configuration.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a Floodlight configuration.
+    "naturalSearchConversionAttributionOption": "A String", # Types of attribution options for natural search conversions.
+    "kind": "dfareporting#floodlightConfiguration", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightConfiguration".
+    "exposureToConversionEnabled": True or False, # Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+    "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this floodlight configuration.
+      "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+    },
+    "tagSettings": { # Dynamic and Image Tag Settings. # Configuration settings for dynamic and image floodlight tags.
+      "dynamicTagEnabled": True or False, # Whether dynamic floodlight tags are enabled.
+      "imageTagEnabled": True or False, # Whether image tags are enabled.
+    },
+    "firstDayOfWeek": "A String", # Day that will be counted as the first day of the week in reports. This is a required field.
+    "standardVariableTypes": [ # List of standard variables enabled for this configuration.
+        # 
+        # Acceptable values are:
+        # - "ORD"
+        # - "NUM"
+      "A String",
+    ],
+    "omnitureSettings": { # Omniture Integration Settings. # Settings for DCM Omniture integration.
+      "omnitureCostDataEnabled": True or False, # Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.
+      "omnitureIntegrationEnabled": True or False, # Whether Omniture integration is enabled. This property can be enabled only when the "Advanced Ad Serving" account setting is enabled.
+    },
+    "subaccountId": "A String", # Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.
+    "advertiserId": "A String", # Advertiser ID of the parent advertiser of this floodlight configuration.
+    "analyticsDataSharingEnabled": True or False, # Whether advertiser data is shared with Google Analytics.
+    "inAppAttributionTrackingEnabled": True or False, # Whether in-app attribution tracking is enabled.
+    "thirdPartyAuthenticationTokens": [ # List of third-party authentication tokens enabled for this configuration.
+      { # Third Party Authentication Token
+        "name": "A String", # Name of the third-party authentication token.
+        "value": "A String", # Value of the third-party authentication token. This is a read-only, auto-generated field.
+      },
+    ],
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this floodlight configuration. This is a read-only, auto-generated field.
+    "userDefinedVariableConfigurations": [ # List of user defined variables enabled for this configuration.
+      { # User Defined Variable configuration.
+        "dataType": "A String", # Data type for the variable. This is a required field.
+        "reportName": "A String", # User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: ""<>".
+        "variableType": "A String", # Variable name in the tag. This is a required field.
+      },
+    ],
+    "accountId": "A String", # Account ID of this floodlight configuration. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a Floodlight configuration.
+      "naturalSearchConversionAttributionOption": "A String", # Types of attribution options for natural search conversions.
+      "kind": "dfareporting#floodlightConfiguration", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#floodlightConfiguration".
+      "exposureToConversionEnabled": True or False, # Whether the exposure-to-conversion report is enabled. This report shows detailed pathway information on up to 10 of the most recent ad exposures seen by a user before converting.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this floodlight configuration.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "tagSettings": { # Dynamic and Image Tag Settings. # Configuration settings for dynamic and image floodlight tags.
+        "dynamicTagEnabled": True or False, # Whether dynamic floodlight tags are enabled.
+        "imageTagEnabled": True or False, # Whether image tags are enabled.
+      },
+      "firstDayOfWeek": "A String", # Day that will be counted as the first day of the week in reports. This is a required field.
+      "standardVariableTypes": [ # List of standard variables enabled for this configuration.
+          #
+          # Acceptable values are:
+          # - "ORD"
+          # - "NUM"
+        "A String",
+      ],
+      "omnitureSettings": { # Omniture Integration Settings. # Settings for DCM Omniture integration.
+        "omnitureCostDataEnabled": True or False, # Whether placement cost data will be sent to Omniture. This property can be enabled only if omnitureIntegrationEnabled is true.
+        "omnitureIntegrationEnabled": True or False, # Whether Omniture integration is enabled. This property can be enabled only when the "Advanced Ad Serving" account setting is enabled.
+      },
+      "subaccountId": "A String", # Subaccount ID of this floodlight configuration. This is a read-only field that can be left blank.
+      "advertiserId": "A String", # Advertiser ID of the parent advertiser of this floodlight configuration.
+      "analyticsDataSharingEnabled": True or False, # Whether advertiser data is shared with Google Analytics.
+      "inAppAttributionTrackingEnabled": True or False, # Whether in-app attribution tracking is enabled.
+      "thirdPartyAuthenticationTokens": [ # List of third-party authentication tokens enabled for this configuration.
+        { # Third Party Authentication Token
+          "name": "A String", # Name of the third-party authentication token.
+          "value": "A String", # Value of the third-party authentication token. This is a read-only, auto-generated field.
+        },
+      ],
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this floodlight configuration. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this floodlight configuration. This is a read-only, auto-generated field.
+      "userDefinedVariableConfigurations": [ # List of user defined variables enabled for this configuration.
+        { # User Defined Variable configuration.
+          "dataType": "A String", # Data type for the variable. This is a required field.
+          "reportName": "A String", # User-friendly name for the variable which will appear in reports. This is a required field, must be less than 64 characters long, and cannot contain the following characters: ""<>".
+          "variableType": "A String", # Variable name in the tag. This is a required field.
+        },
+      ],
+      "accountId": "A String", # Account ID of this floodlight configuration. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.html b/docs/dyn/dfareporting_v2_5.html
new file mode 100644
index 0000000..6ad6b94
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.html
@@ -0,0 +1,383 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.accountActiveAdSummaries.html">accountActiveAdSummaries()</a></code>
+</p>
+<p class="firstline">Returns the accountActiveAdSummaries Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.accountPermissionGroups.html">accountPermissionGroups()</a></code>
+</p>
+<p class="firstline">Returns the accountPermissionGroups Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.accountPermissions.html">accountPermissions()</a></code>
+</p>
+<p class="firstline">Returns the accountPermissions Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.accountUserProfiles.html">accountUserProfiles()</a></code>
+</p>
+<p class="firstline">Returns the accountUserProfiles Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.accounts.html">accounts()</a></code>
+</p>
+<p class="firstline">Returns the accounts Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.ads.html">ads()</a></code>
+</p>
+<p class="firstline">Returns the ads Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.advertiserGroups.html">advertiserGroups()</a></code>
+</p>
+<p class="firstline">Returns the advertiserGroups Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.advertisers.html">advertisers()</a></code>
+</p>
+<p class="firstline">Returns the advertisers Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.browsers.html">browsers()</a></code>
+</p>
+<p class="firstline">Returns the browsers Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.campaignCreativeAssociations.html">campaignCreativeAssociations()</a></code>
+</p>
+<p class="firstline">Returns the campaignCreativeAssociations Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.campaigns.html">campaigns()</a></code>
+</p>
+<p class="firstline">Returns the campaigns Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.changeLogs.html">changeLogs()</a></code>
+</p>
+<p class="firstline">Returns the changeLogs Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.cities.html">cities()</a></code>
+</p>
+<p class="firstline">Returns the cities Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.connectionTypes.html">connectionTypes()</a></code>
+</p>
+<p class="firstline">Returns the connectionTypes Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.contentCategories.html">contentCategories()</a></code>
+</p>
+<p class="firstline">Returns the contentCategories Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.conversions.html">conversions()</a></code>
+</p>
+<p class="firstline">Returns the conversions Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.countries.html">countries()</a></code>
+</p>
+<p class="firstline">Returns the countries Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.creativeAssets.html">creativeAssets()</a></code>
+</p>
+<p class="firstline">Returns the creativeAssets Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.creativeFieldValues.html">creativeFieldValues()</a></code>
+</p>
+<p class="firstline">Returns the creativeFieldValues Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.creativeFields.html">creativeFields()</a></code>
+</p>
+<p class="firstline">Returns the creativeFields Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.creativeGroups.html">creativeGroups()</a></code>
+</p>
+<p class="firstline">Returns the creativeGroups Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.creatives.html">creatives()</a></code>
+</p>
+<p class="firstline">Returns the creatives Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.dimensionValues.html">dimensionValues()</a></code>
+</p>
+<p class="firstline">Returns the dimensionValues Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.directorySiteContacts.html">directorySiteContacts()</a></code>
+</p>
+<p class="firstline">Returns the directorySiteContacts Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.directorySites.html">directorySites()</a></code>
+</p>
+<p class="firstline">Returns the directorySites Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.dynamicTargetingKeys.html">dynamicTargetingKeys()</a></code>
+</p>
+<p class="firstline">Returns the dynamicTargetingKeys Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.eventTags.html">eventTags()</a></code>
+</p>
+<p class="firstline">Returns the eventTags Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.files.html">files()</a></code>
+</p>
+<p class="firstline">Returns the files Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.floodlightActivities.html">floodlightActivities()</a></code>
+</p>
+<p class="firstline">Returns the floodlightActivities Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.floodlightActivityGroups.html">floodlightActivityGroups()</a></code>
+</p>
+<p class="firstline">Returns the floodlightActivityGroups Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.floodlightConfigurations.html">floodlightConfigurations()</a></code>
+</p>
+<p class="firstline">Returns the floodlightConfigurations Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.inventoryItems.html">inventoryItems()</a></code>
+</p>
+<p class="firstline">Returns the inventoryItems Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.landingPages.html">landingPages()</a></code>
+</p>
+<p class="firstline">Returns the landingPages Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.metros.html">metros()</a></code>
+</p>
+<p class="firstline">Returns the metros Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.mobileCarriers.html">mobileCarriers()</a></code>
+</p>
+<p class="firstline">Returns the mobileCarriers Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.operatingSystemVersions.html">operatingSystemVersions()</a></code>
+</p>
+<p class="firstline">Returns the operatingSystemVersions Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.operatingSystems.html">operatingSystems()</a></code>
+</p>
+<p class="firstline">Returns the operatingSystems Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.orderDocuments.html">orderDocuments()</a></code>
+</p>
+<p class="firstline">Returns the orderDocuments Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.orders.html">orders()</a></code>
+</p>
+<p class="firstline">Returns the orders Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.placementGroups.html">placementGroups()</a></code>
+</p>
+<p class="firstline">Returns the placementGroups Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.placementStrategies.html">placementStrategies()</a></code>
+</p>
+<p class="firstline">Returns the placementStrategies Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.placements.html">placements()</a></code>
+</p>
+<p class="firstline">Returns the placements Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.platformTypes.html">platformTypes()</a></code>
+</p>
+<p class="firstline">Returns the platformTypes Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.postalCodes.html">postalCodes()</a></code>
+</p>
+<p class="firstline">Returns the postalCodes Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.regions.html">regions()</a></code>
+</p>
+<p class="firstline">Returns the regions Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.remarketingListShares.html">remarketingListShares()</a></code>
+</p>
+<p class="firstline">Returns the remarketingListShares Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.remarketingLists.html">remarketingLists()</a></code>
+</p>
+<p class="firstline">Returns the remarketingLists Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.reports.html">reports()</a></code>
+</p>
+<p class="firstline">Returns the reports Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.sites.html">sites()</a></code>
+</p>
+<p class="firstline">Returns the sites Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.sizes.html">sizes()</a></code>
+</p>
+<p class="firstline">Returns the sizes Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.subaccounts.html">subaccounts()</a></code>
+</p>
+<p class="firstline">Returns the subaccounts Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.targetableRemarketingLists.html">targetableRemarketingLists()</a></code>
+</p>
+<p class="firstline">Returns the targetableRemarketingLists Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.userProfiles.html">userProfiles()</a></code>
+</p>
+<p class="firstline">Returns the userProfiles Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.userRolePermissionGroups.html">userRolePermissionGroups()</a></code>
+</p>
+<p class="firstline">Returns the userRolePermissionGroups Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.userRolePermissions.html">userRolePermissions()</a></code>
+</p>
+<p class="firstline">Returns the userRolePermissions Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.userRoles.html">userRoles()</a></code>
+</p>
+<p class="firstline">Returns the userRoles Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.inventoryItems.html b/docs/dyn/dfareporting_v2_5.inventoryItems.html
new file mode 100644
index 0000000..f4aa0d6
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.inventoryItems.html
@@ -0,0 +1,250 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.inventoryItems.html">inventoryItems</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, projectId, id)</a></code></p>
+<p class="firstline">Gets one inventory item by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, projectId, pageToken=None, inPlan=None, sortOrder=None, type=None, orderId=None, maxResults=None, siteId=None, sortField=None, ids=None)</a></code></p>
+<p class="firstline">Retrieves a list of inventory items, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, projectId, id)</code>
+  <pre>Gets one inventory item by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  projectId: string, Project ID for order documents. (required)
+  id: string, Inventory item ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Represents a buy from the DoubleClick Planning inventory store.
+    "orderId": "A String", # Order ID of this inventory item.
+    "pricing": { # Pricing Information # Pricing of this inventory item.
+      "groupType": "A String", # Group type of this inventory item if it represents a placement group. Is null otherwise. There are two type of placement groups: PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE is a simple group of inventory items that acts as a single pricing point for a group of tags. PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK is a group of inventory items that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned inventory items to be marked as primary.
+      "startDate": "A String", # Start date of this inventory item.
+      "endDate": "A String", # End date of this inventory item.
+      "pricingType": "A String", # Pricing type of this inventory item.
+      "flights": [ # Flights of this inventory item. A flight (a.k.a. pricing period) represents the inventory item pricing information for a specific period of time.
+        { # Flight
+          "rateOrCost": "A String", # Rate or cost of this flight.
+          "startDate": "A String", # Inventory item flight start date.
+          "units": "A String", # Units of this flight.
+          "endDate": "A String", # Inventory item flight end date.
+        },
+      ],
+      "capCostType": "A String", # Cap cost type of this inventory item.
+    },
+    "kind": "dfareporting#inventoryItem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#inventoryItem".
+    "negotiationChannelId": "A String", # Negotiation channel ID of this inventory item.
+    "subaccountId": "A String", # Subaccount ID of this inventory item.
+    "name": "A String", # Name of this inventory item. For standalone inventory items, this is the same name as that of its only ad slot. For group inventory items, this can differ from the name of any of its ad slots.
+    "estimatedClickThroughRate": "A String", # Estimated click-through rate of this inventory item.
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this inventory item.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "estimatedConversionRate": "A String", # Estimated conversion rate of this inventory item.
+    "inPlan": True or False, # Whether this inventory item is in plan.
+    "id": "A String", # ID of this inventory item.
+    "advertiserId": "A String", # Advertiser ID of this inventory item.
+    "siteId": "A String", # ID of the site this inventory item is associated with.
+    "adSlots": [ # Ad slots of this inventory item. If this inventory item represents a standalone placement, there will be exactly one ad slot. If this inventory item represents a placement group, there will be more than one ad slot, each representing one child placement in that placement group.
+      { # Ad Slot
+        "comment": "A String", # Comment for this ad slot.
+        "linkedPlacementId": "A String", # ID of the placement from an external platform that is linked to this ad slot.
+        "name": "A String", # Name of this ad slot.
+        "primary": True or False, # Primary ad slot of a roadblock inventory item.
+        "height": "A String", # Height of this ad slot.
+        "width": "A String", # Width of this ad slot.
+        "paymentSourceType": "A String", # Payment source type of this ad slot.
+        "compatibility": "A String", # Ad slot compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop, mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard.
+      },
+    ],
+    "projectId": "A String", # Project ID of this inventory item.
+    "rfpId": "A String", # RFP ID of this inventory item.
+    "type": "A String", # Type of inventory item.
+    "contentCategoryId": "A String", # Content category ID of this inventory item.
+    "placementStrategyId": "A String", # Placement strategy ID of this inventory item.
+    "accountId": "A String", # Account ID of this inventory item.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, projectId, pageToken=None, inPlan=None, sortOrder=None, type=None, orderId=None, maxResults=None, siteId=None, sortField=None, ids=None)</code>
+  <pre>Retrieves a list of inventory items, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  projectId: string, Project ID for order documents. (required)
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  inPlan: boolean, Select only inventory items that are in plan.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  type: string, Select only inventory items with this type.
+    Allowed values
+      PLANNING_PLACEMENT_TYPE_CREDIT - 
+      PLANNING_PLACEMENT_TYPE_REGULAR - 
+  orderId: string, Select only inventory items that belong to specified orders. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  siteId: string, Select only inventory items that are associated with these sites. (repeated)
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only inventory items with these IDs. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Inventory item List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#inventoryItemsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#inventoryItemsListResponse".
+    "inventoryItems": [ # Inventory item collection
+      { # Represents a buy from the DoubleClick Planning inventory store.
+        "orderId": "A String", # Order ID of this inventory item.
+        "pricing": { # Pricing Information # Pricing of this inventory item.
+          "groupType": "A String", # Group type of this inventory item if it represents a placement group. Is null otherwise. There are two type of placement groups: PLANNING_PLACEMENT_GROUP_TYPE_PACKAGE is a simple group of inventory items that acts as a single pricing point for a group of tags. PLANNING_PLACEMENT_GROUP_TYPE_ROADBLOCK is a group of inventory items that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned inventory items to be marked as primary.
+          "startDate": "A String", # Start date of this inventory item.
+          "endDate": "A String", # End date of this inventory item.
+          "pricingType": "A String", # Pricing type of this inventory item.
+          "flights": [ # Flights of this inventory item. A flight (a.k.a. pricing period) represents the inventory item pricing information for a specific period of time.
+            { # Flight
+              "rateOrCost": "A String", # Rate or cost of this flight.
+              "startDate": "A String", # Inventory item flight start date.
+              "units": "A String", # Units of this flight.
+              "endDate": "A String", # Inventory item flight end date.
+            },
+          ],
+          "capCostType": "A String", # Cap cost type of this inventory item.
+        },
+        "kind": "dfareporting#inventoryItem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#inventoryItem".
+        "negotiationChannelId": "A String", # Negotiation channel ID of this inventory item.
+        "subaccountId": "A String", # Subaccount ID of this inventory item.
+        "name": "A String", # Name of this inventory item. For standalone inventory items, this is the same name as that of its only ad slot. For group inventory items, this can differ from the name of any of its ad slots.
+        "estimatedClickThroughRate": "A String", # Estimated click-through rate of this inventory item.
+        "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this inventory item.
+          "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+        },
+        "estimatedConversionRate": "A String", # Estimated conversion rate of this inventory item.
+        "inPlan": True or False, # Whether this inventory item is in plan.
+        "id": "A String", # ID of this inventory item.
+        "advertiserId": "A String", # Advertiser ID of this inventory item.
+        "siteId": "A String", # ID of the site this inventory item is associated with.
+        "adSlots": [ # Ad slots of this inventory item. If this inventory item represents a standalone placement, there will be exactly one ad slot. If this inventory item represents a placement group, there will be more than one ad slot, each representing one child placement in that placement group.
+          { # Ad Slot
+            "comment": "A String", # Comment for this ad slot.
+            "linkedPlacementId": "A String", # ID of the placement from an external platform that is linked to this ad slot.
+            "name": "A String", # Name of this ad slot.
+            "primary": True or False, # Primary ad slot of a roadblock inventory item.
+            "height": "A String", # Height of this ad slot.
+            "width": "A String", # Width of this ad slot.
+            "paymentSourceType": "A String", # Payment source type of this ad slot.
+            "compatibility": "A String", # Ad slot compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop, mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard.
+          },
+        ],
+        "projectId": "A String", # Project ID of this inventory item.
+        "rfpId": "A String", # RFP ID of this inventory item.
+        "type": "A String", # Type of inventory item.
+        "contentCategoryId": "A String", # Content category ID of this inventory item.
+        "placementStrategyId": "A String", # Placement strategy ID of this inventory item.
+        "accountId": "A String", # Account ID of this inventory item.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.landingPages.html b/docs/dyn/dfareporting_v2_5.landingPages.html
new file mode 100644
index 0000000..8bc9541
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.landingPages.html
@@ -0,0 +1,247 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.landingPages.html">landingPages</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, campaignId, id)</a></code></p>
+<p class="firstline">Deletes an existing campaign landing page.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, campaignId, id)</a></code></p>
+<p class="firstline">Gets one campaign landing page by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, campaignId, body)</a></code></p>
+<p class="firstline">Inserts a new landing page for the specified campaign.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, campaignId)</a></code></p>
+<p class="firstline">Retrieves the list of landing pages for the specified campaign.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, campaignId, id, body)</a></code></p>
+<p class="firstline">Updates an existing campaign landing page. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, campaignId, body)</a></code></p>
+<p class="firstline">Updates an existing campaign landing page.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, campaignId, id)</code>
+  <pre>Deletes an existing campaign landing page.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Landing page campaign ID. (required)
+  id: string, Landing page ID. (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, campaignId, id)</code>
+  <pre>Gets one campaign landing page by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Landing page campaign ID. (required)
+  id: string, Landing page ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains information about where a user's browser is taken after the user clicks an ad.
+      "default": True or False, # Whether or not this landing page will be assigned to any ads or creatives that do not have a landing page assigned explicitly. Only one default landing page is allowed per campaign.
+      "url": "A String", # URL of this landing page. This is a required field.
+      "kind": "dfareporting#landingPage", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#landingPage".
+      "id": "A String", # ID of this landing page. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this landing page. This is a required field. It must be less than 256 characters long, and must be unique among landing pages of the same campaign.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, campaignId, body)</code>
+  <pre>Inserts a new landing page for the specified campaign.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Landing page campaign ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains information about where a user's browser is taken after the user clicks an ad.
+    "default": True or False, # Whether or not this landing page will be assigned to any ads or creatives that do not have a landing page assigned explicitly. Only one default landing page is allowed per campaign.
+    "url": "A String", # URL of this landing page. This is a required field.
+    "kind": "dfareporting#landingPage", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#landingPage".
+    "id": "A String", # ID of this landing page. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this landing page. This is a required field. It must be less than 256 characters long, and must be unique among landing pages of the same campaign.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains information about where a user's browser is taken after the user clicks an ad.
+      "default": True or False, # Whether or not this landing page will be assigned to any ads or creatives that do not have a landing page assigned explicitly. Only one default landing page is allowed per campaign.
+      "url": "A String", # URL of this landing page. This is a required field.
+      "kind": "dfareporting#landingPage", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#landingPage".
+      "id": "A String", # ID of this landing page. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this landing page. This is a required field. It must be less than 256 characters long, and must be unique among landing pages of the same campaign.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, campaignId)</code>
+  <pre>Retrieves the list of landing pages for the specified campaign.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Landing page campaign ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Landing Page List Response
+    "kind": "dfareporting#landingPagesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#landingPagesListResponse".
+    "landingPages": [ # Landing page collection
+      { # Contains information about where a user's browser is taken after the user clicks an ad.
+          "default": True or False, # Whether or not this landing page will be assigned to any ads or creatives that do not have a landing page assigned explicitly. Only one default landing page is allowed per campaign.
+          "url": "A String", # URL of this landing page. This is a required field.
+          "kind": "dfareporting#landingPage", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#landingPage".
+          "id": "A String", # ID of this landing page. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this landing page. This is a required field. It must be less than 256 characters long, and must be unique among landing pages of the same campaign.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, campaignId, id, body)</code>
+  <pre>Updates an existing campaign landing page. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Landing page campaign ID. (required)
+  id: string, Landing page ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains information about where a user's browser is taken after the user clicks an ad.
+    "default": True or False, # Whether or not this landing page will be assigned to any ads or creatives that do not have a landing page assigned explicitly. Only one default landing page is allowed per campaign.
+    "url": "A String", # URL of this landing page. This is a required field.
+    "kind": "dfareporting#landingPage", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#landingPage".
+    "id": "A String", # ID of this landing page. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this landing page. This is a required field. It must be less than 256 characters long, and must be unique among landing pages of the same campaign.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains information about where a user's browser is taken after the user clicks an ad.
+      "default": True or False, # Whether or not this landing page will be assigned to any ads or creatives that do not have a landing page assigned explicitly. Only one default landing page is allowed per campaign.
+      "url": "A String", # URL of this landing page. This is a required field.
+      "kind": "dfareporting#landingPage", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#landingPage".
+      "id": "A String", # ID of this landing page. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this landing page. This is a required field. It must be less than 256 characters long, and must be unique among landing pages of the same campaign.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, campaignId, body)</code>
+  <pre>Updates an existing campaign landing page.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Landing page campaign ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains information about where a user's browser is taken after the user clicks an ad.
+    "default": True or False, # Whether or not this landing page will be assigned to any ads or creatives that do not have a landing page assigned explicitly. Only one default landing page is allowed per campaign.
+    "url": "A String", # URL of this landing page. This is a required field.
+    "kind": "dfareporting#landingPage", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#landingPage".
+    "id": "A String", # ID of this landing page. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this landing page. This is a required field. It must be less than 256 characters long, and must be unique among landing pages of the same campaign.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains information about where a user's browser is taken after the user clicks an ad.
+      "default": True or False, # Whether or not this landing page will be assigned to any ads or creatives that do not have a landing page assigned explicitly. Only one default landing page is allowed per campaign.
+      "url": "A String", # URL of this landing page. This is a required field.
+      "kind": "dfareporting#landingPage", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#landingPage".
+      "id": "A String", # ID of this landing page. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this landing page. This is a required field. It must be less than 256 characters long, and must be unique among landing pages of the same campaign.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.metros.html b/docs/dyn/dfareporting_v2_5.metros.html
new file mode 100644
index 0000000..6eb062d
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.metros.html
@@ -0,0 +1,107 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.metros.html">metros</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of metros.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of metros.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Metro List Response
+    "kind": "dfareporting#metrosListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metrosListResponse".
+    "metros": [ # Metro collection.
+      { # Contains information about a metro region that can be targeted by ads.
+        "kind": "dfareporting#metro", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#metro".
+        "countryDartId": "A String", # DART ID of the country to which this metro region belongs.
+        "name": "A String", # Name of this metro region.
+        "countryCode": "A String", # Country code of the country to which this metro region belongs.
+        "metroCode": "A String", # Metro code of this metro region. This is equivalent to dma_id.
+        "dmaId": "A String", # DMA ID of this metro region. This is the ID used for targeting and generating reports, and is equivalent to metro_code.
+        "dartId": "A String", # DART ID of this metro region.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.mobileCarriers.html b/docs/dyn/dfareporting_v2_5.mobileCarriers.html
new file mode 100644
index 0000000..91c4e6e
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.mobileCarriers.html
@@ -0,0 +1,128 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.mobileCarriers.html">mobileCarriers</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one mobile carrier by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of mobile carriers.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one mobile carrier by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Mobile carrier ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains information about a mobile carrier that can be targeted by ads.
+    "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+    "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+    "id": "A String", # ID of this mobile carrier.
+    "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+    "name": "A String", # Name of this mobile carrier.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of mobile carriers.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Mobile Carrier List Response
+    "kind": "dfareporting#mobileCarriersListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarriersListResponse".
+    "mobileCarriers": [ # Mobile carrier collection.
+      { # Contains information about a mobile carrier that can be targeted by ads.
+        "kind": "dfareporting#mobileCarrier", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#mobileCarrier".
+        "countryDartId": "A String", # DART ID of the country to which this mobile carrier belongs.
+        "id": "A String", # ID of this mobile carrier.
+        "countryCode": "A String", # Country code of the country to which this mobile carrier belongs.
+        "name": "A String", # Name of this mobile carrier.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.operatingSystemVersions.html b/docs/dyn/dfareporting_v2_5.operatingSystemVersions.html
new file mode 100644
index 0000000..74459b8
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.operatingSystemVersions.html
@@ -0,0 +1,142 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.operatingSystemVersions.html">operatingSystemVersions</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one operating system version by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of operating system versions.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one operating system version by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Operating system version ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains information about a particular version of an operating system that can be targeted by ads.
+    "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+    "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+    "name": "A String", # Name of this operating system version.
+    "id": "A String", # ID of this operating system version.
+    "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+      "mobile": True or False, # Whether this operating system is for mobile.
+      "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+      "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+      "name": "A String", # Name of this operating system.
+      "desktop": True or False, # Whether this operating system is for desktop.
+    },
+    "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of operating system versions.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Operating System Version List Response
+    "kind": "dfareporting#operatingSystemVersionsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersionsListResponse".
+    "operatingSystemVersions": [ # Operating system version collection.
+      { # Contains information about a particular version of an operating system that can be targeted by ads.
+        "majorVersion": "A String", # Major version (leftmost number) of this operating system version.
+        "kind": "dfareporting#operatingSystemVersion", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemVersion".
+        "name": "A String", # Name of this operating system version.
+        "id": "A String", # ID of this operating system version.
+        "operatingSystem": { # Contains information about an operating system that can be targeted by ads. # Operating system of this operating system version.
+          "mobile": True or False, # Whether this operating system is for mobile.
+          "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+          "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+          "name": "A String", # Name of this operating system.
+          "desktop": True or False, # Whether this operating system is for desktop.
+        },
+        "minorVersion": "A String", # Minor version (number after the first dot) of this operating system version.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.operatingSystems.html b/docs/dyn/dfareporting_v2_5.operatingSystems.html
new file mode 100644
index 0000000..1a88848
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.operatingSystems.html
@@ -0,0 +1,128 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.operatingSystems.html">operatingSystems</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, dartId)</a></code></p>
+<p class="firstline">Gets one operating system by DART ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of operating systems.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, dartId)</code>
+  <pre>Gets one operating system by DART ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  dartId: string, Operating system DART ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains information about an operating system that can be targeted by ads.
+    "mobile": True or False, # Whether this operating system is for mobile.
+    "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+    "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+    "name": "A String", # Name of this operating system.
+    "desktop": True or False, # Whether this operating system is for desktop.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of operating systems.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Operating System List Response
+    "kind": "dfareporting#operatingSystemsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystemsListResponse".
+    "operatingSystems": [ # Operating system collection.
+      { # Contains information about an operating system that can be targeted by ads.
+        "mobile": True or False, # Whether this operating system is for mobile.
+        "dartId": "A String", # DART ID of this operating system. This is the ID used for targeting.
+        "kind": "dfareporting#operatingSystem", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#operatingSystem".
+        "name": "A String", # Name of this operating system.
+        "desktop": True or False, # Whether this operating system is for desktop.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.orderDocuments.html b/docs/dyn/dfareporting_v2_5.orderDocuments.html
new file mode 100644
index 0000000..dbea318
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.orderDocuments.html
@@ -0,0 +1,199 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.orderDocuments.html">orderDocuments</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, projectId, id)</a></code></p>
+<p class="firstline">Gets one order document by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, projectId, pageToken=None, sortOrder=None, orderId=None, maxResults=None, siteId=None, approved=None, searchString=None, sortField=None, ids=None)</a></code></p>
+<p class="firstline">Retrieves a list of order documents, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, projectId, id)</code>
+  <pre>Gets one order document by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  projectId: string, Project ID for order documents. (required)
+  id: string, Order document ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DoubleClick Planning order document.
+    "orderId": "A String", # ID of the order from which this order document is created.
+    "approvedByUserProfileIds": [ # IDs of users who have approved this order document.
+      "A String",
+    ],
+    "kind": "dfareporting#orderDocument", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#orderDocument".
+    "subaccountId": "A String", # Subaccount ID of this order document.
+    "effectiveDate": "A String", # Effective date of this order document.
+    "lastSentTime": "A String", # Timestamp of the last email sent with this order document.
+    "lastSentRecipients": [ # List of email addresses that received the last sent document.
+      "A String",
+    ],
+    "title": "A String", # Title of this order document.
+    "amendedOrderDocumentId": "A String", # The amended order document ID of this order document. An order document can be created by optionally amending another order document so that the change history can be preserved.
+    "signed": True or False, # Whether this order document has been signed.
+    "createdInfo": { # Modification timestamp. # Information about the creation of this order document.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "advertiserId": "A String", # Advertiser ID of this order document.
+    "projectId": "A String", # Project ID of this order document.
+    "cancelled": True or False, # Whether this order document is cancelled.
+    "type": "A String", # Type of this order document
+    "id": "A String", # ID of this order document.
+    "accountId": "A String", # Account ID of this order document.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, projectId, pageToken=None, sortOrder=None, orderId=None, maxResults=None, siteId=None, approved=None, searchString=None, sortField=None, ids=None)</code>
+  <pre>Retrieves a list of order documents, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  projectId: string, Project ID for order documents. (required)
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  orderId: string, Select only order documents for specified orders. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  siteId: string, Select only order documents that are associated with these sites. (repeated)
+  approved: boolean, Select only order documents that have been approved by at least one user.
+  searchString: string, Allows searching for order documents by name or ID. Wildcards (*) are allowed. For example, "orderdocument*2015" will return order documents with names like "orderdocument June 2015", "orderdocument April 2015", or simply "orderdocument 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "orderdocument" will match order documents with name "my orderdocument", "orderdocument 2015", or simply "orderdocument".
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only order documents with these IDs. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Order document List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#orderDocumentsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#orderDocumentsListResponse".
+    "orderDocuments": [ # Order document collection
+      { # Contains properties of a DoubleClick Planning order document.
+        "orderId": "A String", # ID of the order from which this order document is created.
+        "approvedByUserProfileIds": [ # IDs of users who have approved this order document.
+          "A String",
+        ],
+        "kind": "dfareporting#orderDocument", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#orderDocument".
+        "subaccountId": "A String", # Subaccount ID of this order document.
+        "effectiveDate": "A String", # Effective date of this order document.
+        "lastSentTime": "A String", # Timestamp of the last email sent with this order document.
+        "lastSentRecipients": [ # List of email addresses that received the last sent document.
+          "A String",
+        ],
+        "title": "A String", # Title of this order document.
+        "amendedOrderDocumentId": "A String", # The amended order document ID of this order document. An order document can be created by optionally amending another order document so that the change history can be preserved.
+        "signed": True or False, # Whether this order document has been signed.
+        "createdInfo": { # Modification timestamp. # Information about the creation of this order document.
+          "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+        },
+        "advertiserId": "A String", # Advertiser ID of this order document.
+        "projectId": "A String", # Project ID of this order document.
+        "cancelled": True or False, # Whether this order document is cancelled.
+        "type": "A String", # Type of this order document
+        "id": "A String", # ID of this order document.
+        "accountId": "A String", # Account ID of this order document.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.orders.html b/docs/dyn/dfareporting_v2_5.orders.html
new file mode 100644
index 0000000..efcedd7
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.orders.html
@@ -0,0 +1,223 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.orders.html">orders</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, projectId, id)</a></code></p>
+<p class="firstline">Gets one order by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, projectId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None, siteId=None)</a></code></p>
+<p class="firstline">Retrieves a list of orders, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, projectId, id)</code>
+  <pre>Gets one order by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  projectId: string, Project ID for orders. (required)
+  id: string, Order ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Describes properties of a DoubleClick Planning order.
+    "termsAndConditions": "A String", # Terms and conditions of this order.
+    "kind": "dfareporting#order", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#order".
+    "sellerOrganizationName": "A String", # Name of the seller organization.
+    "subaccountId": "A String", # Subaccount ID of this order.
+    "name": "A String", # Name of this order.
+    "buyerInvoiceId": "A String", # Buyer invoice ID associated with this order.
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this order.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "notes": "A String", # Notes of this order.
+    "contacts": [ # Contacts for this order.
+      { # Contact of an order.
+        "signatureUserProfileId": "A String", # ID of the user profile containing the signature that will be embedded into order documents.
+        "contactTitle": "A String", # Title of this contact.
+        "contactInfo": "A String", # Free-form information about this contact. It could be any information related to this contact in addition to type, title, name, and signature user profile ID.
+        "contactName": "A String", # Name of this contact.
+        "contactType": "A String", # Type of this contact.
+      },
+    ],
+    "buyerOrganizationName": "A String", # Name of the buyer organization.
+    "comments": "A String", # Comments in this order.
+    "advertiserId": "A String", # Advertiser ID of this order.
+    "approverUserProfileIds": [ # IDs for users that have to approve documents created for this order.
+      "A String",
+    ],
+    "siteId": [ # Site IDs this order is associated with.
+      "A String",
+    ],
+    "sellerOrderId": "A String", # Seller order ID associated with this order.
+    "projectId": "A String", # Project ID of this order.
+    "siteNames": [ # Free-form site names this order is associated with.
+      "A String",
+    ],
+    "planningTermId": "A String", # ID of the terms and conditions template used in this order.
+    "id": "A String", # ID of this order. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this order.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, projectId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None, siteId=None)</code>
+  <pre>Retrieves a list of orders, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  projectId: string, Project ID for orders. (required)
+  searchString: string, Allows searching for orders by name or ID. Wildcards (*) are allowed. For example, "order*2015" will return orders with names like "order June 2015", "order April 2015", or simply "order 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "order" will match orders with name "my order", "order 2015", or simply "order".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only orders with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  siteId: string, Select only orders that are associated with these site IDs. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Order List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#ordersListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#ordersListResponse".
+    "orders": [ # Order collection.
+      { # Describes properties of a DoubleClick Planning order.
+        "termsAndConditions": "A String", # Terms and conditions of this order.
+        "kind": "dfareporting#order", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#order".
+        "sellerOrganizationName": "A String", # Name of the seller organization.
+        "subaccountId": "A String", # Subaccount ID of this order.
+        "name": "A String", # Name of this order.
+        "buyerInvoiceId": "A String", # Buyer invoice ID associated with this order.
+        "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this order.
+          "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+        },
+        "notes": "A String", # Notes of this order.
+        "contacts": [ # Contacts for this order.
+          { # Contact of an order.
+            "signatureUserProfileId": "A String", # ID of the user profile containing the signature that will be embedded into order documents.
+            "contactTitle": "A String", # Title of this contact.
+            "contactInfo": "A String", # Free-form information about this contact. It could be any information related to this contact in addition to type, title, name, and signature user profile ID.
+            "contactName": "A String", # Name of this contact.
+            "contactType": "A String", # Type of this contact.
+          },
+        ],
+        "buyerOrganizationName": "A String", # Name of the buyer organization.
+        "comments": "A String", # Comments in this order.
+        "advertiserId": "A String", # Advertiser ID of this order.
+        "approverUserProfileIds": [ # IDs for users that have to approve documents created for this order.
+          "A String",
+        ],
+        "siteId": [ # Site IDs this order is associated with.
+          "A String",
+        ],
+        "sellerOrderId": "A String", # Seller order ID associated with this order.
+        "projectId": "A String", # Project ID of this order.
+        "siteNames": [ # Free-form site names this order is associated with.
+          "A String",
+        ],
+        "planningTermId": "A String", # ID of the terms and conditions template used in this order.
+        "id": "A String", # ID of this order. This is a read-only, auto-generated field.
+        "accountId": "A String", # Account ID of this order.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.placementGroups.html b/docs/dyn/dfareporting_v2_5.placementGroups.html
new file mode 100644
index 0000000..4f98066
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.placementGroups.html
@@ -0,0 +1,976 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.placementGroups.html">placementGroups</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one placement group by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new placement group.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, siteIds=None, placementGroupType=None, pricingTypes=None, campaignIds=None, advertiserIds=None, pageToken=None, maxStartDate=None, sortOrder=None, maxEndDate=None, placementStrategyIds=None, contentCategoryIds=None, archived=None, maxResults=None, minStartDate=None, searchString=None, minEndDate=None, directorySiteIds=None, ids=None, sortField=None)</a></code></p>
+<p class="firstline">Retrieves a list of placement groups, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing placement group. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing placement group.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one placement group by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Placement group ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a package or roadblock.
+      "comment": "A String", # Comments for this placement group.
+      "primaryPlacementId": "A String", # ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.
+      "campaignId": "A String", # Campaign ID of this placement group. This field is required on insertion.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserId": "A String", # Advertiser ID of this placement group. This is a required field on insertion.
+      "directorySiteId": "A String", # Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+      "placementGroupType": "A String", # Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this placement group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this placement group. This is a read-only field that can be left blank.
+      "archived": True or False, # Whether this placement group is archived.
+      "childPlacementIds": [ # IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.
+        "A String",
+      ],
+      "contentCategoryId": "A String", # ID of the content category assigned to this placement group.
+      "externalId": "A String", # External ID for this placement.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "primaryPlacementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the primary placement. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "createInfo": { # Modification timestamp. # Information about the creation of this placement group. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "siteId": "A String", # Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+      "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement group.
+      "kind": "dfareporting#placementGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementGroup".
+      "subaccountId": "A String", # Subaccount ID of this placement group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this placement group. This is a required field and must be less than 256 characters long.
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement group. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement group. This field is required on insertion.
+        "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+        "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+        "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+        "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+        "capCostOption": "A String", # Placement cap cost option.
+        "pricingPeriods": [ # Pricing periods for this placement.
+          { # Pricing Period
+            "units": "A String", # Units of this pricing period.
+            "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+            "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+            "pricingComment": "A String", # Comments for this pricing period.
+          },
+        ],
+        "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+        "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+      },
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new placement group.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a package or roadblock.
+    "comment": "A String", # Comments for this placement group.
+    "primaryPlacementId": "A String", # ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.
+    "campaignId": "A String", # Campaign ID of this placement group. This field is required on insertion.
+    "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserId": "A String", # Advertiser ID of this placement group. This is a required field on insertion.
+    "directorySiteId": "A String", # Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+    "placementGroupType": "A String", # Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this placement group. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this placement group. This is a read-only field that can be left blank.
+    "archived": True or False, # Whether this placement group is archived.
+    "childPlacementIds": [ # IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.
+      "A String",
+    ],
+    "contentCategoryId": "A String", # ID of the content category assigned to this placement group.
+    "externalId": "A String", # External ID for this placement.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement group. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "primaryPlacementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the primary placement. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "createInfo": { # Modification timestamp. # Information about the creation of this placement group. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "siteId": "A String", # Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+    "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement group.
+    "kind": "dfareporting#placementGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementGroup".
+    "subaccountId": "A String", # Subaccount ID of this placement group. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this placement group. This is a required field and must be less than 256 characters long.
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement group. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement group. This field is required on insertion.
+      "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+      "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+      "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+      "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+      "capCostOption": "A String", # Placement cap cost option.
+      "pricingPeriods": [ # Pricing periods for this placement.
+        { # Pricing Period
+          "units": "A String", # Units of this pricing period.
+          "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+          "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+          "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+          "pricingComment": "A String", # Comments for this pricing period.
+        },
+      ],
+      "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+      "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+      "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+    },
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a package or roadblock.
+      "comment": "A String", # Comments for this placement group.
+      "primaryPlacementId": "A String", # ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.
+      "campaignId": "A String", # Campaign ID of this placement group. This field is required on insertion.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserId": "A String", # Advertiser ID of this placement group. This is a required field on insertion.
+      "directorySiteId": "A String", # Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+      "placementGroupType": "A String", # Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this placement group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this placement group. This is a read-only field that can be left blank.
+      "archived": True or False, # Whether this placement group is archived.
+      "childPlacementIds": [ # IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.
+        "A String",
+      ],
+      "contentCategoryId": "A String", # ID of the content category assigned to this placement group.
+      "externalId": "A String", # External ID for this placement.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "primaryPlacementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the primary placement. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "createInfo": { # Modification timestamp. # Information about the creation of this placement group. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "siteId": "A String", # Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+      "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement group.
+      "kind": "dfareporting#placementGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementGroup".
+      "subaccountId": "A String", # Subaccount ID of this placement group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this placement group. This is a required field and must be less than 256 characters long.
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement group. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement group. This field is required on insertion.
+        "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+        "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+        "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+        "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+        "capCostOption": "A String", # Placement cap cost option.
+        "pricingPeriods": [ # Pricing periods for this placement.
+          { # Pricing Period
+            "units": "A String", # Units of this pricing period.
+            "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+            "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+            "pricingComment": "A String", # Comments for this pricing period.
+          },
+        ],
+        "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+        "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+      },
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, siteIds=None, placementGroupType=None, pricingTypes=None, campaignIds=None, advertiserIds=None, pageToken=None, maxStartDate=None, sortOrder=None, maxEndDate=None, placementStrategyIds=None, contentCategoryIds=None, archived=None, maxResults=None, minStartDate=None, searchString=None, minEndDate=None, directorySiteIds=None, ids=None, sortField=None)</code>
+  <pre>Retrieves a list of placement groups, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  siteIds: string, Select only placement groups that are associated with these sites. (repeated)
+  placementGroupType: string, Select only placement groups belonging with this group type. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting.
+    Allowed values
+      PLACEMENT_PACKAGE - 
+      PLACEMENT_ROADBLOCK - 
+  pricingTypes: string, Select only placement groups with these pricing types. (repeated)
+    Allowed values
+      PRICING_TYPE_CPA - 
+      PRICING_TYPE_CPC - 
+      PRICING_TYPE_CPM - 
+      PRICING_TYPE_FLAT_RATE_CLICKS - 
+      PRICING_TYPE_FLAT_RATE_IMPRESSIONS - 
+  campaignIds: string, Select only placement groups that belong to these campaigns. (repeated)
+  advertiserIds: string, Select only placement groups that belong to these advertisers. (repeated)
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  maxStartDate: string, Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as "yyyy-MM-dd".
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  maxEndDate: string, Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as "yyyy-MM-dd".
+  placementStrategyIds: string, Select only placement groups that are associated with these placement strategies. (repeated)
+  contentCategoryIds: string, Select only placement groups that are associated with these content categories. (repeated)
+  archived: boolean, Select only archived placements. Don't set this field to select both archived and non-archived placements.
+  maxResults: integer, Maximum number of results to return.
+  minStartDate: string, Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as "yyyy-MM-dd".
+  searchString: string, Allows searching for placement groups by name or ID. Wildcards (*) are allowed. For example, "placement*2015" will return placement groups with names like "placement group June 2015", "placement group May 2015", or simply "placements 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "placementgroup" will match placement groups with name "my placementgroup", "placementgroup 2015", or simply "placementgroup".
+  minEndDate: string, Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as "yyyy-MM-dd".
+  directorySiteIds: string, Select only placement groups that are associated with these directory sites. (repeated)
+  ids: string, Select only placement groups with these IDs. (repeated)
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+
+Returns:
+  An object of the form:
+
+    { # Placement Group List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#placementGroupsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementGroupsListResponse".
+    "placementGroups": [ # Placement group collection.
+      { # Contains properties of a package or roadblock.
+          "comment": "A String", # Comments for this placement group.
+          "primaryPlacementId": "A String", # ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.
+          "campaignId": "A String", # Campaign ID of this placement group. This field is required on insertion.
+          "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "advertiserId": "A String", # Advertiser ID of this placement group. This is a required field on insertion.
+          "directorySiteId": "A String", # Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+          "placementGroupType": "A String", # Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "id": "A String", # ID of this placement group. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this placement group. This is a read-only field that can be left blank.
+          "archived": True or False, # Whether this placement group is archived.
+          "childPlacementIds": [ # IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.
+            "A String",
+          ],
+          "contentCategoryId": "A String", # ID of the content category assigned to this placement group.
+          "externalId": "A String", # External ID for this placement.
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement group. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "primaryPlacementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the primary placement. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "createInfo": { # Modification timestamp. # Information about the creation of this placement group. This is a read-only field.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "siteId": "A String", # Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+          "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement group.
+          "kind": "dfareporting#placementGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementGroup".
+          "subaccountId": "A String", # Subaccount ID of this placement group. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this placement group. This is a required field and must be less than 256 characters long.
+          "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement group. This is a read-only field.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement group. This field is required on insertion.
+            "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+            "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+            "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+            "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+            "capCostOption": "A String", # Placement cap cost option.
+            "pricingPeriods": [ # Pricing periods for this placement.
+              { # Pricing Period
+                "units": "A String", # Units of this pricing period.
+                "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+                "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+                "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+                "pricingComment": "A String", # Comments for this pricing period.
+              },
+            ],
+            "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+            "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+          },
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing placement group. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Placement group ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a package or roadblock.
+    "comment": "A String", # Comments for this placement group.
+    "primaryPlacementId": "A String", # ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.
+    "campaignId": "A String", # Campaign ID of this placement group. This field is required on insertion.
+    "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserId": "A String", # Advertiser ID of this placement group. This is a required field on insertion.
+    "directorySiteId": "A String", # Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+    "placementGroupType": "A String", # Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this placement group. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this placement group. This is a read-only field that can be left blank.
+    "archived": True or False, # Whether this placement group is archived.
+    "childPlacementIds": [ # IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.
+      "A String",
+    ],
+    "contentCategoryId": "A String", # ID of the content category assigned to this placement group.
+    "externalId": "A String", # External ID for this placement.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement group. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "primaryPlacementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the primary placement. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "createInfo": { # Modification timestamp. # Information about the creation of this placement group. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "siteId": "A String", # Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+    "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement group.
+    "kind": "dfareporting#placementGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementGroup".
+    "subaccountId": "A String", # Subaccount ID of this placement group. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this placement group. This is a required field and must be less than 256 characters long.
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement group. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement group. This field is required on insertion.
+      "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+      "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+      "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+      "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+      "capCostOption": "A String", # Placement cap cost option.
+      "pricingPeriods": [ # Pricing periods for this placement.
+        { # Pricing Period
+          "units": "A String", # Units of this pricing period.
+          "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+          "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+          "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+          "pricingComment": "A String", # Comments for this pricing period.
+        },
+      ],
+      "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+      "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+      "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+    },
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a package or roadblock.
+      "comment": "A String", # Comments for this placement group.
+      "primaryPlacementId": "A String", # ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.
+      "campaignId": "A String", # Campaign ID of this placement group. This field is required on insertion.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserId": "A String", # Advertiser ID of this placement group. This is a required field on insertion.
+      "directorySiteId": "A String", # Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+      "placementGroupType": "A String", # Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this placement group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this placement group. This is a read-only field that can be left blank.
+      "archived": True or False, # Whether this placement group is archived.
+      "childPlacementIds": [ # IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.
+        "A String",
+      ],
+      "contentCategoryId": "A String", # ID of the content category assigned to this placement group.
+      "externalId": "A String", # External ID for this placement.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "primaryPlacementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the primary placement. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "createInfo": { # Modification timestamp. # Information about the creation of this placement group. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "siteId": "A String", # Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+      "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement group.
+      "kind": "dfareporting#placementGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementGroup".
+      "subaccountId": "A String", # Subaccount ID of this placement group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this placement group. This is a required field and must be less than 256 characters long.
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement group. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement group. This field is required on insertion.
+        "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+        "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+        "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+        "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+        "capCostOption": "A String", # Placement cap cost option.
+        "pricingPeriods": [ # Pricing periods for this placement.
+          { # Pricing Period
+            "units": "A String", # Units of this pricing period.
+            "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+            "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+            "pricingComment": "A String", # Comments for this pricing period.
+          },
+        ],
+        "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+        "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+      },
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing placement group.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a package or roadblock.
+    "comment": "A String", # Comments for this placement group.
+    "primaryPlacementId": "A String", # ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.
+    "campaignId": "A String", # Campaign ID of this placement group. This field is required on insertion.
+    "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserId": "A String", # Advertiser ID of this placement group. This is a required field on insertion.
+    "directorySiteId": "A String", # Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+    "placementGroupType": "A String", # Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this placement group. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this placement group. This is a read-only field that can be left blank.
+    "archived": True or False, # Whether this placement group is archived.
+    "childPlacementIds": [ # IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.
+      "A String",
+    ],
+    "contentCategoryId": "A String", # ID of the content category assigned to this placement group.
+    "externalId": "A String", # External ID for this placement.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement group. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "primaryPlacementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the primary placement. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "createInfo": { # Modification timestamp. # Information about the creation of this placement group. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "siteId": "A String", # Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+    "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement group.
+    "kind": "dfareporting#placementGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementGroup".
+    "subaccountId": "A String", # Subaccount ID of this placement group. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this placement group. This is a required field and must be less than 256 characters long.
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement group. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement group. This field is required on insertion.
+      "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+      "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+      "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+      "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+      "capCostOption": "A String", # Placement cap cost option.
+      "pricingPeriods": [ # Pricing periods for this placement.
+        { # Pricing Period
+          "units": "A String", # Units of this pricing period.
+          "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+          "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+          "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+          "pricingComment": "A String", # Comments for this pricing period.
+        },
+      ],
+      "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+      "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+      "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+    },
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a package or roadblock.
+      "comment": "A String", # Comments for this placement group.
+      "primaryPlacementId": "A String", # ID of the primary placement, used to calculate the media cost of a roadblock (placement group). Modifying this field will automatically modify the primary field on all affected roadblock child placements.
+      "campaignId": "A String", # Campaign ID of this placement group. This field is required on insertion.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserId": "A String", # Advertiser ID of this placement group. This is a required field on insertion.
+      "directorySiteId": "A String", # Directory site ID associated with this placement group. On insert, you must set either this field or the site_id field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+      "placementGroupType": "A String", # Type of this placement group. A package is a simple group of placements that acts as a single pricing point for a group of tags. A roadblock is a group of placements that not only acts as a single pricing point, but also assumes that all the tags in it will be served at the same time. A roadblock requires one of its assigned placements to be marked as primary for reporting. This field is required on insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this placement group. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this placement group. This is a read-only field that can be left blank.
+      "archived": True or False, # Whether this placement group is archived.
+      "childPlacementIds": [ # IDs of placements which are assigned to this placement group. This is a read-only, auto-generated field.
+        "A String",
+      ],
+      "contentCategoryId": "A String", # ID of the content category assigned to this placement group.
+      "externalId": "A String", # External ID for this placement.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "primaryPlacementIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the primary placement. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "createInfo": { # Modification timestamp. # Information about the creation of this placement group. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "siteId": "A String", # Site ID associated with this placement group. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement group. This is a required field that is read-only after insertion.
+      "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement group.
+      "kind": "dfareporting#placementGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementGroup".
+      "subaccountId": "A String", # Subaccount ID of this placement group. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this placement group. This is a required field and must be less than 256 characters long.
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement group. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement group. This field is required on insertion.
+        "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+        "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+        "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+        "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+        "capCostOption": "A String", # Placement cap cost option.
+        "pricingPeriods": [ # Pricing periods for this placement.
+          { # Pricing Period
+            "units": "A String", # Units of this pricing period.
+            "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+            "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+            "pricingComment": "A String", # Comments for this pricing period.
+          },
+        ],
+        "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+        "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+      },
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.placementStrategies.html b/docs/dyn/dfareporting_v2_5.placementStrategies.html
new file mode 100644
index 0000000..81a6d54
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.placementStrategies.html
@@ -0,0 +1,263 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.placementStrategies.html">placementStrategies</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, id)</a></code></p>
+<p class="firstline">Deletes an existing placement strategy.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one placement strategy by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new placement strategy.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of placement strategies, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing placement strategy. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing placement strategy.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, id)</code>
+  <pre>Deletes an existing placement strategy.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Placement strategy ID. (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one placement strategy by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Placement strategy ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a placement strategy.
+      "kind": "dfareporting#placementStrategy", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementStrategy".
+      "id": "A String", # ID of this placement strategy. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.
+      "accountId": "A String", # Account ID of this placement strategy.This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new placement strategy.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a placement strategy.
+    "kind": "dfareporting#placementStrategy", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementStrategy".
+    "id": "A String", # ID of this placement strategy. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.
+    "accountId": "A String", # Account ID of this placement strategy.This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a placement strategy.
+      "kind": "dfareporting#placementStrategy", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementStrategy".
+      "id": "A String", # ID of this placement strategy. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.
+      "accountId": "A String", # Account ID of this placement strategy.This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</code>
+  <pre>Retrieves a list of placement strategies, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "placementstrategy*2015" will return objects with names like "placementstrategy June 2015", "placementstrategy April 2015", or simply "placementstrategy 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "placementstrategy" will match objects with name "my placementstrategy", "placementstrategy 2015", or simply "placementstrategy".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only placement strategies with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Placement Strategy List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#placementStrategiesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementStrategiesListResponse".
+    "placementStrategies": [ # Placement strategy collection.
+      { # Contains properties of a placement strategy.
+          "kind": "dfareporting#placementStrategy", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementStrategy".
+          "id": "A String", # ID of this placement strategy. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.
+          "accountId": "A String", # Account ID of this placement strategy.This is a read-only field that can be left blank.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing placement strategy. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Placement strategy ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a placement strategy.
+    "kind": "dfareporting#placementStrategy", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementStrategy".
+    "id": "A String", # ID of this placement strategy. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.
+    "accountId": "A String", # Account ID of this placement strategy.This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a placement strategy.
+      "kind": "dfareporting#placementStrategy", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementStrategy".
+      "id": "A String", # ID of this placement strategy. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.
+      "accountId": "A String", # Account ID of this placement strategy.This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing placement strategy.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a placement strategy.
+    "kind": "dfareporting#placementStrategy", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementStrategy".
+    "id": "A String", # ID of this placement strategy. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.
+    "accountId": "A String", # Account ID of this placement strategy.This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a placement strategy.
+      "kind": "dfareporting#placementStrategy", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementStrategy".
+      "id": "A String", # ID of this placement strategy. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this placement strategy. This is a required field. It must be less than 256 characters long and unique among placement strategies of the same account.
+      "accountId": "A String", # Account ID of this placement strategy.This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.placements.html b/docs/dyn/dfareporting_v2_5.placements.html
new file mode 100644
index 0000000..4124035
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.placements.html
@@ -0,0 +1,1359 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.placements.html">placements</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#generatetags">generatetags(profileId, campaignId=None, tagFormats=None, placementIds=None)</a></code></p>
+<p class="firstline">Generates tags for a placement.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one placement by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new placement.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, siteIds=None, paymentSource=None, pricingTypes=None, campaignIds=None, advertiserIds=None, sizeIds=None, pageToken=None, maxStartDate=None, sortOrder=None, maxEndDate=None, placementStrategyIds=None, contentCategoryIds=None, archived=None, maxResults=None, minStartDate=None, compatibilities=None, searchString=None, minEndDate=None, directorySiteIds=None, sortField=None, ids=None, groupIds=None)</a></code></p>
+<p class="firstline">Retrieves a list of placements, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing placement. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing placement.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="generatetags">generatetags(profileId, campaignId=None, tagFormats=None, placementIds=None)</code>
+  <pre>Generates tags for a placement.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  campaignId: string, Generate placements belonging to this campaign. This is a required field.
+  tagFormats: string, Tag formats to generate for these placements. (repeated)
+    Allowed values
+      PLACEMENT_TAG_CLICK_COMMANDS - 
+      PLACEMENT_TAG_IFRAME_ILAYER - 
+      PLACEMENT_TAG_IFRAME_JAVASCRIPT - 
+      PLACEMENT_TAG_IFRAME_JAVASCRIPT_LEGACY - 
+      PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH - 
+      PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH_VAST_3 - 
+      PLACEMENT_TAG_INTERNAL_REDIRECT - 
+      PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT - 
+      PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT_LEGACY - 
+      PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT - 
+      PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT - 
+      PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT_LEGACY - 
+      PLACEMENT_TAG_JAVASCRIPT - 
+      PLACEMENT_TAG_JAVASCRIPT_LEGACY - 
+      PLACEMENT_TAG_STANDARD - 
+      PLACEMENT_TAG_TRACKING - 
+      PLACEMENT_TAG_TRACKING_IFRAME - 
+      PLACEMENT_TAG_TRACKING_JAVASCRIPT - 
+  placementIds: string, Generate tags for these placements. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Placement GenerateTags Response
+    "kind": "dfareporting#placementsGenerateTagsResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementsGenerateTagsResponse".
+    "placementTags": [ # Set of generated tags for the specified placements.
+      { # Placement Tag
+        "tagDatas": [ # Tags generated for this placement.
+          { # Placement Tag Data
+            "clickTag": "A String", # Tag string to record a click.
+            "impressionTag": "A String", # Tag string for serving an ad.
+            "creativeId": "A String", # Creative associated with this placement tag.
+            "adId": "A String", # Ad associated with this placement tag.
+            "format": "A String", # TagData tag format of this tag.
+          },
+        ],
+        "placementId": "A String", # Placement ID
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one placement by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Placement ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a placement.
+      "comment": "A String", # Comments for this placement.
+      "campaignId": "A String", # Campaign ID of this placement. This field is a required field on insertion.
+      "paymentSource": "A String", # Payment source for this placement. This is a required field that is read-only after insertion.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserId": "A String", # Advertiser ID of this placement. This field can be left blank.
+      "keyName": "A String", # Key name of this placement. This is a read-only, auto-generated field.
+      "directorySiteId": "A String", # Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this placement. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this placement. This field can be left blank.
+      "archived": True or False, # Whether this placement is archived.
+      "publisherUpdateInfo": { # Modification timestamp. # Information about the last publisher update. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "tagFormats": [ # Tag formats to generate for this placement. This field is required on insertion.
+          # Acceptable values are:
+          # - "PLACEMENT_TAG_STANDARD"
+          # - "PLACEMENT_TAG_IFRAME_JAVASCRIPT"
+          # - "PLACEMENT_TAG_IFRAME_ILAYER"
+          # - "PLACEMENT_TAG_INTERNAL_REDIRECT"
+          # - "PLACEMENT_TAG_JAVASCRIPT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT"
+          # - "PLACEMENT_TAG_CLICK_COMMANDS"
+          # - "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH"
+          # - "PLACEMENT_TAG_TRACKING"
+          # - "PLACEMENT_TAG_TRACKING_IFRAME"
+          # - "PLACEMENT_TAG_TRACKING_JAVASCRIPT"
+        "A String",
+      ],
+      "paymentApproved": True or False, # Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.
+      "tagSetting": { # Tag Settings # Tag settings for this placement.
+        "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+        "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+        "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+        "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+      },
+      "contentCategoryId": "A String", # ID of the content category assigned to this placement.
+      "externalId": "A String", # External ID for this placement.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "sslRequired": True or False, # Whether creatives assigned to this placement must be SSL-compliant.
+      "status": "A String", # Third-party placement status.
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "primary": True or False, # Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.
+      "placementGroupId": "A String", # ID of this placement's group, if applicable.
+      "createInfo": { # Modification timestamp. # Information about the creation of this placement. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "siteId": "A String", # Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+      "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "compatibility": "A String", # Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.
+      "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement.
+      "placementGroupIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "kind": "dfareporting#placement", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placement".
+      "subaccountId": "A String", # Subaccount ID of this placement. This field can be left blank.
+      "name": "A String", # Name of this placement.This is a required field and must be less than 256 characters long.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this placement.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.
+        "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+        "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+        "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+        "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+        "capCostOption": "A String", # Placement cap cost option.
+        "pricingPeriods": [ # Pricing periods for this placement.
+          { # Pricing Period
+            "units": "A String", # Units of this pricing period.
+            "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+            "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+            "pricingComment": "A String", # Comments for this pricing period.
+          },
+        ],
+        "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+        "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+      },
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new placement.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a placement.
+    "comment": "A String", # Comments for this placement.
+    "campaignId": "A String", # Campaign ID of this placement. This field is a required field on insertion.
+    "paymentSource": "A String", # Payment source for this placement. This is a required field that is read-only after insertion.
+    "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserId": "A String", # Advertiser ID of this placement. This field can be left blank.
+    "keyName": "A String", # Key name of this placement. This is a read-only, auto-generated field.
+    "directorySiteId": "A String", # Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this placement. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this placement. This field can be left blank.
+    "archived": True or False, # Whether this placement is archived.
+    "publisherUpdateInfo": { # Modification timestamp. # Information about the last publisher update. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "tagFormats": [ # Tag formats to generate for this placement. This field is required on insertion.
+        # Acceptable values are:
+        # - "PLACEMENT_TAG_STANDARD"
+        # - "PLACEMENT_TAG_IFRAME_JAVASCRIPT"
+        # - "PLACEMENT_TAG_IFRAME_ILAYER"
+        # - "PLACEMENT_TAG_INTERNAL_REDIRECT"
+        # - "PLACEMENT_TAG_JAVASCRIPT"
+        # - "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT"
+        # - "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT"
+        # - "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT"
+        # - "PLACEMENT_TAG_CLICK_COMMANDS"
+        # - "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH"
+        # - "PLACEMENT_TAG_TRACKING"
+        # - "PLACEMENT_TAG_TRACKING_IFRAME"
+        # - "PLACEMENT_TAG_TRACKING_JAVASCRIPT"
+      "A String",
+    ],
+    "paymentApproved": True or False, # Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.
+    "tagSetting": { # Tag Settings # Tag settings for this placement.
+      "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+      "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+      "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+      "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+    },
+    "contentCategoryId": "A String", # ID of the content category assigned to this placement.
+    "externalId": "A String", # External ID for this placement.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.
+      "width": 42, # Width of this size.
+      "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+      "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+      "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+      "height": 42, # Height of this size.
+    },
+    "sslRequired": True or False, # Whether creatives assigned to this placement must be SSL-compliant.
+    "status": "A String", # Third-party placement status.
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "primary": True or False, # Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.
+    "placementGroupId": "A String", # ID of this placement's group, if applicable.
+    "createInfo": { # Modification timestamp. # Information about the creation of this placement. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "siteId": "A String", # Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+    "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "compatibility": "A String", # Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.
+    "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement.
+    "placementGroupIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement group. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "kind": "dfareporting#placement", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placement".
+    "subaccountId": "A String", # Subaccount ID of this placement. This field can be left blank.
+    "name": "A String", # Name of this placement.This is a required field and must be less than 256 characters long.
+    "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this placement.
+      "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+    },
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.
+      "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+      "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+      "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+      "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+      "capCostOption": "A String", # Placement cap cost option.
+      "pricingPeriods": [ # Pricing periods for this placement.
+        { # Pricing Period
+          "units": "A String", # Units of this pricing period.
+          "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+          "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+          "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+          "pricingComment": "A String", # Comments for this pricing period.
+        },
+      ],
+      "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+      "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+      "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+    },
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a placement.
+      "comment": "A String", # Comments for this placement.
+      "campaignId": "A String", # Campaign ID of this placement. This field is a required field on insertion.
+      "paymentSource": "A String", # Payment source for this placement. This is a required field that is read-only after insertion.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserId": "A String", # Advertiser ID of this placement. This field can be left blank.
+      "keyName": "A String", # Key name of this placement. This is a read-only, auto-generated field.
+      "directorySiteId": "A String", # Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this placement. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this placement. This field can be left blank.
+      "archived": True or False, # Whether this placement is archived.
+      "publisherUpdateInfo": { # Modification timestamp. # Information about the last publisher update. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "tagFormats": [ # Tag formats to generate for this placement. This field is required on insertion.
+          # Acceptable values are:
+          # - "PLACEMENT_TAG_STANDARD"
+          # - "PLACEMENT_TAG_IFRAME_JAVASCRIPT"
+          # - "PLACEMENT_TAG_IFRAME_ILAYER"
+          # - "PLACEMENT_TAG_INTERNAL_REDIRECT"
+          # - "PLACEMENT_TAG_JAVASCRIPT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT"
+          # - "PLACEMENT_TAG_CLICK_COMMANDS"
+          # - "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH"
+          # - "PLACEMENT_TAG_TRACKING"
+          # - "PLACEMENT_TAG_TRACKING_IFRAME"
+          # - "PLACEMENT_TAG_TRACKING_JAVASCRIPT"
+        "A String",
+      ],
+      "paymentApproved": True or False, # Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.
+      "tagSetting": { # Tag Settings # Tag settings for this placement.
+        "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+        "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+        "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+        "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+      },
+      "contentCategoryId": "A String", # ID of the content category assigned to this placement.
+      "externalId": "A String", # External ID for this placement.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "sslRequired": True or False, # Whether creatives assigned to this placement must be SSL-compliant.
+      "status": "A String", # Third-party placement status.
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "primary": True or False, # Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.
+      "placementGroupId": "A String", # ID of this placement's group, if applicable.
+      "createInfo": { # Modification timestamp. # Information about the creation of this placement. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "siteId": "A String", # Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+      "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "compatibility": "A String", # Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.
+      "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement.
+      "placementGroupIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "kind": "dfareporting#placement", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placement".
+      "subaccountId": "A String", # Subaccount ID of this placement. This field can be left blank.
+      "name": "A String", # Name of this placement.This is a required field and must be less than 256 characters long.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this placement.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.
+        "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+        "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+        "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+        "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+        "capCostOption": "A String", # Placement cap cost option.
+        "pricingPeriods": [ # Pricing periods for this placement.
+          { # Pricing Period
+            "units": "A String", # Units of this pricing period.
+            "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+            "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+            "pricingComment": "A String", # Comments for this pricing period.
+          },
+        ],
+        "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+        "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+      },
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, siteIds=None, paymentSource=None, pricingTypes=None, campaignIds=None, advertiserIds=None, sizeIds=None, pageToken=None, maxStartDate=None, sortOrder=None, maxEndDate=None, placementStrategyIds=None, contentCategoryIds=None, archived=None, maxResults=None, minStartDate=None, compatibilities=None, searchString=None, minEndDate=None, directorySiteIds=None, sortField=None, ids=None, groupIds=None)</code>
+  <pre>Retrieves a list of placements, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  siteIds: string, Select only placements that are associated with these sites. (repeated)
+  paymentSource: string, Select only placements with this payment source.
+    Allowed values
+      PLACEMENT_AGENCY_PAID - 
+      PLACEMENT_PUBLISHER_PAID - 
+  pricingTypes: string, Select only placements with these pricing types. (repeated)
+    Allowed values
+      PRICING_TYPE_CPA - 
+      PRICING_TYPE_CPC - 
+      PRICING_TYPE_CPM - 
+      PRICING_TYPE_FLAT_RATE_CLICKS - 
+      PRICING_TYPE_FLAT_RATE_IMPRESSIONS - 
+  campaignIds: string, Select only placements that belong to these campaigns. (repeated)
+  advertiserIds: string, Select only placements that belong to these advertisers. (repeated)
+  sizeIds: string, Select only placements that are associated with these sizes. (repeated)
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  maxStartDate: string, Select only placements or placement groups whose start date is on or before the specified maxStartDate. The date should be formatted as "yyyy-MM-dd".
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  maxEndDate: string, Select only placements or placement groups whose end date is on or before the specified maxEndDate. The date should be formatted as "yyyy-MM-dd".
+  placementStrategyIds: string, Select only placements that are associated with these placement strategies. (repeated)
+  contentCategoryIds: string, Select only placements that are associated with these content categories. (repeated)
+  archived: boolean, Select only archived placements. Don't set this field to select both archived and non-archived placements.
+  maxResults: integer, Maximum number of results to return.
+  minStartDate: string, Select only placements or placement groups whose start date is on or after the specified minStartDate. The date should be formatted as "yyyy-MM-dd".
+  compatibilities: string, Select only placements that are associated with these compatibilities. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering either on desktop or on mobile devices for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are for rendering in mobile apps. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. (repeated)
+    Allowed values
+      APP - 
+      APP_INTERSTITIAL - 
+      DISPLAY - 
+      DISPLAY_INTERSTITIAL - 
+      IN_STREAM_VIDEO - 
+  searchString: string, Allows searching for placements by name or ID. Wildcards (*) are allowed. For example, "placement*2015" will return placements with names like "placement June 2015", "placement May 2015", or simply "placements 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "placement" will match placements with name "my placement", "placement 2015", or simply "placement".
+  minEndDate: string, Select only placements or placement groups whose end date is on or after the specified minEndDate. The date should be formatted as "yyyy-MM-dd".
+  directorySiteIds: string, Select only placements that are associated with these directory sites. (repeated)
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only placements with these IDs. (repeated)
+  groupIds: string, Select only placements that belong to these placement groups. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Placement List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#placementsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placementsListResponse".
+    "placements": [ # Placement collection.
+      { # Contains properties of a placement.
+          "comment": "A String", # Comments for this placement.
+          "campaignId": "A String", # Campaign ID of this placement. This field is a required field on insertion.
+          "paymentSource": "A String", # Payment source for this placement. This is a required field that is read-only after insertion.
+          "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "advertiserId": "A String", # Advertiser ID of this placement. This field can be left blank.
+          "keyName": "A String", # Key name of this placement. This is a read-only, auto-generated field.
+          "directorySiteId": "A String", # Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "id": "A String", # ID of this placement. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this placement. This field can be left blank.
+          "archived": True or False, # Whether this placement is archived.
+          "publisherUpdateInfo": { # Modification timestamp. # Information about the last publisher update. This is a read-only field.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "tagFormats": [ # Tag formats to generate for this placement. This field is required on insertion.
+              # Acceptable values are:
+              # - "PLACEMENT_TAG_STANDARD"
+              # - "PLACEMENT_TAG_IFRAME_JAVASCRIPT"
+              # - "PLACEMENT_TAG_IFRAME_ILAYER"
+              # - "PLACEMENT_TAG_INTERNAL_REDIRECT"
+              # - "PLACEMENT_TAG_JAVASCRIPT"
+              # - "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT"
+              # - "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT"
+              # - "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT"
+              # - "PLACEMENT_TAG_CLICK_COMMANDS"
+              # - "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH"
+              # - "PLACEMENT_TAG_TRACKING"
+              # - "PLACEMENT_TAG_TRACKING_IFRAME"
+              # - "PLACEMENT_TAG_TRACKING_JAVASCRIPT"
+            "A String",
+          ],
+          "paymentApproved": True or False, # Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.
+          "tagSetting": { # Tag Settings # Tag settings for this placement.
+            "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+            "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+            "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+            "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+          },
+          "contentCategoryId": "A String", # ID of the content category assigned to this placement.
+          "externalId": "A String", # External ID for this placement.
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.
+            "width": 42, # Width of this size.
+            "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+            "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+            "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+            "height": 42, # Height of this size.
+          },
+          "sslRequired": True or False, # Whether creatives assigned to this placement must be SSL-compliant.
+          "status": "A String", # Third-party placement status.
+          "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "primary": True or False, # Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.
+          "placementGroupId": "A String", # ID of this placement's group, if applicable.
+          "createInfo": { # Modification timestamp. # Information about the creation of this placement. This is a read-only field.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "siteId": "A String", # Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+          "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "compatibility": "A String", # Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.
+          "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement.
+          "placementGroupIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement group. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "kind": "dfareporting#placement", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placement".
+          "subaccountId": "A String", # Subaccount ID of this placement. This field can be left blank.
+          "name": "A String", # Name of this placement.This is a required field and must be less than 256 characters long.
+          "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this placement.
+            "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+            "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          },
+          "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement. This is a read-only field.
+            "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+          },
+          "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.
+            "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+            "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+            "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+            "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+            "capCostOption": "A String", # Placement cap cost option.
+            "pricingPeriods": [ # Pricing periods for this placement.
+              { # Pricing Period
+                "units": "A String", # Units of this pricing period.
+                "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+                "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+                "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+                "pricingComment": "A String", # Comments for this pricing period.
+              },
+            ],
+            "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+            "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+          },
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing placement. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Placement ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a placement.
+    "comment": "A String", # Comments for this placement.
+    "campaignId": "A String", # Campaign ID of this placement. This field is a required field on insertion.
+    "paymentSource": "A String", # Payment source for this placement. This is a required field that is read-only after insertion.
+    "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserId": "A String", # Advertiser ID of this placement. This field can be left blank.
+    "keyName": "A String", # Key name of this placement. This is a read-only, auto-generated field.
+    "directorySiteId": "A String", # Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this placement. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this placement. This field can be left blank.
+    "archived": True or False, # Whether this placement is archived.
+    "publisherUpdateInfo": { # Modification timestamp. # Information about the last publisher update. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "tagFormats": [ # Tag formats to generate for this placement. This field is required on insertion.
+        # Acceptable values are:
+        # - "PLACEMENT_TAG_STANDARD"
+        # - "PLACEMENT_TAG_IFRAME_JAVASCRIPT"
+        # - "PLACEMENT_TAG_IFRAME_ILAYER"
+        # - "PLACEMENT_TAG_INTERNAL_REDIRECT"
+        # - "PLACEMENT_TAG_JAVASCRIPT"
+        # - "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT"
+        # - "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT"
+        # - "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT"
+        # - "PLACEMENT_TAG_CLICK_COMMANDS"
+        # - "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH"
+        # - "PLACEMENT_TAG_TRACKING"
+        # - "PLACEMENT_TAG_TRACKING_IFRAME"
+        # - "PLACEMENT_TAG_TRACKING_JAVASCRIPT"
+      "A String",
+    ],
+    "paymentApproved": True or False, # Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.
+    "tagSetting": { # Tag Settings # Tag settings for this placement.
+      "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+      "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+      "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+      "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+    },
+    "contentCategoryId": "A String", # ID of the content category assigned to this placement.
+    "externalId": "A String", # External ID for this placement.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.
+      "width": 42, # Width of this size.
+      "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+      "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+      "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+      "height": 42, # Height of this size.
+    },
+    "sslRequired": True or False, # Whether creatives assigned to this placement must be SSL-compliant.
+    "status": "A String", # Third-party placement status.
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "primary": True or False, # Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.
+    "placementGroupId": "A String", # ID of this placement's group, if applicable.
+    "createInfo": { # Modification timestamp. # Information about the creation of this placement. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "siteId": "A String", # Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+    "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "compatibility": "A String", # Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.
+    "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement.
+    "placementGroupIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement group. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "kind": "dfareporting#placement", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placement".
+    "subaccountId": "A String", # Subaccount ID of this placement. This field can be left blank.
+    "name": "A String", # Name of this placement.This is a required field and must be less than 256 characters long.
+    "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this placement.
+      "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+    },
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.
+      "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+      "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+      "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+      "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+      "capCostOption": "A String", # Placement cap cost option.
+      "pricingPeriods": [ # Pricing periods for this placement.
+        { # Pricing Period
+          "units": "A String", # Units of this pricing period.
+          "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+          "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+          "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+          "pricingComment": "A String", # Comments for this pricing period.
+        },
+      ],
+      "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+      "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+      "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+    },
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a placement.
+      "comment": "A String", # Comments for this placement.
+      "campaignId": "A String", # Campaign ID of this placement. This field is a required field on insertion.
+      "paymentSource": "A String", # Payment source for this placement. This is a required field that is read-only after insertion.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserId": "A String", # Advertiser ID of this placement. This field can be left blank.
+      "keyName": "A String", # Key name of this placement. This is a read-only, auto-generated field.
+      "directorySiteId": "A String", # Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this placement. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this placement. This field can be left blank.
+      "archived": True or False, # Whether this placement is archived.
+      "publisherUpdateInfo": { # Modification timestamp. # Information about the last publisher update. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "tagFormats": [ # Tag formats to generate for this placement. This field is required on insertion.
+          # Acceptable values are:
+          # - "PLACEMENT_TAG_STANDARD"
+          # - "PLACEMENT_TAG_IFRAME_JAVASCRIPT"
+          # - "PLACEMENT_TAG_IFRAME_ILAYER"
+          # - "PLACEMENT_TAG_INTERNAL_REDIRECT"
+          # - "PLACEMENT_TAG_JAVASCRIPT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT"
+          # - "PLACEMENT_TAG_CLICK_COMMANDS"
+          # - "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH"
+          # - "PLACEMENT_TAG_TRACKING"
+          # - "PLACEMENT_TAG_TRACKING_IFRAME"
+          # - "PLACEMENT_TAG_TRACKING_JAVASCRIPT"
+        "A String",
+      ],
+      "paymentApproved": True or False, # Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.
+      "tagSetting": { # Tag Settings # Tag settings for this placement.
+        "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+        "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+        "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+        "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+      },
+      "contentCategoryId": "A String", # ID of the content category assigned to this placement.
+      "externalId": "A String", # External ID for this placement.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "sslRequired": True or False, # Whether creatives assigned to this placement must be SSL-compliant.
+      "status": "A String", # Third-party placement status.
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "primary": True or False, # Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.
+      "placementGroupId": "A String", # ID of this placement's group, if applicable.
+      "createInfo": { # Modification timestamp. # Information about the creation of this placement. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "siteId": "A String", # Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+      "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "compatibility": "A String", # Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.
+      "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement.
+      "placementGroupIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "kind": "dfareporting#placement", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placement".
+      "subaccountId": "A String", # Subaccount ID of this placement. This field can be left blank.
+      "name": "A String", # Name of this placement.This is a required field and must be less than 256 characters long.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this placement.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.
+        "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+        "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+        "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+        "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+        "capCostOption": "A String", # Placement cap cost option.
+        "pricingPeriods": [ # Pricing periods for this placement.
+          { # Pricing Period
+            "units": "A String", # Units of this pricing period.
+            "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+            "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+            "pricingComment": "A String", # Comments for this pricing period.
+          },
+        ],
+        "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+        "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+      },
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing placement.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a placement.
+    "comment": "A String", # Comments for this placement.
+    "campaignId": "A String", # Campaign ID of this placement. This field is a required field on insertion.
+    "paymentSource": "A String", # Payment source for this placement. This is a required field that is read-only after insertion.
+    "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "advertiserId": "A String", # Advertiser ID of this placement. This field can be left blank.
+    "keyName": "A String", # Key name of this placement. This is a read-only, auto-generated field.
+    "directorySiteId": "A String", # Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # ID of this placement. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this placement. This field can be left blank.
+    "archived": True or False, # Whether this placement is archived.
+    "publisherUpdateInfo": { # Modification timestamp. # Information about the last publisher update. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "tagFormats": [ # Tag formats to generate for this placement. This field is required on insertion.
+        # Acceptable values are:
+        # - "PLACEMENT_TAG_STANDARD"
+        # - "PLACEMENT_TAG_IFRAME_JAVASCRIPT"
+        # - "PLACEMENT_TAG_IFRAME_ILAYER"
+        # - "PLACEMENT_TAG_INTERNAL_REDIRECT"
+        # - "PLACEMENT_TAG_JAVASCRIPT"
+        # - "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT"
+        # - "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT"
+        # - "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT"
+        # - "PLACEMENT_TAG_CLICK_COMMANDS"
+        # - "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH"
+        # - "PLACEMENT_TAG_TRACKING"
+        # - "PLACEMENT_TAG_TRACKING_IFRAME"
+        # - "PLACEMENT_TAG_TRACKING_JAVASCRIPT"
+      "A String",
+    ],
+    "paymentApproved": True or False, # Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.
+    "tagSetting": { # Tag Settings # Tag settings for this placement.
+      "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+      "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+      "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+      "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+    },
+    "contentCategoryId": "A String", # ID of the content category assigned to this placement.
+    "externalId": "A String", # External ID for this placement.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.
+      "width": 42, # Width of this size.
+      "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+      "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+      "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+      "height": 42, # Height of this size.
+    },
+    "sslRequired": True or False, # Whether creatives assigned to this placement must be SSL-compliant.
+    "status": "A String", # Third-party placement status.
+    "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "primary": True or False, # Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.
+    "placementGroupId": "A String", # ID of this placement's group, if applicable.
+    "createInfo": { # Modification timestamp. # Information about the creation of this placement. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "siteId": "A String", # Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+    "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "compatibility": "A String", # Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.
+    "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement.
+    "placementGroupIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement group. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "kind": "dfareporting#placement", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placement".
+    "subaccountId": "A String", # Subaccount ID of this placement. This field can be left blank.
+    "name": "A String", # Name of this placement.This is a required field and must be less than 256 characters long.
+    "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this placement.
+      "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+    },
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement. This is a read-only field.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.
+      "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+      "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+      "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+      "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+      "capCostOption": "A String", # Placement cap cost option.
+      "pricingPeriods": [ # Pricing periods for this placement.
+        { # Pricing Period
+          "units": "A String", # Units of this pricing period.
+          "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+          "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+          "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+          "pricingComment": "A String", # Comments for this pricing period.
+        },
+      ],
+      "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+      "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+      "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+    },
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a placement.
+      "comment": "A String", # Comments for this placement.
+      "campaignId": "A String", # Campaign ID of this placement. This field is a required field on insertion.
+      "paymentSource": "A String", # Payment source for this placement. This is a required field that is read-only after insertion.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "advertiserId": "A String", # Advertiser ID of this placement. This field can be left blank.
+      "keyName": "A String", # Key name of this placement. This is a read-only, auto-generated field.
+      "directorySiteId": "A String", # Directory site ID of this placement. On insert, you must set either this field or the siteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # ID of this placement. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this placement. This field can be left blank.
+      "archived": True or False, # Whether this placement is archived.
+      "publisherUpdateInfo": { # Modification timestamp. # Information about the last publisher update. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "tagFormats": [ # Tag formats to generate for this placement. This field is required on insertion.
+          # Acceptable values are:
+          # - "PLACEMENT_TAG_STANDARD"
+          # - "PLACEMENT_TAG_IFRAME_JAVASCRIPT"
+          # - "PLACEMENT_TAG_IFRAME_ILAYER"
+          # - "PLACEMENT_TAG_INTERNAL_REDIRECT"
+          # - "PLACEMENT_TAG_JAVASCRIPT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_IFRAME_JAVASCRIPT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_INTERNAL_REDIRECT"
+          # - "PLACEMENT_TAG_INTERSTITIAL_JAVASCRIPT"
+          # - "PLACEMENT_TAG_CLICK_COMMANDS"
+          # - "PLACEMENT_TAG_INSTREAM_VIDEO_PREFETCH"
+          # - "PLACEMENT_TAG_TRACKING"
+          # - "PLACEMENT_TAG_TRACKING_IFRAME"
+          # - "PLACEMENT_TAG_TRACKING_JAVASCRIPT"
+        "A String",
+      ],
+      "paymentApproved": True or False, # Whether payment was approved for this placement. This is a read-only field relevant only to publisher-paid placements.
+      "tagSetting": { # Tag Settings # Tag settings for this placement.
+        "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+        "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+        "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+        "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+      },
+      "contentCategoryId": "A String", # ID of the content category assigned to this placement.
+      "externalId": "A String", # External ID for this placement.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this placement. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "size": { # Represents the dimensions of ads, placements, creatives, or creative assets. # Size associated with this placement. When inserting or updating a placement, only the size ID field is used. This field is required on insertion.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+      "sslRequired": True or False, # Whether creatives assigned to this placement must be SSL-compliant.
+      "status": "A String", # Third-party placement status.
+      "campaignIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the campaign. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "primary": True or False, # Whether this placement is the primary placement of a roadblock (placement group). You cannot change this field from true to false. Setting this field to true will automatically set the primary field on the original primary placement of the roadblock to false, and it will automatically set the roadblock's primaryPlacementId field to the ID of this placement.
+      "placementGroupId": "A String", # ID of this placement's group, if applicable.
+      "createInfo": { # Modification timestamp. # Information about the creation of this placement. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "siteId": "A String", # Site ID associated with this placement. On insert, you must set either this field or the directorySiteId field to specify the site associated with this placement. This is a required field that is read-only after insertion.
+      "siteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "compatibility": "A String", # Placement compatibility. DISPLAY and DISPLAY_INTERSTITIAL refer to rendering on desktop, on mobile devices or in mobile apps for regular or interstitial ads respectively. APP and APP_INTERSTITIAL are no longer allowed for new placement insertions. Instead, use DISPLAY or DISPLAY_INTERSTITIAL. IN_STREAM_VIDEO refers to rendering in in-stream video ads developed with the VAST standard. This field is required on insertion.
+      "placementStrategyId": "A String", # ID of the placement strategy assigned to this placement.
+      "placementGroupIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the placement group. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "kind": "dfareporting#placement", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#placement".
+      "subaccountId": "A String", # Subaccount ID of this placement. This field can be left blank.
+      "name": "A String", # Name of this placement.This is a required field and must be less than 256 characters long.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this placement.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this placement. This is a read-only field.
+        "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+      },
+      "pricingSchedule": { # Pricing Schedule # Pricing schedule of this placement. This field is required on insertion, specifically subfields startDate, endDate and pricingType.
+        "startDate": "A String", # Placement start date. This date must be later than, or the same day as, the campaign start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error. This field is required on insertion.
+        "endDate": "A String", # Placement end date. This date must be later than, or the same day as, the placement start date, but not later than the campaign end date. If, for example, you set 6/25/2015 as both the start and end dates, the effective placement date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error. This field is required on insertion.
+        "flighted": True or False, # Whether this placement is flighted. If true, pricing periods will be computed automatically.
+        "disregardOverdelivery": True or False, # Whether cap costs are ignored by ad serving.
+        "capCostOption": "A String", # Placement cap cost option.
+        "pricingPeriods": [ # Pricing periods for this placement.
+          { # Pricing Period
+            "units": "A String", # Units of this pricing period.
+            "rateOrCostNanos": "A String", # Rate or cost of this pricing period.
+            "startDate": "A String", # Pricing period start date. This date must be later than, or the same day as, the placement start date. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+            "endDate": "A String", # Pricing period end date. This date must be later than, or the same day as, the pricing period start date, but not later than the placement end date. The period end date can be the same date as the period start date. If, for example, you set 6/25/2015 as both the start and end dates, the effective pricing period date is just that day only, 6/25/2015. The hours, minutes, and seconds of the end date should not be set, as doing so will result in an error.
+            "pricingComment": "A String", # Comments for this pricing period.
+          },
+        ],
+        "pricingType": "A String", # Placement pricing type. This field is required on insertion.
+        "testingStartDate": "A String", # Testing start date of this placement. The hours, minutes, and seconds of the start date should not be set, as doing so will result in an error.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this placement. This field should be set when placement pricing type is set to PRICING_TYPE_CPA.
+      },
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.platformTypes.html b/docs/dyn/dfareporting_v2_5.platformTypes.html
new file mode 100644
index 0000000..1c566f7
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.platformTypes.html
@@ -0,0 +1,124 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.platformTypes.html">platformTypes</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one platform type by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of platform types.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one platform type by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Platform type ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains information about a platform type that can be targeted by ads.
+    "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+    "id": "A String", # ID of this platform type.
+    "name": "A String", # Name of this platform type.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of platform types.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Platform Type List Response
+    "kind": "dfareporting#platformTypesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformTypesListResponse".
+    "platformTypes": [ # Platform type collection.
+      { # Contains information about a platform type that can be targeted by ads.
+        "kind": "dfareporting#platformType", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#platformType".
+        "id": "A String", # ID of this platform type.
+        "name": "A String", # Name of this platform type.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.postalCodes.html b/docs/dyn/dfareporting_v2_5.postalCodes.html
new file mode 100644
index 0000000..b9d28df
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.postalCodes.html
@@ -0,0 +1,128 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.postalCodes.html">postalCodes</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, code)</a></code></p>
+<p class="firstline">Gets one postal code by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of postal codes.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, code)</code>
+  <pre>Gets one postal code by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  code: string, Postal code ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains information about a postal code that can be targeted by ads.
+    "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+    "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+    "code": "A String", # Postal code. This is equivalent to the id field.
+    "id": "A String", # ID of this postal code.
+    "countryCode": "A String", # Country code of the country to which this postal code belongs.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of postal codes.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Postal Code List Response
+    "kind": "dfareporting#postalCodesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCodesListResponse".
+    "postalCodes": [ # Postal code collection.
+      { # Contains information about a postal code that can be targeted by ads.
+        "countryDartId": "A String", # DART ID of the country to which this postal code belongs.
+        "kind": "dfareporting#postalCode", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#postalCode".
+        "code": "A String", # Postal code. This is equivalent to the id field.
+        "id": "A String", # ID of this postal code.
+        "countryCode": "A String", # Country code of the country to which this postal code belongs.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.projects.html b/docs/dyn/dfareporting_v2_5.projects.html
new file mode 100644
index 0000000..46b90e7
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.projects.html
@@ -0,0 +1,195 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one project by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, pageToken=None, sortField=None, advertiserIds=None, ids=None, maxResults=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of projects, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one project by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Project ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DoubleClick Planning project.
+    "startDate": "A String", # Start date of the project.
+    "kind": "dfareporting#project", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#project".
+    "targetConversions": "A String", # Number of conversions that the advertiser is targeting.
+    "endDate": "A String", # End date of the project.
+    "name": "A String", # Name of this project.
+    "targetCpmNanos": "A String", # CPM that the advertiser is targeting.
+    "targetCpcNanos": "A String", # CPC that the advertiser is targeting.
+    "clientBillingCode": "A String", # Client billing code of this project.
+    "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this project.
+      "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+    },
+    "targetClicks": "A String", # Number of clicks that the advertiser is targeting.
+    "budget": "A String", # Budget of this project in the currency specified by the current account. The value stored in this field represents only the non-fractional amount. For example, for USD, the smallest value that can be represented by this field is 1 US dollar.
+    "targetCpaNanos": "A String", # CPA that the advertiser is targeting.
+    "advertiserId": "A String", # Advertiser ID of this project.
+    "targetImpressions": "A String", # Number of impressions that the advertiser is targeting.
+    "overview": "A String", # Overview of this project.
+    "audienceAgeGroup": "A String", # Audience age group of this project.
+    "subaccountId": "A String", # Subaccount ID of this project.
+    "audienceGender": "A String", # Audience gender of this project.
+    "id": "A String", # ID of this project. This is a read-only, auto-generated field.
+    "clientName": "A String", # Name of the project client.
+    "accountId": "A String", # Account ID of this project.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, pageToken=None, sortField=None, advertiserIds=None, ids=None, maxResults=None, sortOrder=None)</code>
+  <pre>Retrieves a list of projects, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for projects by name or ID. Wildcards (*) are allowed. For example, "project*2015" will return projects with names like "project June 2015", "project April 2015", or simply "project 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "project" will match projects with name "my project", "project 2015", or simply "project".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  advertiserIds: string, Select only projects with these advertiser IDs. (repeated)
+  ids: string, Select only projects with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Project List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#projectsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#projectsListResponse".
+    "projects": [ # Project collection.
+      { # Contains properties of a DoubleClick Planning project.
+        "startDate": "A String", # Start date of the project.
+        "kind": "dfareporting#project", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#project".
+        "targetConversions": "A String", # Number of conversions that the advertiser is targeting.
+        "endDate": "A String", # End date of the project.
+        "name": "A String", # Name of this project.
+        "targetCpmNanos": "A String", # CPM that the advertiser is targeting.
+        "targetCpcNanos": "A String", # CPC that the advertiser is targeting.
+        "clientBillingCode": "A String", # Client billing code of this project.
+        "lastModifiedInfo": { # Modification timestamp. # Information about the most recent modification of this project.
+          "time": "A String", # Timestamp of the last change in milliseconds since epoch.
+        },
+        "targetClicks": "A String", # Number of clicks that the advertiser is targeting.
+        "budget": "A String", # Budget of this project in the currency specified by the current account. The value stored in this field represents only the non-fractional amount. For example, for USD, the smallest value that can be represented by this field is 1 US dollar.
+        "targetCpaNanos": "A String", # CPA that the advertiser is targeting.
+        "advertiserId": "A String", # Advertiser ID of this project.
+        "targetImpressions": "A String", # Number of impressions that the advertiser is targeting.
+        "overview": "A String", # Overview of this project.
+        "audienceAgeGroup": "A String", # Audience age group of this project.
+        "subaccountId": "A String", # Subaccount ID of this project.
+        "audienceGender": "A String", # Audience gender of this project.
+        "id": "A String", # ID of this project. This is a read-only, auto-generated field.
+        "clientName": "A String", # Name of the project client.
+        "accountId": "A String", # Account ID of this project.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.regions.html b/docs/dyn/dfareporting_v2_5.regions.html
new file mode 100644
index 0000000..d770c7a
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.regions.html
@@ -0,0 +1,106 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.regions.html">regions</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Retrieves a list of regions.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Retrieves a list of regions.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # Region List Response
+    "regions": [ # Region collection.
+      { # Contains information about a region that can be targeted by ads.
+        "kind": "dfareporting#region", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#region".
+        "countryDartId": "A String", # DART ID of the country to which this region belongs.
+        "name": "A String", # Name of this region.
+        "countryCode": "A String", # Country code of the country to which this region belongs.
+        "regionCode": "A String", # Region code.
+        "dartId": "A String", # DART ID of this region.
+      },
+    ],
+    "kind": "dfareporting#regionsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#regionsListResponse".
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.remarketingListShares.html b/docs/dyn/dfareporting_v2_5.remarketingListShares.html
new file mode 100644
index 0000000..60b7508
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.remarketingListShares.html
@@ -0,0 +1,183 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.remarketingListShares.html">remarketingListShares</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, remarketingListId)</a></code></p>
+<p class="firstline">Gets one remarketing list share by remarketing list ID.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, remarketingListId, body)</a></code></p>
+<p class="firstline">Updates an existing remarketing list share. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing remarketing list share.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, remarketingListId)</code>
+  <pre>Gets one remarketing list share by remarketing list ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  remarketingListId: string, Remarketing list ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
+      "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
+        "A String",
+      ],
+      "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
+      "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+      "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
+        "A String",
+      ],
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, remarketingListId, body)</code>
+  <pre>Updates an existing remarketing list share. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  remarketingListId: string, Remarketing list ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
+    "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
+      "A String",
+    ],
+    "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
+    "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+    "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
+      "A String",
+    ],
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
+      "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
+        "A String",
+      ],
+      "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
+      "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+      "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
+        "A String",
+      ],
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing remarketing list share.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
+    "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
+      "A String",
+    ],
+    "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
+    "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+    "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
+      "A String",
+    ],
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a remarketing list's sharing information. Sharing allows other accounts or advertisers to target to your remarketing lists. This resource can be used to manage remarketing list sharing to other accounts and advertisers.
+      "sharedAdvertiserIds": [ # Advertisers that the remarketing list is shared with.
+        "A String",
+      ],
+      "kind": "dfareporting#remarketingListShare", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListShare".
+      "remarketingListId": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+      "sharedAccountIds": [ # Accounts that the remarketing list is shared with.
+        "A String",
+      ],
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.remarketingLists.html b/docs/dyn/dfareporting_v2_5.remarketingLists.html
new file mode 100644
index 0000000..e305cfe
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.remarketingLists.html
@@ -0,0 +1,532 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.remarketingLists.html">remarketingLists</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one remarketing list by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new remarketing list.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, advertiserId, name=None, pageToken=None, sortField=None, floodlightActivityId=None, maxResults=None, active=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of remarketing lists, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing remarketing list. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing remarketing list.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one remarketing list by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Remarketing list ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.
+      "listPopulationRule": { # Remarketing List Population Rule. # Rule used to populate the remarketing list with users.
+        "floodlightActivityName": "A String", # Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this rule. This field can be left blank.
+        "listPopulationClauses": [ # Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.
+          { # A group clause made up of list population terms representing constraints joined by ORs.
+            "terms": [ # Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.
+              { # Remarketing List Population Rule Term.
+                "remarketingListId": "A String", # ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.
+                "contains": True or False, # Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.
+                "negation": True or False, # Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "value": "A String", # Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "variableFriendlyName": "A String", # Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.
+                "operator": "A String", # Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "type": "A String", # List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.
+                "variableName": "A String", # Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              },
+            ],
+          },
+        ],
+      },
+      "kind": "dfareporting#remarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingList".
+      "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+      "description": "A String", # Remarketing list description.
+      "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+      "lifeSpan": "A String", # Number of days that a user should remain in the remarketing list without an impression.
+      "name": "A String", # Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.
+      "advertiserId": "A String", # Dimension value for the advertiser ID that owns this remarketing list. This is a required field.
+      "listSource": "A String", # Product from which this remarketing list was originated.
+      "active": True or False, # Whether this remarketing list is active.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new remarketing list.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.
+    "listPopulationRule": { # Remarketing List Population Rule. # Rule used to populate the remarketing list with users.
+      "floodlightActivityName": "A String", # Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.
+      "floodlightActivityId": "A String", # Floodlight activity ID associated with this rule. This field can be left blank.
+      "listPopulationClauses": [ # Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.
+        { # A group clause made up of list population terms representing constraints joined by ORs.
+          "terms": [ # Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.
+            { # Remarketing List Population Rule Term.
+              "remarketingListId": "A String", # ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.
+              "contains": True or False, # Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.
+              "negation": True or False, # Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              "value": "A String", # Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              "variableFriendlyName": "A String", # Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.
+              "operator": "A String", # Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              "type": "A String", # List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.
+              "variableName": "A String", # Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+            },
+          ],
+        },
+      ],
+    },
+    "kind": "dfareporting#remarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingList".
+    "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+    "description": "A String", # Remarketing list description.
+    "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+    "lifeSpan": "A String", # Number of days that a user should remain in the remarketing list without an impression.
+    "name": "A String", # Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.
+    "advertiserId": "A String", # Dimension value for the advertiser ID that owns this remarketing list. This is a required field.
+    "listSource": "A String", # Product from which this remarketing list was originated.
+    "active": True or False, # Whether this remarketing list is active.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.
+      "listPopulationRule": { # Remarketing List Population Rule. # Rule used to populate the remarketing list with users.
+        "floodlightActivityName": "A String", # Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this rule. This field can be left blank.
+        "listPopulationClauses": [ # Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.
+          { # A group clause made up of list population terms representing constraints joined by ORs.
+            "terms": [ # Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.
+              { # Remarketing List Population Rule Term.
+                "remarketingListId": "A String", # ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.
+                "contains": True or False, # Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.
+                "negation": True or False, # Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "value": "A String", # Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "variableFriendlyName": "A String", # Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.
+                "operator": "A String", # Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "type": "A String", # List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.
+                "variableName": "A String", # Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              },
+            ],
+          },
+        ],
+      },
+      "kind": "dfareporting#remarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingList".
+      "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+      "description": "A String", # Remarketing list description.
+      "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+      "lifeSpan": "A String", # Number of days that a user should remain in the remarketing list without an impression.
+      "name": "A String", # Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.
+      "advertiserId": "A String", # Dimension value for the advertiser ID that owns this remarketing list. This is a required field.
+      "listSource": "A String", # Product from which this remarketing list was originated.
+      "active": True or False, # Whether this remarketing list is active.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, advertiserId, name=None, pageToken=None, sortField=None, floodlightActivityId=None, maxResults=None, active=None, sortOrder=None)</code>
+  <pre>Retrieves a list of remarketing lists, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  advertiserId: string, Select only remarketing lists owned by this advertiser. (required)
+  name: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "remarketing list*2015" will return objects with names like "remarketing list June 2015", "remarketing list April 2015", or simply "remarketing list 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "remarketing list" will match objects with name "my remarketing list", "remarketing list 2015", or simply "remarketing list".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  floodlightActivityId: string, Select only remarketing lists that have this floodlight activity ID.
+  maxResults: integer, Maximum number of results to return.
+  active: boolean, Select only active or only inactive remarketing lists.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Remarketing list response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "remarketingLists": [ # Remarketing list collection.
+      { # Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.
+          "listPopulationRule": { # Remarketing List Population Rule. # Rule used to populate the remarketing list with users.
+            "floodlightActivityName": "A String", # Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.
+            "floodlightActivityId": "A String", # Floodlight activity ID associated with this rule. This field can be left blank.
+            "listPopulationClauses": [ # Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.
+              { # A group clause made up of list population terms representing constraints joined by ORs.
+                "terms": [ # Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.
+                  { # Remarketing List Population Rule Term.
+                    "remarketingListId": "A String", # ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.
+                    "contains": True or False, # Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.
+                    "negation": True or False, # Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                    "value": "A String", # Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                    "variableFriendlyName": "A String", # Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.
+                    "operator": "A String", # Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                    "type": "A String", # List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.
+                    "variableName": "A String", # Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                  },
+                ],
+              },
+            ],
+          },
+          "kind": "dfareporting#remarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingList".
+          "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+          "description": "A String", # Remarketing list description.
+          "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+          "lifeSpan": "A String", # Number of days that a user should remain in the remarketing list without an impression.
+          "name": "A String", # Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.
+          "advertiserId": "A String", # Dimension value for the advertiser ID that owns this remarketing list. This is a required field.
+          "listSource": "A String", # Product from which this remarketing list was originated.
+          "active": True or False, # Whether this remarketing list is active.
+          "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "id": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+        },
+    ],
+    "kind": "dfareporting#remarketingListsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingListsListResponse".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing remarketing list. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Remarketing list ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.
+    "listPopulationRule": { # Remarketing List Population Rule. # Rule used to populate the remarketing list with users.
+      "floodlightActivityName": "A String", # Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.
+      "floodlightActivityId": "A String", # Floodlight activity ID associated with this rule. This field can be left blank.
+      "listPopulationClauses": [ # Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.
+        { # A group clause made up of list population terms representing constraints joined by ORs.
+          "terms": [ # Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.
+            { # Remarketing List Population Rule Term.
+              "remarketingListId": "A String", # ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.
+              "contains": True or False, # Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.
+              "negation": True or False, # Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              "value": "A String", # Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              "variableFriendlyName": "A String", # Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.
+              "operator": "A String", # Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              "type": "A String", # List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.
+              "variableName": "A String", # Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+            },
+          ],
+        },
+      ],
+    },
+    "kind": "dfareporting#remarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingList".
+    "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+    "description": "A String", # Remarketing list description.
+    "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+    "lifeSpan": "A String", # Number of days that a user should remain in the remarketing list without an impression.
+    "name": "A String", # Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.
+    "advertiserId": "A String", # Dimension value for the advertiser ID that owns this remarketing list. This is a required field.
+    "listSource": "A String", # Product from which this remarketing list was originated.
+    "active": True or False, # Whether this remarketing list is active.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.
+      "listPopulationRule": { # Remarketing List Population Rule. # Rule used to populate the remarketing list with users.
+        "floodlightActivityName": "A String", # Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this rule. This field can be left blank.
+        "listPopulationClauses": [ # Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.
+          { # A group clause made up of list population terms representing constraints joined by ORs.
+            "terms": [ # Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.
+              { # Remarketing List Population Rule Term.
+                "remarketingListId": "A String", # ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.
+                "contains": True or False, # Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.
+                "negation": True or False, # Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "value": "A String", # Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "variableFriendlyName": "A String", # Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.
+                "operator": "A String", # Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "type": "A String", # List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.
+                "variableName": "A String", # Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              },
+            ],
+          },
+        ],
+      },
+      "kind": "dfareporting#remarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingList".
+      "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+      "description": "A String", # Remarketing list description.
+      "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+      "lifeSpan": "A String", # Number of days that a user should remain in the remarketing list without an impression.
+      "name": "A String", # Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.
+      "advertiserId": "A String", # Dimension value for the advertiser ID that owns this remarketing list. This is a required field.
+      "listSource": "A String", # Product from which this remarketing list was originated.
+      "active": True or False, # Whether this remarketing list is active.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing remarketing list.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.
+    "listPopulationRule": { # Remarketing List Population Rule. # Rule used to populate the remarketing list with users.
+      "floodlightActivityName": "A String", # Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.
+      "floodlightActivityId": "A String", # Floodlight activity ID associated with this rule. This field can be left blank.
+      "listPopulationClauses": [ # Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.
+        { # A group clause made up of list population terms representing constraints joined by ORs.
+          "terms": [ # Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.
+            { # Remarketing List Population Rule Term.
+              "remarketingListId": "A String", # ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.
+              "contains": True or False, # Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.
+              "negation": True or False, # Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              "value": "A String", # Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              "variableFriendlyName": "A String", # Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.
+              "operator": "A String", # Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              "type": "A String", # List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.
+              "variableName": "A String", # Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+            },
+          ],
+        },
+      ],
+    },
+    "kind": "dfareporting#remarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingList".
+    "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+    "description": "A String", # Remarketing list description.
+    "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+    "lifeSpan": "A String", # Number of days that a user should remain in the remarketing list without an impression.
+    "name": "A String", # Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.
+    "advertiserId": "A String", # Dimension value for the advertiser ID that owns this remarketing list. This is a required field.
+    "listSource": "A String", # Product from which this remarketing list was originated.
+    "active": True or False, # Whether this remarketing list is active.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource can be used to manage remarketing lists that are owned by your advertisers. To see all remarketing lists that are visible to your advertisers, including those that are shared to your advertiser or account, use the TargetableRemarketingLists resource.
+      "listPopulationRule": { # Remarketing List Population Rule. # Rule used to populate the remarketing list with users.
+        "floodlightActivityName": "A String", # Name of floodlight activity associated with this rule. This is a read-only, auto-generated field.
+        "floodlightActivityId": "A String", # Floodlight activity ID associated with this rule. This field can be left blank.
+        "listPopulationClauses": [ # Clauses that make up this list population rule. Clauses are joined by ANDs, and the clauses themselves are made up of list population terms which are joined by ORs.
+          { # A group clause made up of list population terms representing constraints joined by ORs.
+            "terms": [ # Terms of this list population clause. Each clause is made up of list population terms representing constraints and are joined by ORs.
+              { # Remarketing List Population Rule Term.
+                "remarketingListId": "A String", # ID of the list in question. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM.
+                "contains": True or False, # Will be true if the term should check if the user is in the list and false if the term should check if the user is not in the list. This field is only relevant when type is set to LIST_MEMBERSHIP_TERM. False by default.
+                "negation": True or False, # Whether to negate the comparison result of this term during rule evaluation. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "value": "A String", # Literal to compare the variable to. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "variableFriendlyName": "A String", # Friendly name of this term's variable. This is a read-only, auto-generated field. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM.
+                "operator": "A String", # Comparison operator of this term. This field is only relevant when type is left unset or set to CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+                "type": "A String", # List population term type determines the applicable fields in this object. If left unset or set to CUSTOM_VARIABLE_TERM, then variableName, variableFriendlyName, operator, value, and negation are applicable. If set to LIST_MEMBERSHIP_TERM then remarketingListId and contains are applicable. If set to REFERRER_TERM then operator, value, and negation are applicable.
+                "variableName": "A String", # Name of the variable (U1, U2, etc.) being compared in this term. This field is only relevant when type is set to null, CUSTOM_VARIABLE_TERM or REFERRER_TERM.
+              },
+            ],
+          },
+        ],
+      },
+      "kind": "dfareporting#remarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#remarketingList".
+      "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+      "description": "A String", # Remarketing list description.
+      "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+      "lifeSpan": "A String", # Number of days that a user should remain in the remarketing list without an impression.
+      "name": "A String", # Name of the remarketing list. This is a required field. Must be no greater than 128 characters long.
+      "advertiserId": "A String", # Dimension value for the advertiser ID that owns this remarketing list. This is a required field.
+      "listSource": "A String", # Product from which this remarketing list was originated.
+      "active": True or False, # Whether this remarketing list is active.
+      "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "id": "A String", # Remarketing list ID. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.reports.compatibleFields.html b/docs/dyn/dfareporting_v2_5.reports.compatibleFields.html
new file mode 100644
index 0000000..28e57f7
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.reports.compatibleFields.html
@@ -0,0 +1,551 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.reports.html">reports</a> . <a href="dfareporting_v2_5.reports.compatibleFields.html">compatibleFields</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#query">query(profileId, body)</a></code></p>
+<p class="firstline">Returns the fields that are compatible to be selected in the respective sections of a report criteria, given the fields already selected in the input report and user permissions.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="query">query(profileId, body)</code>
+  <pre>Returns the fields that are compatible to be selected in the respective sections of a report criteria, given the fields already selected in the input report and user permissions.
+
+Args:
+  profileId: string, The DFA user profile ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Represents a Report resource.
+    "pathToConversionCriteria": { # The report criteria for a report of type "PATH_TO_CONVERSION".
+      "conversionDimensions": [ # The list of conversion dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "reportProperties": { # The properties of the report.
+        "clicksLookbackWindow": 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+        "pivotOnInteractionPath": True or False, # Enable pivoting on interaction path.
+        "impressionsLookbackWindow": 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+        "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+        "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+        "maximumInteractionGap": 42, # The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
+        "includeAttributedIPConversions": True or False, # Deprecated: has no effect.
+        "maximumClickInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+        "maximumImpressionInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+      },
+      "perInteractionDimensions": [ # The list of per interaction dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "activityFilters": [ # The list of 'dfa:activity' values to filter on.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "customRichMediaEvents": [ # The list of custom rich media events to include.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "customFloodlightVariables": [ # The list of custom floodlight variables the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+    },
+    "kind": "dfareporting#report", # The kind of resource this is, in this case dfareporting#report.
+    "subAccountId": "A String", # The subaccount ID to which this report belongs if applicable.
+    "name": "A String", # The name of the report.
+    "schedule": { # The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not "TODAY".
+      "startDate": "A String", # Start date of date range for which scheduled reports should be run.
+      "runsOnDayOfMonth": "A String", # Enum to define for "MONTHLY" scheduled reports whether reports should be repeated on the same day of the month as "startDate" or the same day of the week of the month.
+          # Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" would run subsequent reports on the first Monday of the month.
+      "every": 42, # Defines every how many days, weeks or months the report should be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or "MONTHLY".
+      "expirationDate": "A String", # The expiration date when the scheduled report stops running.
+      "active": True or False, # Whether the schedule is active or not. Must be set to either true or false.
+      "repeats": "A String", # The interval for which the report is repeated. Note:
+          # - "DAILY" also requires field "every" to be set.
+          # - "WEEKLY" also requires fields "every" and "repeatsOnWeekDays" to be set.
+          # - "MONTHLY" also requires fields "every" and "runsOnDayOfMonth" to be set.
+      "repeatsOnWeekDays": [ # List of week days "WEEKLY" on which scheduled reports should run.
+        "A String",
+      ],
+    },
+    "format": "A String", # The output format of the report. If not specified, default format is "CSV". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. "CSV" will then be the fallback format.
+    "ownerProfileId": "A String", # The user profile id of the owner of this report.
+    "reachCriteria": { # The report criteria for a report of type "REACH".
+      "activities": { # Represents an activity group. # Activity group.
+        "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+        "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "metricNames": [ # List of names of floodlight activity metrics.
+          "A String",
+        ],
+      },
+      "dimensions": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "reachByFrequencyMetricNames": [ # The list of names of  Reach By Frequency metrics the report should include.
+        "A String",
+      ],
+      "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+        "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+        "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+      },
+      "enableAllDimensionCombinations": True or False, # Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last three months.
+    },
+    "floodlightCriteria": { # The report criteria for a report of type "FLOODLIGHT".
+      "dimensions": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "customRichMediaEvents": [ # The list of custom rich media events to include.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "reportProperties": { # The properties of the report.
+        "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+        "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+        "includeAttributedIPConversions": True or False, # Include conversions that have no cookie, but do have an exposure path.
+      },
+    },
+    "fileName": "A String", # The filename used when generating report files for this report.
+    "delivery": { # The report's email delivery settings.
+      "message": "A String", # The message to be sent with each email.
+      "emailOwnerDeliveryType": "A String", # The type of delivery for the owner to receive, if enabled.
+      "recipients": [ # The list of recipients to which to email the report.
+        { # Represents a recipient.
+          "kind": "dfareporting#recipient", # The kind of resource this is, in this case dfareporting#recipient.
+          "deliveryType": "A String", # The delivery type for the recipient.
+          "email": "A String", # The email address of the recipient.
+        },
+      ],
+      "emailOwner": True or False, # Whether the report should be emailed to the report owner.
+    },
+    "etag": "A String", # The eTag of this response for caching purposes.
+    "criteria": { # The report criteria for a report of type "STANDARD".
+      "activities": { # Represents an activity group. # Activity group.
+        "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+        "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "metricNames": [ # List of names of floodlight activity metrics.
+          "A String",
+        ],
+      },
+      "dimensions": [ # The list of standard dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range for which this report should be run.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+        "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+        "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+      },
+    },
+    "id": "A String", # The unique ID identifying this report resource.
+    "lastModifiedTime": "A String", # The timestamp (in milliseconds since epoch) of when this report was last modified.
+    "type": "A String", # The type of the report.
+    "crossDimensionReachCriteria": { # The report criteria for a report of type "CROSS_DIMENSION_REACH".
+      "breakdown": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "overlapMetricNames": [ # The list of names of overlap metrics the report should include.
+        "A String",
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "pivoted": True or False, # Whether the report is pivoted or not. Defaults to true.
+      "dimension": "A String", # The dimension option.
+    },
+    "accountId": "A String", # The account ID to which this report belongs.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Represents a response to the queryCompatibleFields method.
+    "kind": "dfareporting#compatibleFields", # The kind of resource this is, in this case dfareporting#compatibleFields.
+    "reachReportCompatibleFields": { # Represents fields that are compatible to be selected for a report of type "REACH". # Contains items that are compatible to be selected for a report of type "REACH".
+      "kind": "dfareporting#reachReportCompatibleFields", # The kind of resource this is, in this case dfareporting#reachReportCompatibleFields.
+      "dimensions": [ # Dimensions which are compatible to be selected in the "dimensions" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+      "reachByFrequencyMetrics": [ # Metrics which are compatible to be selected in the "reachByFrequencyMetricNames" section of the report.
+        { # Represents a metric.
+          "kind": "dfareporting#metric", # The kind of resource this is, in this case dfareporting#metric.
+          "name": "A String", # The metric name, e.g. dfa:impressions
+        },
+      ],
+      "pivotedActivityMetrics": [ # Metrics which are compatible to be selected as activity metrics to pivot on in the "activities" section of the report.
+        { # Represents a metric.
+          "kind": "dfareporting#metric", # The kind of resource this is, in this case dfareporting#metric.
+          "name": "A String", # The metric name, e.g. dfa:impressions
+        },
+      ],
+      "dimensionFilters": [ # Dimensions which are compatible to be selected in the "dimensionFilters" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+      "metrics": [ # Metrics which are compatible to be selected in the "metricNames" section of the report.
+        { # Represents a metric.
+          "kind": "dfareporting#metric", # The kind of resource this is, in this case dfareporting#metric.
+          "name": "A String", # The metric name, e.g. dfa:impressions
+        },
+      ],
+    },
+    "pathToConversionReportCompatibleFields": { # Represents fields that are compatible to be selected for a report of type "PATH_TO_CONVERSION". # Contains items that are compatible to be selected for a report of type "PATH_TO_CONVERSION".
+      "metrics": [ # Metrics which are compatible to be selected in the "metricNames" section of the report.
+        { # Represents a metric.
+          "kind": "dfareporting#metric", # The kind of resource this is, in this case dfareporting#metric.
+          "name": "A String", # The metric name, e.g. dfa:impressions
+        },
+      ],
+      "perInteractionDimensions": [ # Per-interaction dimensions which are compatible to be selected in the "perInteractionDimensions" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+      "kind": "dfareporting#pathToConversionReportCompatibleFields", # The kind of resource this is, in this case dfareporting#pathToConversionReportCompatibleFields.
+      "conversionDimensions": [ # Conversion dimensions which are compatible to be selected in the "conversionDimensions" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+      "customFloodlightVariables": [ # Custom floodlight variables which are compatible to be selected in the "customFloodlightVariables" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+    },
+    "crossDimensionReachReportCompatibleFields": { # Represents fields that are compatible to be selected for a report of type "CROSS_DIMENSION_REACH". # Contains items that are compatible to be selected for a report of type "CROSS_DIMENSION_REACH".
+      "breakdown": [ # Dimensions which are compatible to be selected in the "breakdown" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+      "metrics": [ # Metrics which are compatible to be selected in the "metricNames" section of the report.
+        { # Represents a metric.
+          "kind": "dfareporting#metric", # The kind of resource this is, in this case dfareporting#metric.
+          "name": "A String", # The metric name, e.g. dfa:impressions
+        },
+      ],
+      "kind": "dfareporting#crossDimensionReachReportCompatibleFields", # The kind of resource this is, in this case dfareporting#crossDimensionReachReportCompatibleFields.
+      "overlapMetrics": [ # Metrics which are compatible to be selected in the "overlapMetricNames" section of the report.
+        { # Represents a metric.
+          "kind": "dfareporting#metric", # The kind of resource this is, in this case dfareporting#metric.
+          "name": "A String", # The metric name, e.g. dfa:impressions
+        },
+      ],
+      "dimensionFilters": [ # Dimensions which are compatible to be selected in the "dimensionFilters" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+    },
+    "floodlightReportCompatibleFields": { # Represents fields that are compatible to be selected for a report of type "FlOODLIGHT". # Contains items that are compatible to be selected for a report of type "FLOODLIGHT".
+      "metrics": [ # Metrics which are compatible to be selected in the "metricNames" section of the report.
+        { # Represents a metric.
+          "kind": "dfareporting#metric", # The kind of resource this is, in this case dfareporting#metric.
+          "name": "A String", # The metric name, e.g. dfa:impressions
+        },
+      ],
+      "kind": "dfareporting#floodlightReportCompatibleFields", # The kind of resource this is, in this case dfareporting#floodlightReportCompatibleFields.
+      "dimensionFilters": [ # Dimensions which are compatible to be selected in the "dimensionFilters" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+      "dimensions": [ # Dimensions which are compatible to be selected in the "dimensions" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+    },
+    "reportCompatibleFields": { # Represents fields that are compatible to be selected for a report of type "STANDARD". # Contains items that are compatible to be selected for a report of type "STANDARD".
+      "metrics": [ # Metrics which are compatible to be selected in the "metricNames" section of the report.
+        { # Represents a metric.
+          "kind": "dfareporting#metric", # The kind of resource this is, in this case dfareporting#metric.
+          "name": "A String", # The metric name, e.g. dfa:impressions
+        },
+      ],
+      "kind": "dfareporting#reportCompatibleFields", # The kind of resource this is, in this case dfareporting#reportCompatibleFields.
+      "pivotedActivityMetrics": [ # Metrics which are compatible to be selected as activity metrics to pivot on in the "activities" section of the report.
+        { # Represents a metric.
+          "kind": "dfareporting#metric", # The kind of resource this is, in this case dfareporting#metric.
+          "name": "A String", # The metric name, e.g. dfa:impressions
+        },
+      ],
+      "dimensionFilters": [ # Dimensions which are compatible to be selected in the "dimensionFilters" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+      "dimensions": [ # Dimensions which are compatible to be selected in the "dimensions" section of the report.
+        { # Represents a dimension.
+          "kind": "dfareporting#dimension", # The kind of resource this is, in this case dfareporting#dimension.
+          "name": "A String", # The dimension name, e.g. dfa:advertiser
+        },
+      ],
+    },
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.reports.files.html b/docs/dyn/dfareporting_v2_5.reports.files.html
new file mode 100644
index 0000000..b8b2ffd
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.reports.files.html
@@ -0,0 +1,203 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.reports.html">reports</a> . <a href="dfareporting_v2_5.reports.files.html">files</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, reportId, fileId)</a></code></p>
+<p class="firstline">Retrieves a report file.</p>
+<p class="toc_element">
+  <code><a href="#get_media">get_media(profileId, reportId, fileId)</a></code></p>
+<p class="firstline">Retrieves a report file.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, reportId, pageToken=None, sortField=None, maxResults=None, sortOrder=None)</a></code></p>
+<p class="firstline">Lists files for a report.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, reportId, fileId)</code>
+  <pre>Retrieves a report file.
+
+Args:
+  profileId: string, The DFA profile ID. (required)
+  reportId: string, The ID of the report. (required)
+  fileId: string, The ID of the report file. (required)
+
+Returns:
+  An object of the form:
+
+    { # Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is "REPORT_AVAILABLE".
+    "status": "A String", # The status of the report file.
+    "kind": "dfareporting#file", # The kind of resource this is, in this case dfareporting#file.
+    "format": "A String", # The output format of the report. Only available once the file is available.
+    "dateRange": { # Represents a date range. # The date range for which the file has report data. The date range will always be the absolute date range for which the report is run.
+      "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+      "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+      "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+      "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+    },
+    "fileName": "A String", # The filename of the file.
+    "etag": "A String", # The eTag of this response for caching purposes.
+    "reportId": "A String", # The ID of the report this file was generated from.
+    "urls": { # The URLs where the completed report file can be downloaded.
+      "browserUrl": "A String", # The URL for downloading the report data through a browser.
+      "apiUrl": "A String", # The URL for downloading the report data through the API.
+    },
+    "lastModifiedTime": "A String", # The timestamp in milliseconds since epoch when this file was last modified.
+    "id": "A String", # The unique ID of this report file.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get_media">get_media(profileId, reportId, fileId)</code>
+  <pre>Retrieves a report file.
+
+Args:
+  profileId: string, The DFA profile ID. (required)
+  reportId: string, The ID of the report. (required)
+  fileId: string, The ID of the report file. (required)
+
+Returns:
+  The media object as a string.
+
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, reportId, pageToken=None, sortField=None, maxResults=None, sortOrder=None)</code>
+  <pre>Lists files for a report.
+
+Args:
+  profileId: string, The DFA profile ID. (required)
+  reportId: string, The ID of the parent report. (required)
+  pageToken: string, The value of the nextToken from the previous result page.
+  sortField: string, The field by which to sort the list.
+    Allowed values
+      ID - Sort by file ID.
+      LAST_MODIFIED_TIME - Sort by 'lastmodifiedAt' field.
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is 'DESCENDING'.
+    Allowed values
+      ASCENDING - Ascending order.
+      DESCENDING - Descending order.
+
+Returns:
+  An object of the form:
+
+    { # Represents the list of File resources.
+    "nextPageToken": "A String", # Continuation token used to page through files. To retrieve the next page of results, set the next request's "pageToken" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.
+    "items": [ # The files returned in this response.
+      { # Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is "REPORT_AVAILABLE".
+        "status": "A String", # The status of the report file.
+        "kind": "dfareporting#file", # The kind of resource this is, in this case dfareporting#file.
+        "format": "A String", # The output format of the report. Only available once the file is available.
+        "dateRange": { # Represents a date range. # The date range for which the file has report data. The date range will always be the absolute date range for which the report is run.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "fileName": "A String", # The filename of the file.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "reportId": "A String", # The ID of the report this file was generated from.
+        "urls": { # The URLs where the completed report file can be downloaded.
+          "browserUrl": "A String", # The URL for downloading the report data through a browser.
+          "apiUrl": "A String", # The URL for downloading the report data through the API.
+        },
+        "lastModifiedTime": "A String", # The timestamp in milliseconds since epoch when this file was last modified.
+        "id": "A String", # The unique ID of this report file.
+      },
+    ],
+    "kind": "dfareporting#fileList", # The kind of list this is, in this case dfareporting#fileList.
+    "etag": "A String", # The eTag of this response for caching purposes.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.reports.html b/docs/dyn/dfareporting_v2_5.reports.html
new file mode 100644
index 0000000..9958ce4
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.reports.html
@@ -0,0 +1,2795 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.reports.html">reports</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.reports.compatibleFields.html">compatibleFields()</a></code>
+</p>
+<p class="firstline">Returns the compatibleFields Resource.</p>
+
+<p class="toc_element">
+  <code><a href="dfareporting_v2_5.reports.files.html">files()</a></code>
+</p>
+<p class="firstline">Returns the files Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, reportId)</a></code></p>
+<p class="firstline">Deletes a report by its ID.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, reportId)</a></code></p>
+<p class="firstline">Retrieves a report by its ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Creates a report.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, pageToken=None, maxResults=None, sortOrder=None, sortField=None, scope=None)</a></code></p>
+<p class="firstline">Retrieves list of reports.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, reportId, body)</a></code></p>
+<p class="firstline">Updates a report. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#run">run(profileId, reportId, synchronous=None)</a></code></p>
+<p class="firstline">Runs a report.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, reportId, body)</a></code></p>
+<p class="firstline">Updates a report.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, reportId)</code>
+  <pre>Deletes a report by its ID.
+
+Args:
+  profileId: string, The DFA user profile ID. (required)
+  reportId: string, The ID of the report. (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, reportId)</code>
+  <pre>Retrieves a report by its ID.
+
+Args:
+  profileId: string, The DFA user profile ID. (required)
+  reportId: string, The ID of the report. (required)
+
+Returns:
+  An object of the form:
+
+    { # Represents a Report resource.
+      "pathToConversionCriteria": { # The report criteria for a report of type "PATH_TO_CONVERSION".
+        "conversionDimensions": [ # The list of conversion dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "reportProperties": { # The properties of the report.
+          "clicksLookbackWindow": 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          "pivotOnInteractionPath": True or False, # Enable pivoting on interaction path.
+          "impressionsLookbackWindow": 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+          "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+          "maximumInteractionGap": 42, # The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
+          "includeAttributedIPConversions": True or False, # Deprecated: has no effect.
+          "maximumClickInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+          "maximumImpressionInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+        },
+        "perInteractionDimensions": [ # The list of per interaction dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "activityFilters": [ # The list of 'dfa:activity' values to filter on.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "customRichMediaEvents": [ # The list of custom rich media events to include.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "customFloodlightVariables": [ # The list of custom floodlight variables the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+      },
+      "kind": "dfareporting#report", # The kind of resource this is, in this case dfareporting#report.
+      "subAccountId": "A String", # The subaccount ID to which this report belongs if applicable.
+      "name": "A String", # The name of the report.
+      "schedule": { # The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not "TODAY".
+        "startDate": "A String", # Start date of date range for which scheduled reports should be run.
+        "runsOnDayOfMonth": "A String", # Enum to define for "MONTHLY" scheduled reports whether reports should be repeated on the same day of the month as "startDate" or the same day of the week of the month.
+            # Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" would run subsequent reports on the first Monday of the month.
+        "every": 42, # Defines every how many days, weeks or months the report should be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or "MONTHLY".
+        "expirationDate": "A String", # The expiration date when the scheduled report stops running.
+        "active": True or False, # Whether the schedule is active or not. Must be set to either true or false.
+        "repeats": "A String", # The interval for which the report is repeated. Note:
+            # - "DAILY" also requires field "every" to be set.
+            # - "WEEKLY" also requires fields "every" and "repeatsOnWeekDays" to be set.
+            # - "MONTHLY" also requires fields "every" and "runsOnDayOfMonth" to be set.
+        "repeatsOnWeekDays": [ # List of week days "WEEKLY" on which scheduled reports should run.
+          "A String",
+        ],
+      },
+      "format": "A String", # The output format of the report. If not specified, default format is "CSV". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. "CSV" will then be the fallback format.
+      "ownerProfileId": "A String", # The user profile id of the owner of this report.
+      "reachCriteria": { # The report criteria for a report of type "REACH".
+        "activities": { # Represents an activity group. # Activity group.
+          "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+          "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+          "metricNames": [ # List of names of floodlight activity metrics.
+            "A String",
+          ],
+        },
+        "dimensions": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "reachByFrequencyMetricNames": [ # The list of names of  Reach By Frequency metrics the report should include.
+          "A String",
+        ],
+        "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+          "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+          "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+        },
+        "enableAllDimensionCombinations": True or False, # Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last three months.
+      },
+      "floodlightCriteria": { # The report criteria for a report of type "FLOODLIGHT".
+        "dimensions": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "customRichMediaEvents": [ # The list of custom rich media events to include.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "reportProperties": { # The properties of the report.
+          "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+          "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+          "includeAttributedIPConversions": True or False, # Include conversions that have no cookie, but do have an exposure path.
+        },
+      },
+      "fileName": "A String", # The filename used when generating report files for this report.
+      "delivery": { # The report's email delivery settings.
+        "message": "A String", # The message to be sent with each email.
+        "emailOwnerDeliveryType": "A String", # The type of delivery for the owner to receive, if enabled.
+        "recipients": [ # The list of recipients to which to email the report.
+          { # Represents a recipient.
+            "kind": "dfareporting#recipient", # The kind of resource this is, in this case dfareporting#recipient.
+            "deliveryType": "A String", # The delivery type for the recipient.
+            "email": "A String", # The email address of the recipient.
+          },
+        ],
+        "emailOwner": True or False, # Whether the report should be emailed to the report owner.
+      },
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "criteria": { # The report criteria for a report of type "STANDARD".
+        "activities": { # Represents an activity group. # Activity group.
+          "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+          "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+          "metricNames": [ # List of names of floodlight activity metrics.
+            "A String",
+          ],
+        },
+        "dimensions": [ # The list of standard dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range for which this report should be run.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+          "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+          "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+        },
+      },
+      "id": "A String", # The unique ID identifying this report resource.
+      "lastModifiedTime": "A String", # The timestamp (in milliseconds since epoch) of when this report was last modified.
+      "type": "A String", # The type of the report.
+      "crossDimensionReachCriteria": { # The report criteria for a report of type "CROSS_DIMENSION_REACH".
+        "breakdown": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "overlapMetricNames": [ # The list of names of overlap metrics the report should include.
+          "A String",
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "pivoted": True or False, # Whether the report is pivoted or not. Defaults to true.
+        "dimension": "A String", # The dimension option.
+      },
+      "accountId": "A String", # The account ID to which this report belongs.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Creates a report.
+
+Args:
+  profileId: string, The DFA user profile ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Represents a Report resource.
+    "pathToConversionCriteria": { # The report criteria for a report of type "PATH_TO_CONVERSION".
+      "conversionDimensions": [ # The list of conversion dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "reportProperties": { # The properties of the report.
+        "clicksLookbackWindow": 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+        "pivotOnInteractionPath": True or False, # Enable pivoting on interaction path.
+        "impressionsLookbackWindow": 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+        "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+        "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+        "maximumInteractionGap": 42, # The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
+        "includeAttributedIPConversions": True or False, # Deprecated: has no effect.
+        "maximumClickInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+        "maximumImpressionInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+      },
+      "perInteractionDimensions": [ # The list of per interaction dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "activityFilters": [ # The list of 'dfa:activity' values to filter on.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "customRichMediaEvents": [ # The list of custom rich media events to include.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "customFloodlightVariables": [ # The list of custom floodlight variables the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+    },
+    "kind": "dfareporting#report", # The kind of resource this is, in this case dfareporting#report.
+    "subAccountId": "A String", # The subaccount ID to which this report belongs if applicable.
+    "name": "A String", # The name of the report.
+    "schedule": { # The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not "TODAY".
+      "startDate": "A String", # Start date of date range for which scheduled reports should be run.
+      "runsOnDayOfMonth": "A String", # Enum to define for "MONTHLY" scheduled reports whether reports should be repeated on the same day of the month as "startDate" or the same day of the week of the month.
+          # Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" would run subsequent reports on the first Monday of the month.
+      "every": 42, # Defines every how many days, weeks or months the report should be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or "MONTHLY".
+      "expirationDate": "A String", # The expiration date when the scheduled report stops running.
+      "active": True or False, # Whether the schedule is active or not. Must be set to either true or false.
+      "repeats": "A String", # The interval for which the report is repeated. Note:
+          # - "DAILY" also requires field "every" to be set.
+          # - "WEEKLY" also requires fields "every" and "repeatsOnWeekDays" to be set.
+          # - "MONTHLY" also requires fields "every" and "runsOnDayOfMonth" to be set.
+      "repeatsOnWeekDays": [ # List of week days "WEEKLY" on which scheduled reports should run.
+        "A String",
+      ],
+    },
+    "format": "A String", # The output format of the report. If not specified, default format is "CSV". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. "CSV" will then be the fallback format.
+    "ownerProfileId": "A String", # The user profile id of the owner of this report.
+    "reachCriteria": { # The report criteria for a report of type "REACH".
+      "activities": { # Represents an activity group. # Activity group.
+        "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+        "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "metricNames": [ # List of names of floodlight activity metrics.
+          "A String",
+        ],
+      },
+      "dimensions": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "reachByFrequencyMetricNames": [ # The list of names of  Reach By Frequency metrics the report should include.
+        "A String",
+      ],
+      "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+        "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+        "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+      },
+      "enableAllDimensionCombinations": True or False, # Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last three months.
+    },
+    "floodlightCriteria": { # The report criteria for a report of type "FLOODLIGHT".
+      "dimensions": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "customRichMediaEvents": [ # The list of custom rich media events to include.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "reportProperties": { # The properties of the report.
+        "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+        "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+        "includeAttributedIPConversions": True or False, # Include conversions that have no cookie, but do have an exposure path.
+      },
+    },
+    "fileName": "A String", # The filename used when generating report files for this report.
+    "delivery": { # The report's email delivery settings.
+      "message": "A String", # The message to be sent with each email.
+      "emailOwnerDeliveryType": "A String", # The type of delivery for the owner to receive, if enabled.
+      "recipients": [ # The list of recipients to which to email the report.
+        { # Represents a recipient.
+          "kind": "dfareporting#recipient", # The kind of resource this is, in this case dfareporting#recipient.
+          "deliveryType": "A String", # The delivery type for the recipient.
+          "email": "A String", # The email address of the recipient.
+        },
+      ],
+      "emailOwner": True or False, # Whether the report should be emailed to the report owner.
+    },
+    "etag": "A String", # The eTag of this response for caching purposes.
+    "criteria": { # The report criteria for a report of type "STANDARD".
+      "activities": { # Represents an activity group. # Activity group.
+        "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+        "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "metricNames": [ # List of names of floodlight activity metrics.
+          "A String",
+        ],
+      },
+      "dimensions": [ # The list of standard dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range for which this report should be run.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+        "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+        "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+      },
+    },
+    "id": "A String", # The unique ID identifying this report resource.
+    "lastModifiedTime": "A String", # The timestamp (in milliseconds since epoch) of when this report was last modified.
+    "type": "A String", # The type of the report.
+    "crossDimensionReachCriteria": { # The report criteria for a report of type "CROSS_DIMENSION_REACH".
+      "breakdown": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "overlapMetricNames": [ # The list of names of overlap metrics the report should include.
+        "A String",
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "pivoted": True or False, # Whether the report is pivoted or not. Defaults to true.
+      "dimension": "A String", # The dimension option.
+    },
+    "accountId": "A String", # The account ID to which this report belongs.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Represents a Report resource.
+      "pathToConversionCriteria": { # The report criteria for a report of type "PATH_TO_CONVERSION".
+        "conversionDimensions": [ # The list of conversion dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "reportProperties": { # The properties of the report.
+          "clicksLookbackWindow": 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          "pivotOnInteractionPath": True or False, # Enable pivoting on interaction path.
+          "impressionsLookbackWindow": 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+          "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+          "maximumInteractionGap": 42, # The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
+          "includeAttributedIPConversions": True or False, # Deprecated: has no effect.
+          "maximumClickInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+          "maximumImpressionInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+        },
+        "perInteractionDimensions": [ # The list of per interaction dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "activityFilters": [ # The list of 'dfa:activity' values to filter on.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "customRichMediaEvents": [ # The list of custom rich media events to include.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "customFloodlightVariables": [ # The list of custom floodlight variables the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+      },
+      "kind": "dfareporting#report", # The kind of resource this is, in this case dfareporting#report.
+      "subAccountId": "A String", # The subaccount ID to which this report belongs if applicable.
+      "name": "A String", # The name of the report.
+      "schedule": { # The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not "TODAY".
+        "startDate": "A String", # Start date of date range for which scheduled reports should be run.
+        "runsOnDayOfMonth": "A String", # Enum to define for "MONTHLY" scheduled reports whether reports should be repeated on the same day of the month as "startDate" or the same day of the week of the month.
+            # Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" would run subsequent reports on the first Monday of the month.
+        "every": 42, # Defines every how many days, weeks or months the report should be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or "MONTHLY".
+        "expirationDate": "A String", # The expiration date when the scheduled report stops running.
+        "active": True or False, # Whether the schedule is active or not. Must be set to either true or false.
+        "repeats": "A String", # The interval for which the report is repeated. Note:
+            # - "DAILY" also requires field "every" to be set.
+            # - "WEEKLY" also requires fields "every" and "repeatsOnWeekDays" to be set.
+            # - "MONTHLY" also requires fields "every" and "runsOnDayOfMonth" to be set.
+        "repeatsOnWeekDays": [ # List of week days "WEEKLY" on which scheduled reports should run.
+          "A String",
+        ],
+      },
+      "format": "A String", # The output format of the report. If not specified, default format is "CSV". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. "CSV" will then be the fallback format.
+      "ownerProfileId": "A String", # The user profile id of the owner of this report.
+      "reachCriteria": { # The report criteria for a report of type "REACH".
+        "activities": { # Represents an activity group. # Activity group.
+          "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+          "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+          "metricNames": [ # List of names of floodlight activity metrics.
+            "A String",
+          ],
+        },
+        "dimensions": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "reachByFrequencyMetricNames": [ # The list of names of  Reach By Frequency metrics the report should include.
+          "A String",
+        ],
+        "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+          "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+          "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+        },
+        "enableAllDimensionCombinations": True or False, # Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last three months.
+      },
+      "floodlightCriteria": { # The report criteria for a report of type "FLOODLIGHT".
+        "dimensions": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "customRichMediaEvents": [ # The list of custom rich media events to include.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "reportProperties": { # The properties of the report.
+          "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+          "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+          "includeAttributedIPConversions": True or False, # Include conversions that have no cookie, but do have an exposure path.
+        },
+      },
+      "fileName": "A String", # The filename used when generating report files for this report.
+      "delivery": { # The report's email delivery settings.
+        "message": "A String", # The message to be sent with each email.
+        "emailOwnerDeliveryType": "A String", # The type of delivery for the owner to receive, if enabled.
+        "recipients": [ # The list of recipients to which to email the report.
+          { # Represents a recipient.
+            "kind": "dfareporting#recipient", # The kind of resource this is, in this case dfareporting#recipient.
+            "deliveryType": "A String", # The delivery type for the recipient.
+            "email": "A String", # The email address of the recipient.
+          },
+        ],
+        "emailOwner": True or False, # Whether the report should be emailed to the report owner.
+      },
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "criteria": { # The report criteria for a report of type "STANDARD".
+        "activities": { # Represents an activity group. # Activity group.
+          "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+          "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+          "metricNames": [ # List of names of floodlight activity metrics.
+            "A String",
+          ],
+        },
+        "dimensions": [ # The list of standard dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range for which this report should be run.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+          "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+          "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+        },
+      },
+      "id": "A String", # The unique ID identifying this report resource.
+      "lastModifiedTime": "A String", # The timestamp (in milliseconds since epoch) of when this report was last modified.
+      "type": "A String", # The type of the report.
+      "crossDimensionReachCriteria": { # The report criteria for a report of type "CROSS_DIMENSION_REACH".
+        "breakdown": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "overlapMetricNames": [ # The list of names of overlap metrics the report should include.
+          "A String",
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "pivoted": True or False, # Whether the report is pivoted or not. Defaults to true.
+        "dimension": "A String", # The dimension option.
+      },
+      "accountId": "A String", # The account ID to which this report belongs.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, pageToken=None, maxResults=None, sortOrder=None, sortField=None, scope=None)</code>
+  <pre>Retrieves list of reports.
+
+Args:
+  profileId: string, The DFA user profile ID. (required)
+  pageToken: string, The value of the nextToken from the previous result page.
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is 'DESCENDING'.
+    Allowed values
+      ASCENDING - Ascending order.
+      DESCENDING - Descending order.
+  sortField: string, The field by which to sort the list.
+    Allowed values
+      ID - Sort by report ID.
+      LAST_MODIFIED_TIME - Sort by 'lastModifiedTime' field.
+      NAME - Sort by name of reports.
+  scope: string, The scope that defines which results are returned, default is 'MINE'.
+    Allowed values
+      ALL - All reports in account.
+      MINE - My reports.
+
+Returns:
+  An object of the form:
+
+    { # Represents the list of reports.
+    "nextPageToken": "A String", # Continuation token used to page through reports. To retrieve the next page of results, set the next request's "pageToken" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted.
+    "items": [ # The reports returned in this response.
+      { # Represents a Report resource.
+          "pathToConversionCriteria": { # The report criteria for a report of type "PATH_TO_CONVERSION".
+            "conversionDimensions": [ # The list of conversion dimensions the report should include.
+              { # Represents a sorted dimension.
+                "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+                "name": "A String", # The name of the dimension.
+                "sortOrder": "A String", # An optional sort order for the dimension column.
+              },
+            ],
+            "metricNames": [ # The list of names of metrics the report should include.
+              "A String",
+            ],
+            "dateRange": { # Represents a date range. # The date range this report should be run for.
+              "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+              "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+            },
+            "reportProperties": { # The properties of the report.
+              "clicksLookbackWindow": 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+              "pivotOnInteractionPath": True or False, # Enable pivoting on interaction path.
+              "impressionsLookbackWindow": 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+              "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+              "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+              "maximumInteractionGap": 42, # The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
+              "includeAttributedIPConversions": True or False, # Deprecated: has no effect.
+              "maximumClickInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+              "maximumImpressionInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+            },
+            "perInteractionDimensions": [ # The list of per interaction dimensions the report should include.
+              { # Represents a sorted dimension.
+                "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+                "name": "A String", # The name of the dimension.
+                "sortOrder": "A String", # An optional sort order for the dimension column.
+              },
+            ],
+            "activityFilters": [ # The list of 'dfa:activity' values to filter on.
+              { # Represents a DimensionValue resource.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+            ],
+            "customRichMediaEvents": [ # The list of custom rich media events to include.
+              { # Represents a DimensionValue resource.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+            ],
+            "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+            "customFloodlightVariables": [ # The list of custom floodlight variables the report should include.
+              { # Represents a sorted dimension.
+                "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+                "name": "A String", # The name of the dimension.
+                "sortOrder": "A String", # An optional sort order for the dimension column.
+              },
+            ],
+          },
+          "kind": "dfareporting#report", # The kind of resource this is, in this case dfareporting#report.
+          "subAccountId": "A String", # The subaccount ID to which this report belongs if applicable.
+          "name": "A String", # The name of the report.
+          "schedule": { # The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not "TODAY".
+            "startDate": "A String", # Start date of date range for which scheduled reports should be run.
+            "runsOnDayOfMonth": "A String", # Enum to define for "MONTHLY" scheduled reports whether reports should be repeated on the same day of the month as "startDate" or the same day of the week of the month.
+                # Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" would run subsequent reports on the first Monday of the month.
+            "every": 42, # Defines every how many days, weeks or months the report should be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or "MONTHLY".
+            "expirationDate": "A String", # The expiration date when the scheduled report stops running.
+            "active": True or False, # Whether the schedule is active or not. Must be set to either true or false.
+            "repeats": "A String", # The interval for which the report is repeated. Note:
+                # - "DAILY" also requires field "every" to be set.
+                # - "WEEKLY" also requires fields "every" and "repeatsOnWeekDays" to be set.
+                # - "MONTHLY" also requires fields "every" and "runsOnDayOfMonth" to be set.
+            "repeatsOnWeekDays": [ # List of week days "WEEKLY" on which scheduled reports should run.
+              "A String",
+            ],
+          },
+          "format": "A String", # The output format of the report. If not specified, default format is "CSV". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. "CSV" will then be the fallback format.
+          "ownerProfileId": "A String", # The user profile id of the owner of this report.
+          "reachCriteria": { # The report criteria for a report of type "REACH".
+            "activities": { # Represents an activity group. # Activity group.
+              "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+              "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+                { # Represents a DimensionValue resource.
+                  "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                  "value": "A String", # The value of the dimension.
+                  "dimensionName": "A String", # The name of the dimension.
+                  "etag": "A String", # The eTag of this response for caching purposes.
+                  "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                  "id": "A String", # The ID associated with the value if available.
+                },
+              ],
+              "metricNames": [ # List of names of floodlight activity metrics.
+                "A String",
+              ],
+            },
+            "dimensions": [ # The list of dimensions the report should include.
+              { # Represents a sorted dimension.
+                "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+                "name": "A String", # The name of the dimension.
+                "sortOrder": "A String", # An optional sort order for the dimension column.
+              },
+            ],
+            "metricNames": [ # The list of names of metrics the report should include.
+              "A String",
+            ],
+            "dateRange": { # Represents a date range. # The date range this report should be run for.
+              "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+              "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+            },
+            "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+                # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+              { # Represents a DimensionValue resource.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+            ],
+            "reachByFrequencyMetricNames": [ # The list of names of  Reach By Frequency metrics the report should include.
+              "A String",
+            ],
+            "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+              "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+              "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+                { # Represents a DimensionValue resource.
+                  "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                  "value": "A String", # The value of the dimension.
+                  "dimensionName": "A String", # The name of the dimension.
+                  "etag": "A String", # The eTag of this response for caching purposes.
+                  "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                  "id": "A String", # The ID associated with the value if available.
+                },
+              ],
+            },
+            "enableAllDimensionCombinations": True or False, # Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last three months.
+          },
+          "floodlightCriteria": { # The report criteria for a report of type "FLOODLIGHT".
+            "dimensions": [ # The list of dimensions the report should include.
+              { # Represents a sorted dimension.
+                "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+                "name": "A String", # The name of the dimension.
+                "sortOrder": "A String", # An optional sort order for the dimension column.
+              },
+            ],
+            "metricNames": [ # The list of names of metrics the report should include.
+              "A String",
+            ],
+            "dateRange": { # Represents a date range. # The date range this report should be run for.
+              "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+              "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+            },
+            "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+                # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+              { # Represents a DimensionValue resource.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+            ],
+            "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+            "customRichMediaEvents": [ # The list of custom rich media events to include.
+              { # Represents a DimensionValue resource.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+            ],
+            "reportProperties": { # The properties of the report.
+              "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+              "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+              "includeAttributedIPConversions": True or False, # Include conversions that have no cookie, but do have an exposure path.
+            },
+          },
+          "fileName": "A String", # The filename used when generating report files for this report.
+          "delivery": { # The report's email delivery settings.
+            "message": "A String", # The message to be sent with each email.
+            "emailOwnerDeliveryType": "A String", # The type of delivery for the owner to receive, if enabled.
+            "recipients": [ # The list of recipients to which to email the report.
+              { # Represents a recipient.
+                "kind": "dfareporting#recipient", # The kind of resource this is, in this case dfareporting#recipient.
+                "deliveryType": "A String", # The delivery type for the recipient.
+                "email": "A String", # The email address of the recipient.
+              },
+            ],
+            "emailOwner": True or False, # Whether the report should be emailed to the report owner.
+          },
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "criteria": { # The report criteria for a report of type "STANDARD".
+            "activities": { # Represents an activity group. # Activity group.
+              "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+              "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+                { # Represents a DimensionValue resource.
+                  "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                  "value": "A String", # The value of the dimension.
+                  "dimensionName": "A String", # The name of the dimension.
+                  "etag": "A String", # The eTag of this response for caching purposes.
+                  "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                  "id": "A String", # The ID associated with the value if available.
+                },
+              ],
+              "metricNames": [ # List of names of floodlight activity metrics.
+                "A String",
+              ],
+            },
+            "dimensions": [ # The list of standard dimensions the report should include.
+              { # Represents a sorted dimension.
+                "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+                "name": "A String", # The name of the dimension.
+                "sortOrder": "A String", # An optional sort order for the dimension column.
+              },
+            ],
+            "metricNames": [ # The list of names of metrics the report should include.
+              "A String",
+            ],
+            "dateRange": { # Represents a date range. # The date range for which this report should be run.
+              "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+              "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+            },
+            "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+                # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+              { # Represents a DimensionValue resource.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+            ],
+            "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+              "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+              "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+                { # Represents a DimensionValue resource.
+                  "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                  "value": "A String", # The value of the dimension.
+                  "dimensionName": "A String", # The name of the dimension.
+                  "etag": "A String", # The eTag of this response for caching purposes.
+                  "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                  "id": "A String", # The ID associated with the value if available.
+                },
+              ],
+            },
+          },
+          "id": "A String", # The unique ID identifying this report resource.
+          "lastModifiedTime": "A String", # The timestamp (in milliseconds since epoch) of when this report was last modified.
+          "type": "A String", # The type of the report.
+          "crossDimensionReachCriteria": { # The report criteria for a report of type "CROSS_DIMENSION_REACH".
+            "breakdown": [ # The list of dimensions the report should include.
+              { # Represents a sorted dimension.
+                "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+                "name": "A String", # The name of the dimension.
+                "sortOrder": "A String", # An optional sort order for the dimension column.
+              },
+            ],
+            "overlapMetricNames": [ # The list of names of overlap metrics the report should include.
+              "A String",
+            ],
+            "metricNames": [ # The list of names of metrics the report should include.
+              "A String",
+            ],
+            "dateRange": { # Represents a date range. # The date range this report should be run for.
+              "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+              "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+              "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+            },
+            "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+              { # Represents a DimensionValue resource.
+                "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+                "value": "A String", # The value of the dimension.
+                "dimensionName": "A String", # The name of the dimension.
+                "etag": "A String", # The eTag of this response for caching purposes.
+                "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+                "id": "A String", # The ID associated with the value if available.
+              },
+            ],
+            "pivoted": True or False, # Whether the report is pivoted or not. Defaults to true.
+            "dimension": "A String", # The dimension option.
+          },
+          "accountId": "A String", # The account ID to which this report belongs.
+        },
+    ],
+    "kind": "dfareporting#reportList", # The kind of list this is, in this case dfareporting#reportList.
+    "etag": "A String", # The eTag of this response for caching purposes.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, reportId, body)</code>
+  <pre>Updates a report. This method supports patch semantics.
+
+Args:
+  profileId: string, The DFA user profile ID. (required)
+  reportId: string, The ID of the report. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Represents a Report resource.
+    "pathToConversionCriteria": { # The report criteria for a report of type "PATH_TO_CONVERSION".
+      "conversionDimensions": [ # The list of conversion dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "reportProperties": { # The properties of the report.
+        "clicksLookbackWindow": 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+        "pivotOnInteractionPath": True or False, # Enable pivoting on interaction path.
+        "impressionsLookbackWindow": 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+        "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+        "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+        "maximumInteractionGap": 42, # The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
+        "includeAttributedIPConversions": True or False, # Deprecated: has no effect.
+        "maximumClickInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+        "maximumImpressionInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+      },
+      "perInteractionDimensions": [ # The list of per interaction dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "activityFilters": [ # The list of 'dfa:activity' values to filter on.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "customRichMediaEvents": [ # The list of custom rich media events to include.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "customFloodlightVariables": [ # The list of custom floodlight variables the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+    },
+    "kind": "dfareporting#report", # The kind of resource this is, in this case dfareporting#report.
+    "subAccountId": "A String", # The subaccount ID to which this report belongs if applicable.
+    "name": "A String", # The name of the report.
+    "schedule": { # The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not "TODAY".
+      "startDate": "A String", # Start date of date range for which scheduled reports should be run.
+      "runsOnDayOfMonth": "A String", # Enum to define for "MONTHLY" scheduled reports whether reports should be repeated on the same day of the month as "startDate" or the same day of the week of the month.
+          # Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" would run subsequent reports on the first Monday of the month.
+      "every": 42, # Defines every how many days, weeks or months the report should be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or "MONTHLY".
+      "expirationDate": "A String", # The expiration date when the scheduled report stops running.
+      "active": True or False, # Whether the schedule is active or not. Must be set to either true or false.
+      "repeats": "A String", # The interval for which the report is repeated. Note:
+          # - "DAILY" also requires field "every" to be set.
+          # - "WEEKLY" also requires fields "every" and "repeatsOnWeekDays" to be set.
+          # - "MONTHLY" also requires fields "every" and "runsOnDayOfMonth" to be set.
+      "repeatsOnWeekDays": [ # List of week days "WEEKLY" on which scheduled reports should run.
+        "A String",
+      ],
+    },
+    "format": "A String", # The output format of the report. If not specified, default format is "CSV". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. "CSV" will then be the fallback format.
+    "ownerProfileId": "A String", # The user profile id of the owner of this report.
+    "reachCriteria": { # The report criteria for a report of type "REACH".
+      "activities": { # Represents an activity group. # Activity group.
+        "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+        "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "metricNames": [ # List of names of floodlight activity metrics.
+          "A String",
+        ],
+      },
+      "dimensions": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "reachByFrequencyMetricNames": [ # The list of names of  Reach By Frequency metrics the report should include.
+        "A String",
+      ],
+      "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+        "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+        "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+      },
+      "enableAllDimensionCombinations": True or False, # Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last three months.
+    },
+    "floodlightCriteria": { # The report criteria for a report of type "FLOODLIGHT".
+      "dimensions": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "customRichMediaEvents": [ # The list of custom rich media events to include.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "reportProperties": { # The properties of the report.
+        "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+        "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+        "includeAttributedIPConversions": True or False, # Include conversions that have no cookie, but do have an exposure path.
+      },
+    },
+    "fileName": "A String", # The filename used when generating report files for this report.
+    "delivery": { # The report's email delivery settings.
+      "message": "A String", # The message to be sent with each email.
+      "emailOwnerDeliveryType": "A String", # The type of delivery for the owner to receive, if enabled.
+      "recipients": [ # The list of recipients to which to email the report.
+        { # Represents a recipient.
+          "kind": "dfareporting#recipient", # The kind of resource this is, in this case dfareporting#recipient.
+          "deliveryType": "A String", # The delivery type for the recipient.
+          "email": "A String", # The email address of the recipient.
+        },
+      ],
+      "emailOwner": True or False, # Whether the report should be emailed to the report owner.
+    },
+    "etag": "A String", # The eTag of this response for caching purposes.
+    "criteria": { # The report criteria for a report of type "STANDARD".
+      "activities": { # Represents an activity group. # Activity group.
+        "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+        "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "metricNames": [ # List of names of floodlight activity metrics.
+          "A String",
+        ],
+      },
+      "dimensions": [ # The list of standard dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range for which this report should be run.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+        "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+        "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+      },
+    },
+    "id": "A String", # The unique ID identifying this report resource.
+    "lastModifiedTime": "A String", # The timestamp (in milliseconds since epoch) of when this report was last modified.
+    "type": "A String", # The type of the report.
+    "crossDimensionReachCriteria": { # The report criteria for a report of type "CROSS_DIMENSION_REACH".
+      "breakdown": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "overlapMetricNames": [ # The list of names of overlap metrics the report should include.
+        "A String",
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "pivoted": True or False, # Whether the report is pivoted or not. Defaults to true.
+      "dimension": "A String", # The dimension option.
+    },
+    "accountId": "A String", # The account ID to which this report belongs.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Represents a Report resource.
+      "pathToConversionCriteria": { # The report criteria for a report of type "PATH_TO_CONVERSION".
+        "conversionDimensions": [ # The list of conversion dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "reportProperties": { # The properties of the report.
+          "clicksLookbackWindow": 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          "pivotOnInteractionPath": True or False, # Enable pivoting on interaction path.
+          "impressionsLookbackWindow": 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+          "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+          "maximumInteractionGap": 42, # The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
+          "includeAttributedIPConversions": True or False, # Deprecated: has no effect.
+          "maximumClickInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+          "maximumImpressionInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+        },
+        "perInteractionDimensions": [ # The list of per interaction dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "activityFilters": [ # The list of 'dfa:activity' values to filter on.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "customRichMediaEvents": [ # The list of custom rich media events to include.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "customFloodlightVariables": [ # The list of custom floodlight variables the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+      },
+      "kind": "dfareporting#report", # The kind of resource this is, in this case dfareporting#report.
+      "subAccountId": "A String", # The subaccount ID to which this report belongs if applicable.
+      "name": "A String", # The name of the report.
+      "schedule": { # The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not "TODAY".
+        "startDate": "A String", # Start date of date range for which scheduled reports should be run.
+        "runsOnDayOfMonth": "A String", # Enum to define for "MONTHLY" scheduled reports whether reports should be repeated on the same day of the month as "startDate" or the same day of the week of the month.
+            # Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" would run subsequent reports on the first Monday of the month.
+        "every": 42, # Defines every how many days, weeks or months the report should be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or "MONTHLY".
+        "expirationDate": "A String", # The expiration date when the scheduled report stops running.
+        "active": True or False, # Whether the schedule is active or not. Must be set to either true or false.
+        "repeats": "A String", # The interval for which the report is repeated. Note:
+            # - "DAILY" also requires field "every" to be set.
+            # - "WEEKLY" also requires fields "every" and "repeatsOnWeekDays" to be set.
+            # - "MONTHLY" also requires fields "every" and "runsOnDayOfMonth" to be set.
+        "repeatsOnWeekDays": [ # List of week days "WEEKLY" on which scheduled reports should run.
+          "A String",
+        ],
+      },
+      "format": "A String", # The output format of the report. If not specified, default format is "CSV". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. "CSV" will then be the fallback format.
+      "ownerProfileId": "A String", # The user profile id of the owner of this report.
+      "reachCriteria": { # The report criteria for a report of type "REACH".
+        "activities": { # Represents an activity group. # Activity group.
+          "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+          "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+          "metricNames": [ # List of names of floodlight activity metrics.
+            "A String",
+          ],
+        },
+        "dimensions": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "reachByFrequencyMetricNames": [ # The list of names of  Reach By Frequency metrics the report should include.
+          "A String",
+        ],
+        "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+          "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+          "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+        },
+        "enableAllDimensionCombinations": True or False, # Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last three months.
+      },
+      "floodlightCriteria": { # The report criteria for a report of type "FLOODLIGHT".
+        "dimensions": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "customRichMediaEvents": [ # The list of custom rich media events to include.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "reportProperties": { # The properties of the report.
+          "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+          "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+          "includeAttributedIPConversions": True or False, # Include conversions that have no cookie, but do have an exposure path.
+        },
+      },
+      "fileName": "A String", # The filename used when generating report files for this report.
+      "delivery": { # The report's email delivery settings.
+        "message": "A String", # The message to be sent with each email.
+        "emailOwnerDeliveryType": "A String", # The type of delivery for the owner to receive, if enabled.
+        "recipients": [ # The list of recipients to which to email the report.
+          { # Represents a recipient.
+            "kind": "dfareporting#recipient", # The kind of resource this is, in this case dfareporting#recipient.
+            "deliveryType": "A String", # The delivery type for the recipient.
+            "email": "A String", # The email address of the recipient.
+          },
+        ],
+        "emailOwner": True or False, # Whether the report should be emailed to the report owner.
+      },
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "criteria": { # The report criteria for a report of type "STANDARD".
+        "activities": { # Represents an activity group. # Activity group.
+          "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+          "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+          "metricNames": [ # List of names of floodlight activity metrics.
+            "A String",
+          ],
+        },
+        "dimensions": [ # The list of standard dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range for which this report should be run.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+          "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+          "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+        },
+      },
+      "id": "A String", # The unique ID identifying this report resource.
+      "lastModifiedTime": "A String", # The timestamp (in milliseconds since epoch) of when this report was last modified.
+      "type": "A String", # The type of the report.
+      "crossDimensionReachCriteria": { # The report criteria for a report of type "CROSS_DIMENSION_REACH".
+        "breakdown": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "overlapMetricNames": [ # The list of names of overlap metrics the report should include.
+          "A String",
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "pivoted": True or False, # Whether the report is pivoted or not. Defaults to true.
+        "dimension": "A String", # The dimension option.
+      },
+      "accountId": "A String", # The account ID to which this report belongs.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="run">run(profileId, reportId, synchronous=None)</code>
+  <pre>Runs a report.
+
+Args:
+  profileId: string, The DFA profile ID. (required)
+  reportId: string, The ID of the report. (required)
+  synchronous: boolean, If set and true, tries to run the report synchronously.
+
+Returns:
+  An object of the form:
+
+    { # Represents a File resource. A file contains the metadata for a report run. It shows the status of the run and holds the URLs to the generated report data if the run is finished and the status is "REPORT_AVAILABLE".
+    "status": "A String", # The status of the report file.
+    "kind": "dfareporting#file", # The kind of resource this is, in this case dfareporting#file.
+    "format": "A String", # The output format of the report. Only available once the file is available.
+    "dateRange": { # Represents a date range. # The date range for which the file has report data. The date range will always be the absolute date range for which the report is run.
+      "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+      "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+      "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+      "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+    },
+    "fileName": "A String", # The filename of the file.
+    "etag": "A String", # The eTag of this response for caching purposes.
+    "reportId": "A String", # The ID of the report this file was generated from.
+    "urls": { # The URLs where the completed report file can be downloaded.
+      "browserUrl": "A String", # The URL for downloading the report data through a browser.
+      "apiUrl": "A String", # The URL for downloading the report data through the API.
+    },
+    "lastModifiedTime": "A String", # The timestamp in milliseconds since epoch when this file was last modified.
+    "id": "A String", # The unique ID of this report file.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, reportId, body)</code>
+  <pre>Updates a report.
+
+Args:
+  profileId: string, The DFA user profile ID. (required)
+  reportId: string, The ID of the report. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Represents a Report resource.
+    "pathToConversionCriteria": { # The report criteria for a report of type "PATH_TO_CONVERSION".
+      "conversionDimensions": [ # The list of conversion dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "reportProperties": { # The properties of the report.
+        "clicksLookbackWindow": 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+        "pivotOnInteractionPath": True or False, # Enable pivoting on interaction path.
+        "impressionsLookbackWindow": 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+        "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+        "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+        "maximumInteractionGap": 42, # The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
+        "includeAttributedIPConversions": True or False, # Deprecated: has no effect.
+        "maximumClickInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+        "maximumImpressionInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+      },
+      "perInteractionDimensions": [ # The list of per interaction dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "activityFilters": [ # The list of 'dfa:activity' values to filter on.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "customRichMediaEvents": [ # The list of custom rich media events to include.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "customFloodlightVariables": [ # The list of custom floodlight variables the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+    },
+    "kind": "dfareporting#report", # The kind of resource this is, in this case dfareporting#report.
+    "subAccountId": "A String", # The subaccount ID to which this report belongs if applicable.
+    "name": "A String", # The name of the report.
+    "schedule": { # The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not "TODAY".
+      "startDate": "A String", # Start date of date range for which scheduled reports should be run.
+      "runsOnDayOfMonth": "A String", # Enum to define for "MONTHLY" scheduled reports whether reports should be repeated on the same day of the month as "startDate" or the same day of the week of the month.
+          # Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" would run subsequent reports on the first Monday of the month.
+      "every": 42, # Defines every how many days, weeks or months the report should be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or "MONTHLY".
+      "expirationDate": "A String", # The expiration date when the scheduled report stops running.
+      "active": True or False, # Whether the schedule is active or not. Must be set to either true or false.
+      "repeats": "A String", # The interval for which the report is repeated. Note:
+          # - "DAILY" also requires field "every" to be set.
+          # - "WEEKLY" also requires fields "every" and "repeatsOnWeekDays" to be set.
+          # - "MONTHLY" also requires fields "every" and "runsOnDayOfMonth" to be set.
+      "repeatsOnWeekDays": [ # List of week days "WEEKLY" on which scheduled reports should run.
+        "A String",
+      ],
+    },
+    "format": "A String", # The output format of the report. If not specified, default format is "CSV". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. "CSV" will then be the fallback format.
+    "ownerProfileId": "A String", # The user profile id of the owner of this report.
+    "reachCriteria": { # The report criteria for a report of type "REACH".
+      "activities": { # Represents an activity group. # Activity group.
+        "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+        "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "metricNames": [ # List of names of floodlight activity metrics.
+          "A String",
+        ],
+      },
+      "dimensions": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "reachByFrequencyMetricNames": [ # The list of names of  Reach By Frequency metrics the report should include.
+        "A String",
+      ],
+      "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+        "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+        "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+      },
+      "enableAllDimensionCombinations": True or False, # Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last three months.
+    },
+    "floodlightCriteria": { # The report criteria for a report of type "FLOODLIGHT".
+      "dimensions": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "customRichMediaEvents": [ # The list of custom rich media events to include.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "reportProperties": { # The properties of the report.
+        "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+        "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+        "includeAttributedIPConversions": True or False, # Include conversions that have no cookie, but do have an exposure path.
+      },
+    },
+    "fileName": "A String", # The filename used when generating report files for this report.
+    "delivery": { # The report's email delivery settings.
+      "message": "A String", # The message to be sent with each email.
+      "emailOwnerDeliveryType": "A String", # The type of delivery for the owner to receive, if enabled.
+      "recipients": [ # The list of recipients to which to email the report.
+        { # Represents a recipient.
+          "kind": "dfareporting#recipient", # The kind of resource this is, in this case dfareporting#recipient.
+          "deliveryType": "A String", # The delivery type for the recipient.
+          "email": "A String", # The email address of the recipient.
+        },
+      ],
+      "emailOwner": True or False, # Whether the report should be emailed to the report owner.
+    },
+    "etag": "A String", # The eTag of this response for caching purposes.
+    "criteria": { # The report criteria for a report of type "STANDARD".
+      "activities": { # Represents an activity group. # Activity group.
+        "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+        "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "metricNames": [ # List of names of floodlight activity metrics.
+          "A String",
+        ],
+      },
+      "dimensions": [ # The list of standard dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range for which this report should be run.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+        "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+        "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+      },
+    },
+    "id": "A String", # The unique ID identifying this report resource.
+    "lastModifiedTime": "A String", # The timestamp (in milliseconds since epoch) of when this report was last modified.
+    "type": "A String", # The type of the report.
+    "crossDimensionReachCriteria": { # The report criteria for a report of type "CROSS_DIMENSION_REACH".
+      "breakdown": [ # The list of dimensions the report should include.
+        { # Represents a sorted dimension.
+          "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+          "name": "A String", # The name of the dimension.
+          "sortOrder": "A String", # An optional sort order for the dimension column.
+        },
+      ],
+      "overlapMetricNames": [ # The list of names of overlap metrics the report should include.
+        "A String",
+      ],
+      "metricNames": [ # The list of names of metrics the report should include.
+        "A String",
+      ],
+      "dateRange": { # Represents a date range. # The date range this report should be run for.
+        "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+        "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+        "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+      },
+      "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+        { # Represents a DimensionValue resource.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+      ],
+      "pivoted": True or False, # Whether the report is pivoted or not. Defaults to true.
+      "dimension": "A String", # The dimension option.
+    },
+    "accountId": "A String", # The account ID to which this report belongs.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Represents a Report resource.
+      "pathToConversionCriteria": { # The report criteria for a report of type "PATH_TO_CONVERSION".
+        "conversionDimensions": [ # The list of conversion dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "reportProperties": { # The properties of the report.
+          "clicksLookbackWindow": 42, # DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          "pivotOnInteractionPath": True or False, # Enable pivoting on interaction path.
+          "impressionsLookbackWindow": 42, # DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.
+          "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+          "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+          "maximumInteractionGap": 42, # The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.
+          "includeAttributedIPConversions": True or False, # Deprecated: has no effect.
+          "maximumClickInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+          "maximumImpressionInteractions": 42, # The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.
+        },
+        "perInteractionDimensions": [ # The list of per interaction dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "activityFilters": [ # The list of 'dfa:activity' values to filter on.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "customRichMediaEvents": [ # The list of custom rich media events to include.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "customFloodlightVariables": [ # The list of custom floodlight variables the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+      },
+      "kind": "dfareporting#report", # The kind of resource this is, in this case dfareporting#report.
+      "subAccountId": "A String", # The subaccount ID to which this report belongs if applicable.
+      "name": "A String", # The name of the report.
+      "schedule": { # The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not "TODAY".
+        "startDate": "A String", # Start date of date range for which scheduled reports should be run.
+        "runsOnDayOfMonth": "A String", # Enum to define for "MONTHLY" scheduled reports whether reports should be repeated on the same day of the month as "startDate" or the same day of the week of the month.
+            # Example: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" would run subsequent reports on the first Monday of the month.
+        "every": 42, # Defines every how many days, weeks or months the report should be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or "MONTHLY".
+        "expirationDate": "A String", # The expiration date when the scheduled report stops running.
+        "active": True or False, # Whether the schedule is active or not. Must be set to either true or false.
+        "repeats": "A String", # The interval for which the report is repeated. Note:
+            # - "DAILY" also requires field "every" to be set.
+            # - "WEEKLY" also requires fields "every" and "repeatsOnWeekDays" to be set.
+            # - "MONTHLY" also requires fields "every" and "runsOnDayOfMonth" to be set.
+        "repeatsOnWeekDays": [ # List of week days "WEEKLY" on which scheduled reports should run.
+          "A String",
+        ],
+      },
+      "format": "A String", # The output format of the report. If not specified, default format is "CSV". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. "CSV" will then be the fallback format.
+      "ownerProfileId": "A String", # The user profile id of the owner of this report.
+      "reachCriteria": { # The report criteria for a report of type "REACH".
+        "activities": { # Represents an activity group. # Activity group.
+          "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+          "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+          "metricNames": [ # List of names of floodlight activity metrics.
+            "A String",
+          ],
+        },
+        "dimensions": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "reachByFrequencyMetricNames": [ # The list of names of  Reach By Frequency metrics the report should include.
+          "A String",
+        ],
+        "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+          "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+          "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+        },
+        "enableAllDimensionCombinations": True or False, # Whether to enable all reach dimension combinations in the report. Defaults to false. If enabled, the date range of the report should be within the last three months.
+      },
+      "floodlightCriteria": { # The report criteria for a report of type "FLOODLIGHT".
+        "dimensions": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "floodlightConfigId": { # Represents a DimensionValue resource. # The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "customRichMediaEvents": [ # The list of custom rich media events to include.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "reportProperties": { # The properties of the report.
+          "includeUnattributedIPConversions": True or False, # Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion.
+          "includeUnattributedCookieConversions": True or False, # Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window.
+          "includeAttributedIPConversions": True or False, # Include conversions that have no cookie, but do have an exposure path.
+        },
+      },
+      "fileName": "A String", # The filename used when generating report files for this report.
+      "delivery": { # The report's email delivery settings.
+        "message": "A String", # The message to be sent with each email.
+        "emailOwnerDeliveryType": "A String", # The type of delivery for the owner to receive, if enabled.
+        "recipients": [ # The list of recipients to which to email the report.
+          { # Represents a recipient.
+            "kind": "dfareporting#recipient", # The kind of resource this is, in this case dfareporting#recipient.
+            "deliveryType": "A String", # The delivery type for the recipient.
+            "email": "A String", # The email address of the recipient.
+          },
+        ],
+        "emailOwner": True or False, # Whether the report should be emailed to the report owner.
+      },
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "criteria": { # The report criteria for a report of type "STANDARD".
+        "activities": { # Represents an activity group. # Activity group.
+          "kind": "dfareporting#activities", # The kind of resource this is, in this case dfareporting#activities.
+          "filters": [ # List of activity filters. The dimension values need to be all either of type "dfa:activity" or "dfa:activityGroup".
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+          "metricNames": [ # List of names of floodlight activity metrics.
+            "A String",
+          ],
+        },
+        "dimensions": [ # The list of standard dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range for which this report should be run.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+            # Filters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "customRichMediaEvents": { # Represents a Custom Rich Media Events group. # Custom Rich Media Events group.
+          "kind": "dfareporting#customRichMediaEvents", # The kind of resource this is, in this case dfareporting#customRichMediaEvents.
+          "filteredEventIds": [ # List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.
+            { # Represents a DimensionValue resource.
+              "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+              "value": "A String", # The value of the dimension.
+              "dimensionName": "A String", # The name of the dimension.
+              "etag": "A String", # The eTag of this response for caching purposes.
+              "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+              "id": "A String", # The ID associated with the value if available.
+            },
+          ],
+        },
+      },
+      "id": "A String", # The unique ID identifying this report resource.
+      "lastModifiedTime": "A String", # The timestamp (in milliseconds since epoch) of when this report was last modified.
+      "type": "A String", # The type of the report.
+      "crossDimensionReachCriteria": { # The report criteria for a report of type "CROSS_DIMENSION_REACH".
+        "breakdown": [ # The list of dimensions the report should include.
+          { # Represents a sorted dimension.
+            "kind": "dfareporting#sortedDimension", # The kind of resource this is, in this case dfareporting#sortedDimension.
+            "name": "A String", # The name of the dimension.
+            "sortOrder": "A String", # An optional sort order for the dimension column.
+          },
+        ],
+        "overlapMetricNames": [ # The list of names of overlap metrics the report should include.
+          "A String",
+        ],
+        "metricNames": [ # The list of names of metrics the report should include.
+          "A String",
+        ],
+        "dateRange": { # Represents a date range. # The date range this report should be run for.
+          "startDate": "A String", # The start date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "kind": "dfareporting#dateRange", # The kind of resource this is, in this case dfareporting#dateRange.
+          "endDate": "A String", # The end date of the date range, inclusive. A string of the format: "yyyy-MM-dd".
+          "relativeDateRange": "A String", # The date range relative to the date of when the report is run.
+        },
+        "dimensionFilters": [ # The list of filters on which dimensions are filtered.
+          { # Represents a DimensionValue resource.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+        ],
+        "pivoted": True or False, # Whether the report is pivoted or not. Defaults to true.
+        "dimension": "A String", # The dimension option.
+      },
+      "accountId": "A String", # The account ID to which this report belongs.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.sites.html b/docs/dyn/dfareporting_v2_5.sites.html
new file mode 100644
index 0000000..25f15ed
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.sites.html
@@ -0,0 +1,675 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.sites.html">sites</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one site by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new site.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, unmappedSite=None, campaignIds=None, acceptsInStreamVideoPlacements=None, pageToken=None, acceptsPublisherPaidPlacements=None, sortOrder=None, acceptsInterstitialPlacements=None, maxResults=None, adWordsSite=None, approved=None, searchString=None, subaccountId=None, directorySiteIds=None, sortField=None, ids=None)</a></code></p>
+<p class="firstline">Retrieves a list of sites, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing site. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing site.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one site by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Site ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a site.
+      "kind": "dfareporting#site", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#site".
+      "subaccountId": "A String", # Subaccount ID of this site. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteSettings": { # Site Settings # Site-wide settings.
+        "disableBrandSafeAds": True or False, # Whether brand safe ads are disabled for this site.
+        "activeViewOptOut": True or False, # Whether active view creatives are disabled for this site.
+        "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this site.
+          "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        },
+        "disableNewCookie": True or False, # Whether new cookies are disabled for this site.
+        "tagSetting": { # Tag Settings # Configuration settings for dynamic and image floodlight tags.
+          "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+          "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+          "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+          "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+        },
+        "creativeSettings": { # Creative Settings # Site-wide creative settings.
+          "iFrameHeader": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+          "iFrameFooter": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+        },
+        "videoActiveViewOptOut": True or False, # Whether Verification and ActiveView are disabled for in-stream video creatives on this site. The same setting videoActiveViewOptOut exists on the directory site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.
+      },
+      "approved": True or False, # Whether this site is approved.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteContacts": [ # Site contacts.
+        { # Site Contact
+          "firstName": "A String", # First name of this site contact.
+          "title": "A String", # Title or designation of this site contact.
+          "lastName": "A String", # Last name of this site contact.
+          "address": "A String", # Address of this site contact.
+          "email": "A String", # Email address of this site contact. This is a required field.
+          "phone": "A String", # Primary phone number of this site contact.
+          "contactType": "A String", # Site contact type.
+          "id": "A String", # ID of this site contact. This is a read-only, auto-generated field.
+        },
+      ],
+      "keyName": "A String", # Key name of this site. This is a read-only, auto-generated field.
+      "directorySiteId": "A String", # Directory site associated with this site. This is a required field that is read-only after insertion.
+      "id": "A String", # ID of this site. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this site. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new site.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a site.
+    "kind": "dfareporting#site", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#site".
+    "subaccountId": "A String", # Subaccount ID of this site. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.
+    "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "siteSettings": { # Site Settings # Site-wide settings.
+      "disableBrandSafeAds": True or False, # Whether brand safe ads are disabled for this site.
+      "activeViewOptOut": True or False, # Whether active view creatives are disabled for this site.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this site.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "disableNewCookie": True or False, # Whether new cookies are disabled for this site.
+      "tagSetting": { # Tag Settings # Configuration settings for dynamic and image floodlight tags.
+        "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+        "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+        "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+        "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+      },
+      "creativeSettings": { # Creative Settings # Site-wide creative settings.
+        "iFrameHeader": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+        "iFrameFooter": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+      },
+      "videoActiveViewOptOut": True or False, # Whether Verification and ActiveView are disabled for in-stream video creatives on this site. The same setting videoActiveViewOptOut exists on the directory site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.
+    },
+    "approved": True or False, # Whether this site is approved.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "siteContacts": [ # Site contacts.
+      { # Site Contact
+        "firstName": "A String", # First name of this site contact.
+        "title": "A String", # Title or designation of this site contact.
+        "lastName": "A String", # Last name of this site contact.
+        "address": "A String", # Address of this site contact.
+        "email": "A String", # Email address of this site contact. This is a required field.
+        "phone": "A String", # Primary phone number of this site contact.
+        "contactType": "A String", # Site contact type.
+        "id": "A String", # ID of this site contact. This is a read-only, auto-generated field.
+      },
+    ],
+    "keyName": "A String", # Key name of this site. This is a read-only, auto-generated field.
+    "directorySiteId": "A String", # Directory site associated with this site. This is a required field that is read-only after insertion.
+    "id": "A String", # ID of this site. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this site. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a site.
+      "kind": "dfareporting#site", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#site".
+      "subaccountId": "A String", # Subaccount ID of this site. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteSettings": { # Site Settings # Site-wide settings.
+        "disableBrandSafeAds": True or False, # Whether brand safe ads are disabled for this site.
+        "activeViewOptOut": True or False, # Whether active view creatives are disabled for this site.
+        "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this site.
+          "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        },
+        "disableNewCookie": True or False, # Whether new cookies are disabled for this site.
+        "tagSetting": { # Tag Settings # Configuration settings for dynamic and image floodlight tags.
+          "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+          "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+          "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+          "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+        },
+        "creativeSettings": { # Creative Settings # Site-wide creative settings.
+          "iFrameHeader": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+          "iFrameFooter": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+        },
+        "videoActiveViewOptOut": True or False, # Whether Verification and ActiveView are disabled for in-stream video creatives on this site. The same setting videoActiveViewOptOut exists on the directory site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.
+      },
+      "approved": True or False, # Whether this site is approved.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteContacts": [ # Site contacts.
+        { # Site Contact
+          "firstName": "A String", # First name of this site contact.
+          "title": "A String", # Title or designation of this site contact.
+          "lastName": "A String", # Last name of this site contact.
+          "address": "A String", # Address of this site contact.
+          "email": "A String", # Email address of this site contact. This is a required field.
+          "phone": "A String", # Primary phone number of this site contact.
+          "contactType": "A String", # Site contact type.
+          "id": "A String", # ID of this site contact. This is a read-only, auto-generated field.
+        },
+      ],
+      "keyName": "A String", # Key name of this site. This is a read-only, auto-generated field.
+      "directorySiteId": "A String", # Directory site associated with this site. This is a required field that is read-only after insertion.
+      "id": "A String", # ID of this site. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this site. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, unmappedSite=None, campaignIds=None, acceptsInStreamVideoPlacements=None, pageToken=None, acceptsPublisherPaidPlacements=None, sortOrder=None, acceptsInterstitialPlacements=None, maxResults=None, adWordsSite=None, approved=None, searchString=None, subaccountId=None, directorySiteIds=None, sortField=None, ids=None)</code>
+  <pre>Retrieves a list of sites, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  unmappedSite: boolean, Select only sites that have not been mapped to a directory site.
+  campaignIds: string, Select only sites with these campaign IDs. (repeated)
+  acceptsInStreamVideoPlacements: boolean, This search filter is no longer supported and will have no effect on the results returned.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  acceptsPublisherPaidPlacements: boolean, Select only sites that accept publisher paid placements.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  acceptsInterstitialPlacements: boolean, This search filter is no longer supported and will have no effect on the results returned.
+  maxResults: integer, Maximum number of results to return.
+  adWordsSite: boolean, Select only AdWords sites.
+  approved: boolean, Select only approved sites.
+  searchString: string, Allows searching for objects by name, ID or keyName. Wildcards (*) are allowed. For example, "site*2015" will return objects with names like "site June 2015", "site April 2015", or simply "site 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "site" will match objects with name "my site", "site 2015", or simply "site".
+  subaccountId: string, Select only sites with this subaccount ID.
+  directorySiteIds: string, Select only sites with these directory site IDs. (repeated)
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only sites with these IDs. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # Site List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#sitesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#sitesListResponse".
+    "sites": [ # Site collection.
+      { # Contains properties of a site.
+          "kind": "dfareporting#site", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#site".
+          "subaccountId": "A String", # Subaccount ID of this site. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.
+          "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "siteSettings": { # Site Settings # Site-wide settings.
+            "disableBrandSafeAds": True or False, # Whether brand safe ads are disabled for this site.
+            "activeViewOptOut": True or False, # Whether active view creatives are disabled for this site.
+            "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this site.
+              "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+              "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+            },
+            "disableNewCookie": True or False, # Whether new cookies are disabled for this site.
+            "tagSetting": { # Tag Settings # Configuration settings for dynamic and image floodlight tags.
+              "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+              "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+              "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+              "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+            },
+            "creativeSettings": { # Creative Settings # Site-wide creative settings.
+              "iFrameHeader": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+              "iFrameFooter": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+            },
+            "videoActiveViewOptOut": True or False, # Whether Verification and ActiveView are disabled for in-stream video creatives on this site. The same setting videoActiveViewOptOut exists on the directory site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.
+          },
+          "approved": True or False, # Whether this site is approved.
+          "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this site. This is a read-only, auto-generated field.
+            "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+            "value": "A String", # The value of the dimension.
+            "dimensionName": "A String", # The name of the dimension.
+            "etag": "A String", # The eTag of this response for caching purposes.
+            "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+            "id": "A String", # The ID associated with the value if available.
+          },
+          "siteContacts": [ # Site contacts.
+            { # Site Contact
+              "firstName": "A String", # First name of this site contact.
+              "title": "A String", # Title or designation of this site contact.
+              "lastName": "A String", # Last name of this site contact.
+              "address": "A String", # Address of this site contact.
+              "email": "A String", # Email address of this site contact. This is a required field.
+              "phone": "A String", # Primary phone number of this site contact.
+              "contactType": "A String", # Site contact type.
+              "id": "A String", # ID of this site contact. This is a read-only, auto-generated field.
+            },
+          ],
+          "keyName": "A String", # Key name of this site. This is a read-only, auto-generated field.
+          "directorySiteId": "A String", # Directory site associated with this site. This is a required field that is read-only after insertion.
+          "id": "A String", # ID of this site. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this site. This is a read-only field that can be left blank.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing site. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Site ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a site.
+    "kind": "dfareporting#site", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#site".
+    "subaccountId": "A String", # Subaccount ID of this site. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.
+    "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "siteSettings": { # Site Settings # Site-wide settings.
+      "disableBrandSafeAds": True or False, # Whether brand safe ads are disabled for this site.
+      "activeViewOptOut": True or False, # Whether active view creatives are disabled for this site.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this site.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "disableNewCookie": True or False, # Whether new cookies are disabled for this site.
+      "tagSetting": { # Tag Settings # Configuration settings for dynamic and image floodlight tags.
+        "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+        "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+        "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+        "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+      },
+      "creativeSettings": { # Creative Settings # Site-wide creative settings.
+        "iFrameHeader": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+        "iFrameFooter": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+      },
+      "videoActiveViewOptOut": True or False, # Whether Verification and ActiveView are disabled for in-stream video creatives on this site. The same setting videoActiveViewOptOut exists on the directory site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.
+    },
+    "approved": True or False, # Whether this site is approved.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "siteContacts": [ # Site contacts.
+      { # Site Contact
+        "firstName": "A String", # First name of this site contact.
+        "title": "A String", # Title or designation of this site contact.
+        "lastName": "A String", # Last name of this site contact.
+        "address": "A String", # Address of this site contact.
+        "email": "A String", # Email address of this site contact. This is a required field.
+        "phone": "A String", # Primary phone number of this site contact.
+        "contactType": "A String", # Site contact type.
+        "id": "A String", # ID of this site contact. This is a read-only, auto-generated field.
+      },
+    ],
+    "keyName": "A String", # Key name of this site. This is a read-only, auto-generated field.
+    "directorySiteId": "A String", # Directory site associated with this site. This is a required field that is read-only after insertion.
+    "id": "A String", # ID of this site. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this site. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a site.
+      "kind": "dfareporting#site", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#site".
+      "subaccountId": "A String", # Subaccount ID of this site. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteSettings": { # Site Settings # Site-wide settings.
+        "disableBrandSafeAds": True or False, # Whether brand safe ads are disabled for this site.
+        "activeViewOptOut": True or False, # Whether active view creatives are disabled for this site.
+        "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this site.
+          "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        },
+        "disableNewCookie": True or False, # Whether new cookies are disabled for this site.
+        "tagSetting": { # Tag Settings # Configuration settings for dynamic and image floodlight tags.
+          "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+          "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+          "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+          "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+        },
+        "creativeSettings": { # Creative Settings # Site-wide creative settings.
+          "iFrameHeader": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+          "iFrameFooter": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+        },
+        "videoActiveViewOptOut": True or False, # Whether Verification and ActiveView are disabled for in-stream video creatives on this site. The same setting videoActiveViewOptOut exists on the directory site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.
+      },
+      "approved": True or False, # Whether this site is approved.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteContacts": [ # Site contacts.
+        { # Site Contact
+          "firstName": "A String", # First name of this site contact.
+          "title": "A String", # Title or designation of this site contact.
+          "lastName": "A String", # Last name of this site contact.
+          "address": "A String", # Address of this site contact.
+          "email": "A String", # Email address of this site contact. This is a required field.
+          "phone": "A String", # Primary phone number of this site contact.
+          "contactType": "A String", # Site contact type.
+          "id": "A String", # ID of this site contact. This is a read-only, auto-generated field.
+        },
+      ],
+      "keyName": "A String", # Key name of this site. This is a read-only, auto-generated field.
+      "directorySiteId": "A String", # Directory site associated with this site. This is a required field that is read-only after insertion.
+      "id": "A String", # ID of this site. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this site. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing site.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a site.
+    "kind": "dfareporting#site", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#site".
+    "subaccountId": "A String", # Subaccount ID of this site. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.
+    "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "siteSettings": { # Site Settings # Site-wide settings.
+      "disableBrandSafeAds": True or False, # Whether brand safe ads are disabled for this site.
+      "activeViewOptOut": True or False, # Whether active view creatives are disabled for this site.
+      "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this site.
+        "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+      },
+      "disableNewCookie": True or False, # Whether new cookies are disabled for this site.
+      "tagSetting": { # Tag Settings # Configuration settings for dynamic and image floodlight tags.
+        "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+        "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+        "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+        "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+      },
+      "creativeSettings": { # Creative Settings # Site-wide creative settings.
+        "iFrameHeader": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+        "iFrameFooter": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+      },
+      "videoActiveViewOptOut": True or False, # Whether Verification and ActiveView are disabled for in-stream video creatives on this site. The same setting videoActiveViewOptOut exists on the directory site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.
+    },
+    "approved": True or False, # Whether this site is approved.
+    "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this site. This is a read-only, auto-generated field.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "siteContacts": [ # Site contacts.
+      { # Site Contact
+        "firstName": "A String", # First name of this site contact.
+        "title": "A String", # Title or designation of this site contact.
+        "lastName": "A String", # Last name of this site contact.
+        "address": "A String", # Address of this site contact.
+        "email": "A String", # Email address of this site contact. This is a required field.
+        "phone": "A String", # Primary phone number of this site contact.
+        "contactType": "A String", # Site contact type.
+        "id": "A String", # ID of this site contact. This is a read-only, auto-generated field.
+      },
+    ],
+    "keyName": "A String", # Key name of this site. This is a read-only, auto-generated field.
+    "directorySiteId": "A String", # Directory site associated with this site. This is a required field that is read-only after insertion.
+    "id": "A String", # ID of this site. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this site. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a site.
+      "kind": "dfareporting#site", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#site".
+      "subaccountId": "A String", # Subaccount ID of this site. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this site.This is a required field. Must be less than 128 characters long. If this site is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this site is a top-level site, and the name must be unique among top-level sites of the same account.
+      "directorySiteIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the directory site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteSettings": { # Site Settings # Site-wide settings.
+        "disableBrandSafeAds": True or False, # Whether brand safe ads are disabled for this site.
+        "activeViewOptOut": True or False, # Whether active view creatives are disabled for this site.
+        "lookbackConfiguration": { # Lookback configuration settings. # Lookback window settings for this site.
+          "clickDuration": 42, # Lookback window, in days, from the last time a given user clicked on one of your ads. If you enter 0, clicks will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+          "postImpressionActivitiesDuration": 42, # Lookback window, in days, from the last time a given user viewed one of your ads. If you enter 0, impressions will not be considered as triggering events for floodlight tracking. If you leave this field blank, the default value for your account will be used.
+        },
+        "disableNewCookie": True or False, # Whether new cookies are disabled for this site.
+        "tagSetting": { # Tag Settings # Configuration settings for dynamic and image floodlight tags.
+          "includeClickThroughUrls": True or False, # Whether static landing page URLs should be included in the tags. This setting applies only to placements.
+          "includeClickTracking": True or False, # Whether click-tracking string should be included in the tags.
+          "additionalKeyValues": "A String", # Additional key-values to be included in tags. Each key-value pair must be of the form key=value, and pairs must be separated by a semicolon (;). Keys and values must not contain commas. For example, id=2;color=red is a valid value for this field.
+          "keywordOption": "A String", # Option specifying how keywords are embedded in ad tags. This setting can be used to specify whether keyword placeholders are inserted in placement tags for this site. Publishers can then add keywords to those placeholders.
+        },
+        "creativeSettings": { # Creative Settings # Site-wide creative settings.
+          "iFrameHeader": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+          "iFrameFooter": "A String", # Header text for iFrames for this site. Must be less than or equal to 2000 characters long.
+        },
+        "videoActiveViewOptOut": True or False, # Whether Verification and ActiveView are disabled for in-stream video creatives on this site. The same setting videoActiveViewOptOut exists on the directory site level -- the opt out occurs if either of these settings are true. These settings are distinct from DirectorySites.settings.activeViewOptOut or Sites.siteSettings.activeViewOptOut which only apply to display ads. However, Accounts.activeViewOptOut opts out both video traffic, as well as display ads, from Verification and ActiveView.
+      },
+      "approved": True or False, # Whether this site is approved.
+      "idDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of this site. This is a read-only, auto-generated field.
+        "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+        "value": "A String", # The value of the dimension.
+        "dimensionName": "A String", # The name of the dimension.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+        "id": "A String", # The ID associated with the value if available.
+      },
+      "siteContacts": [ # Site contacts.
+        { # Site Contact
+          "firstName": "A String", # First name of this site contact.
+          "title": "A String", # Title or designation of this site contact.
+          "lastName": "A String", # Last name of this site contact.
+          "address": "A String", # Address of this site contact.
+          "email": "A String", # Email address of this site contact. This is a required field.
+          "phone": "A String", # Primary phone number of this site contact.
+          "contactType": "A String", # Site contact type.
+          "id": "A String", # ID of this site contact. This is a read-only, auto-generated field.
+        },
+      ],
+      "keyName": "A String", # Key name of this site. This is a read-only, auto-generated field.
+      "directorySiteId": "A String", # Directory site associated with this site. This is a required field that is read-only after insertion.
+      "id": "A String", # ID of this site. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this site. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.sizes.html b/docs/dyn/dfareporting_v2_5.sizes.html
new file mode 100644
index 0000000..8d731bf
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.sizes.html
@@ -0,0 +1,165 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.sizes.html">sizes</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one size by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new size.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, iabStandard=None, width=None, ids=None, height=None)</a></code></p>
+<p class="firstline">Retrieves a list of sizes, possibly filtered.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one size by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Size ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Represents the dimensions of ads, placements, creatives, or creative assets.
+    "width": 42, # Width of this size.
+    "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+    "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+    "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+    "height": 42, # Height of this size.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new size.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Represents the dimensions of ads, placements, creatives, or creative assets.
+  "width": 42, # Width of this size.
+  "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+  "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+  "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+  "height": 42, # Height of this size.
+}
+
+
+Returns:
+  An object of the form:
+
+    { # Represents the dimensions of ads, placements, creatives, or creative assets.
+    "width": 42, # Width of this size.
+    "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+    "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+    "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+    "height": 42, # Height of this size.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, iabStandard=None, width=None, ids=None, height=None)</code>
+  <pre>Retrieves a list of sizes, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  iabStandard: boolean, Select only IAB standard sizes.
+  width: integer, Select only sizes with this width.
+  ids: string, Select only sizes with these IDs. (repeated)
+  height: integer, Select only sizes with this height.
+
+Returns:
+  An object of the form:
+
+    { # Size List Response
+    "kind": "dfareporting#sizesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#sizesListResponse".
+    "sizes": [ # Size collection.
+      { # Represents the dimensions of ads, placements, creatives, or creative assets.
+        "width": 42, # Width of this size.
+        "kind": "dfareporting#size", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#size".
+        "iab": True or False, # IAB standard size. This is a read-only, auto-generated field.
+        "id": "A String", # ID of this size. This is a read-only, auto-generated field.
+        "height": 42, # Height of this size.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.subaccounts.html b/docs/dyn/dfareporting_v2_5.subaccounts.html
new file mode 100644
index 0000000..89ca36d
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.subaccounts.html
@@ -0,0 +1,274 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.subaccounts.html">subaccounts</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one subaccount by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new subaccount.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</a></code></p>
+<p class="firstline">Gets a list of subaccounts, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing subaccount. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing subaccount.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one subaccount by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Subaccount ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM subaccount.
+      "kind": "dfareporting#subaccount", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#subaccount".
+      "availablePermissionIds": [ # IDs of the available user role permissions for this subaccount.
+        "A String",
+      ],
+      "id": "A String", # ID of this subaccount. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.
+      "accountId": "A String", # ID of the account that contains this subaccount. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new subaccount.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM subaccount.
+    "kind": "dfareporting#subaccount", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#subaccount".
+    "availablePermissionIds": [ # IDs of the available user role permissions for this subaccount.
+      "A String",
+    ],
+    "id": "A String", # ID of this subaccount. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.
+    "accountId": "A String", # ID of the account that contains this subaccount. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM subaccount.
+      "kind": "dfareporting#subaccount", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#subaccount".
+      "availablePermissionIds": [ # IDs of the available user role permissions for this subaccount.
+        "A String",
+      ],
+      "id": "A String", # ID of this subaccount. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.
+      "accountId": "A String", # ID of the account that contains this subaccount. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, pageToken=None, sortField=None, ids=None, maxResults=None, sortOrder=None)</code>
+  <pre>Gets a list of subaccounts, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "subaccount*2015" will return objects with names like "subaccount June 2015", "subaccount April 2015", or simply "subaccount 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "subaccount" will match objects with name "my subaccount", "subaccount 2015", or simply "subaccount".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  ids: string, Select only subaccounts with these IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Subaccount List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#subaccountsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#subaccountsListResponse".
+    "subaccounts": [ # Subaccount collection.
+      { # Contains properties of a DCM subaccount.
+          "kind": "dfareporting#subaccount", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#subaccount".
+          "availablePermissionIds": [ # IDs of the available user role permissions for this subaccount.
+            "A String",
+          ],
+          "id": "A String", # ID of this subaccount. This is a read-only, auto-generated field.
+          "name": "A String", # Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.
+          "accountId": "A String", # ID of the account that contains this subaccount. This is a read-only field that can be left blank.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing subaccount. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Subaccount ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM subaccount.
+    "kind": "dfareporting#subaccount", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#subaccount".
+    "availablePermissionIds": [ # IDs of the available user role permissions for this subaccount.
+      "A String",
+    ],
+    "id": "A String", # ID of this subaccount. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.
+    "accountId": "A String", # ID of the account that contains this subaccount. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM subaccount.
+      "kind": "dfareporting#subaccount", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#subaccount".
+      "availablePermissionIds": [ # IDs of the available user role permissions for this subaccount.
+        "A String",
+      ],
+      "id": "A String", # ID of this subaccount. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.
+      "accountId": "A String", # ID of the account that contains this subaccount. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing subaccount.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of a DCM subaccount.
+    "kind": "dfareporting#subaccount", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#subaccount".
+    "availablePermissionIds": [ # IDs of the available user role permissions for this subaccount.
+      "A String",
+    ],
+    "id": "A String", # ID of this subaccount. This is a read-only, auto-generated field.
+    "name": "A String", # Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.
+    "accountId": "A String", # ID of the account that contains this subaccount. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a DCM subaccount.
+      "kind": "dfareporting#subaccount", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#subaccount".
+      "availablePermissionIds": [ # IDs of the available user role permissions for this subaccount.
+        "A String",
+      ],
+      "id": "A String", # ID of this subaccount. This is a read-only, auto-generated field.
+      "name": "A String", # Name of this subaccount. This is a required field. Must be less than 128 characters long and be unique among subaccounts of the same account.
+      "accountId": "A String", # ID of the account that contains this subaccount. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.targetableRemarketingLists.html b/docs/dyn/dfareporting_v2_5.targetableRemarketingLists.html
new file mode 100644
index 0000000..d1a6824
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.targetableRemarketingLists.html
@@ -0,0 +1,187 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.targetableRemarketingLists.html">targetableRemarketingLists</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one remarketing list by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, advertiserId, name=None, pageToken=None, sortField=None, maxResults=None, active=None, sortOrder=None)</a></code></p>
+<p class="firstline">Retrieves a list of targetable remarketing lists, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one remarketing list by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, Remarketing list ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a targetable remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource is a read-only view of a remarketing list to be used to faciliate targeting ads to specific lists. Remarketing lists that are owned by your advertisers and those that are shared to your advertisers or account are accessible via this resource. To manage remarketing lists that are owned by your advertisers, use the RemarketingLists resource.
+    "kind": "dfareporting#targetableRemarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#targetableRemarketingList".
+    "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+    "description": "A String", # Targetable remarketing list description.
+    "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+    "lifeSpan": "A String", # Number of days that a user should remain in the targetable remarketing list without an impression.
+    "name": "A String", # Name of the targetable remarketing list. Is no greater than 128 characters long.
+    "advertiserId": "A String", # Dimension value for the advertiser ID that owns this targetable remarketing list.
+    "listSource": "A String", # Product from which this targetable remarketing list was originated.
+    "active": True or False, # Whether this targetable remarketing list is active.
+    "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser.
+      "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+      "value": "A String", # The value of the dimension.
+      "dimensionName": "A String", # The name of the dimension.
+      "etag": "A String", # The eTag of this response for caching purposes.
+      "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+      "id": "A String", # The ID associated with the value if available.
+    },
+    "id": "A String", # Targetable remarketing list ID.
+    "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, advertiserId, name=None, pageToken=None, sortField=None, maxResults=None, active=None, sortOrder=None)</code>
+  <pre>Retrieves a list of targetable remarketing lists, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  advertiserId: string, Select only targetable remarketing lists targetable by these advertisers. (required)
+  name: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "remarketing list*2015" will return objects with names like "remarketing list June 2015", "remarketing list April 2015", or simply "remarketing list 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "remarketing list" will match objects with name "my remarketing list", "remarketing list 2015", or simply "remarketing list".
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+  maxResults: integer, Maximum number of results to return.
+  active: boolean, Select only active or only inactive targetable remarketing lists.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+
+Returns:
+  An object of the form:
+
+    { # Targetable remarketing list response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#targetableRemarketingListsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#targetableRemarketingListsListResponse".
+    "targetableRemarketingLists": [ # Targetable remarketing list collection.
+      { # Contains properties of a targetable remarketing list. Remarketing enables you to create lists of users who have performed specific actions on a site, then target ads to members of those lists. This resource is a read-only view of a remarketing list to be used to faciliate targeting ads to specific lists. Remarketing lists that are owned by your advertisers and those that are shared to your advertisers or account are accessible via this resource. To manage remarketing lists that are owned by your advertisers, use the RemarketingLists resource.
+        "kind": "dfareporting#targetableRemarketingList", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#targetableRemarketingList".
+        "subaccountId": "A String", # Subaccount ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+        "description": "A String", # Targetable remarketing list description.
+        "listSize": "A String", # Number of users currently in the list. This is a read-only field.
+        "lifeSpan": "A String", # Number of days that a user should remain in the targetable remarketing list without an impression.
+        "name": "A String", # Name of the targetable remarketing list. Is no greater than 128 characters long.
+        "advertiserId": "A String", # Dimension value for the advertiser ID that owns this targetable remarketing list.
+        "listSource": "A String", # Product from which this targetable remarketing list was originated.
+        "active": True or False, # Whether this targetable remarketing list is active.
+        "advertiserIdDimensionValue": { # Represents a DimensionValue resource. # Dimension value for the ID of the advertiser.
+          "kind": "dfareporting#dimensionValue", # The kind of resource this is, in this case dfareporting#dimensionValue.
+          "value": "A String", # The value of the dimension.
+          "dimensionName": "A String", # The name of the dimension.
+          "etag": "A String", # The eTag of this response for caching purposes.
+          "matchType": "A String", # Determines how the 'value' field is matched when filtering. If not specified, defaults to EXACT. If set to WILDCARD_EXPRESSION, '*' is allowed as a placeholder for variable length character sequences, and it can be escaped with a backslash. Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT.
+          "id": "A String", # The ID associated with the value if available.
+        },
+        "id": "A String", # Targetable remarketing list ID.
+        "accountId": "A String", # Account ID of this remarketing list. This is a read-only, auto-generated field that is only returned in GET requests.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.userProfiles.html b/docs/dyn/dfareporting_v2_5.userProfiles.html
new file mode 100644
index 0000000..015aa62
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.userProfiles.html
@@ -0,0 +1,133 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.userProfiles.html">userProfiles</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId)</a></code></p>
+<p class="firstline">Gets one user profile by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list()</a></code></p>
+<p class="firstline">Retrieves list of user profiles for a user.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId)</code>
+  <pre>Gets one user profile by ID.
+
+Args:
+  profileId: string, The user profile ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Represents a UserProfile resource.
+    "userName": "A String", # The user name.
+    "kind": "dfareporting#userProfile", # The kind of resource this is, in this case dfareporting#userProfile.
+    "subAccountId": "A String", # The sub account ID this profile belongs to if applicable.
+    "accountName": "A String", # The account name this profile belongs to.
+    "etag": "A String", # The eTag of this response for caching purposes.
+    "subAccountName": "A String", # The sub account name this profile belongs to if applicable.
+    "profileId": "A String", # The unique ID of the user profile.
+    "accountId": "A String", # The account ID to which this profile belongs.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list()</code>
+  <pre>Retrieves list of user profiles for a user.
+
+Args:
+
+Returns:
+  An object of the form:
+
+    { # Represents the list of user profiles.
+    "items": [ # The user profiles returned in this response.
+      { # Represents a UserProfile resource.
+        "userName": "A String", # The user name.
+        "kind": "dfareporting#userProfile", # The kind of resource this is, in this case dfareporting#userProfile.
+        "subAccountId": "A String", # The sub account ID this profile belongs to if applicable.
+        "accountName": "A String", # The account name this profile belongs to.
+        "etag": "A String", # The eTag of this response for caching purposes.
+        "subAccountName": "A String", # The sub account name this profile belongs to if applicable.
+        "profileId": "A String", # The unique ID of the user profile.
+        "accountId": "A String", # The account ID to which this profile belongs.
+      },
+    ],
+    "kind": "dfareporting#userProfileList", # The kind of list this is, in this case dfareporting#userProfileList.
+    "etag": "A String", # The eTag of this response for caching purposes.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.userRolePermissionGroups.html b/docs/dyn/dfareporting_v2_5.userRolePermissionGroups.html
new file mode 100644
index 0000000..da697d5
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.userRolePermissionGroups.html
@@ -0,0 +1,124 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.userRolePermissionGroups.html">userRolePermissionGroups</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one user role permission group by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId)</a></code></p>
+<p class="firstline">Gets a list of all supported user role permission groups.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one user role permission group by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, User role permission group ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Represents a grouping of related user role permissions.
+    "kind": "dfareporting#userRolePermissionGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermissionGroup".
+    "id": "A String", # ID of this user role permission.
+    "name": "A String", # Name of this user role permission group.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId)</code>
+  <pre>Gets a list of all supported user role permission groups.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+
+Returns:
+  An object of the form:
+
+    { # User Role Permission Group List Response
+    "userRolePermissionGroups": [ # User role permission group collection.
+      { # Represents a grouping of related user role permissions.
+        "kind": "dfareporting#userRolePermissionGroup", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermissionGroup".
+        "id": "A String", # ID of this user role permission.
+        "name": "A String", # Name of this user role permission group.
+      },
+    ],
+    "kind": "dfareporting#userRolePermissionGroupsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermissionGroupsListResponse".
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.userRolePermissions.html b/docs/dyn/dfareporting_v2_5.userRolePermissions.html
new file mode 100644
index 0000000..0f7e480
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.userRolePermissions.html
@@ -0,0 +1,129 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.userRolePermissions.html">userRolePermissions</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one user role permission by ID.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, ids=None)</a></code></p>
+<p class="firstline">Gets a list of user role permissions, possibly filtered.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one user role permission by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, User role permission ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of a user role permission.
+    "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+    "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+    "availability": "A String", # Levels of availability for a user role permission.
+    "name": "A String", # Name of this user role permission.
+    "id": "A String", # ID of this user role permission.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, ids=None)</code>
+  <pre>Gets a list of user role permissions, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  ids: string, Select only user role permissions with these IDs. (repeated)
+
+Returns:
+  An object of the form:
+
+    { # User Role Permission List Response
+    "userRolePermissions": [ # User role permission collection.
+      { # Contains properties of a user role permission.
+        "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+        "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+        "availability": "A String", # Levels of availability for a user role permission.
+        "name": "A String", # Name of this user role permission.
+        "id": "A String", # ID of this user role permission.
+      },
+    ],
+    "kind": "dfareporting#userRolePermissionsListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermissionsListResponse".
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/dfareporting_v2_5.userRoles.html b/docs/dyn/dfareporting_v2_5.userRoles.html
new file mode 100644
index 0000000..21fd511
--- /dev/null
+++ b/docs/dyn/dfareporting_v2_5.userRoles.html
@@ -0,0 +1,361 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="dfareporting_v2_5.html">DCM/DFA Reporting And Trafficking API</a> . <a href="dfareporting_v2_5.userRoles.html">userRoles</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#delete">delete(profileId, id)</a></code></p>
+<p class="firstline">Deletes an existing user role.</p>
+<p class="toc_element">
+  <code><a href="#get">get(profileId, id)</a></code></p>
+<p class="firstline">Gets one user role by ID.</p>
+<p class="toc_element">
+  <code><a href="#insert">insert(profileId, body)</a></code></p>
+<p class="firstline">Inserts a new user role.</p>
+<p class="toc_element">
+  <code><a href="#list">list(profileId, searchString=None, subaccountId=None, pageToken=None, ids=None, maxResults=None, accountUserRoleOnly=None, sortOrder=None, sortField=None)</a></code></p>
+<p class="firstline">Retrieves a list of user roles, possibly filtered.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(profileId, id, body)</a></code></p>
+<p class="firstline">Updates an existing user role. This method supports patch semantics.</p>
+<p class="toc_element">
+  <code><a href="#update">update(profileId, body)</a></code></p>
+<p class="firstline">Updates an existing user role.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="delete">delete(profileId, id)</code>
+  <pre>Deletes an existing user role.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, User role ID. (required)
+</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(profileId, id)</code>
+  <pre>Gets one user role by ID.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, User role ID. (required)
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of auser role, which is used to manage user access.
+      "defaultUserRole": True or False, # Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.
+      "kind": "dfareporting#userRole", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRole".
+      "subaccountId": "A String", # Subaccount ID of this user role. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.
+      "parentUserRoleId": "A String", # ID of the user role that this user role is based on or copied from. This is a required field.
+      "permissions": [ # List of permissions associated with this user role.
+        { # Contains properties of a user role permission.
+          "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+          "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+          "availability": "A String", # Levels of availability for a user role permission.
+          "name": "A String", # Name of this user role permission.
+          "id": "A String", # ID of this user role permission.
+        },
+      ],
+      "id": "A String", # ID of this user role. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this user role. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="insert">insert(profileId, body)</code>
+  <pre>Inserts a new user role.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of auser role, which is used to manage user access.
+    "defaultUserRole": True or False, # Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.
+    "kind": "dfareporting#userRole", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRole".
+    "subaccountId": "A String", # Subaccount ID of this user role. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.
+    "parentUserRoleId": "A String", # ID of the user role that this user role is based on or copied from. This is a required field.
+    "permissions": [ # List of permissions associated with this user role.
+      { # Contains properties of a user role permission.
+        "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+        "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+        "availability": "A String", # Levels of availability for a user role permission.
+        "name": "A String", # Name of this user role permission.
+        "id": "A String", # ID of this user role permission.
+      },
+    ],
+    "id": "A String", # ID of this user role. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this user role. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of auser role, which is used to manage user access.
+      "defaultUserRole": True or False, # Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.
+      "kind": "dfareporting#userRole", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRole".
+      "subaccountId": "A String", # Subaccount ID of this user role. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.
+      "parentUserRoleId": "A String", # ID of the user role that this user role is based on or copied from. This is a required field.
+      "permissions": [ # List of permissions associated with this user role.
+        { # Contains properties of a user role permission.
+          "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+          "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+          "availability": "A String", # Levels of availability for a user role permission.
+          "name": "A String", # Name of this user role permission.
+          "id": "A String", # ID of this user role permission.
+        },
+      ],
+      "id": "A String", # ID of this user role. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this user role. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(profileId, searchString=None, subaccountId=None, pageToken=None, ids=None, maxResults=None, accountUserRoleOnly=None, sortOrder=None, sortField=None)</code>
+  <pre>Retrieves a list of user roles, possibly filtered.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  searchString: string, Allows searching for objects by name or ID. Wildcards (*) are allowed. For example, "userrole*2015" will return objects with names like "userrole June 2015", "userrole April 2015", or simply "userrole 2015". Most of the searches also add wildcards implicitly at the start and the end of the search string. For example, a search string of "userrole" will match objects with name "my userrole", "userrole 2015", or simply "userrole".
+  subaccountId: string, Select only user roles that belong to this subaccount.
+  pageToken: string, Value of the nextPageToken from the previous result page.
+  ids: string, Select only user roles with the specified IDs. (repeated)
+  maxResults: integer, Maximum number of results to return.
+  accountUserRoleOnly: boolean, Select only account level user roles not associated with any specific subaccount.
+  sortOrder: string, Order of sorted results, default is ASCENDING.
+    Allowed values
+      ASCENDING - 
+      DESCENDING - 
+  sortField: string, Field by which to sort the list.
+    Allowed values
+      ID - 
+      NAME - 
+
+Returns:
+  An object of the form:
+
+    { # User Role List Response
+    "nextPageToken": "A String", # Pagination token to be used for the next list operation.
+    "kind": "dfareporting#userRolesListResponse", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolesListResponse".
+    "userRoles": [ # User role collection.
+      { # Contains properties of auser role, which is used to manage user access.
+          "defaultUserRole": True or False, # Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.
+          "kind": "dfareporting#userRole", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRole".
+          "subaccountId": "A String", # Subaccount ID of this user role. This is a read-only field that can be left blank.
+          "name": "A String", # Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.
+          "parentUserRoleId": "A String", # ID of the user role that this user role is based on or copied from. This is a required field.
+          "permissions": [ # List of permissions associated with this user role.
+            { # Contains properties of a user role permission.
+              "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+              "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+              "availability": "A String", # Levels of availability for a user role permission.
+              "name": "A String", # Name of this user role permission.
+              "id": "A String", # ID of this user role permission.
+            },
+          ],
+          "id": "A String", # ID of this user role. This is a read-only, auto-generated field.
+          "accountId": "A String", # Account ID of this user role. This is a read-only field that can be left blank.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(profileId, id, body)</code>
+  <pre>Updates an existing user role. This method supports patch semantics.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  id: string, User role ID. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of auser role, which is used to manage user access.
+    "defaultUserRole": True or False, # Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.
+    "kind": "dfareporting#userRole", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRole".
+    "subaccountId": "A String", # Subaccount ID of this user role. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.
+    "parentUserRoleId": "A String", # ID of the user role that this user role is based on or copied from. This is a required field.
+    "permissions": [ # List of permissions associated with this user role.
+      { # Contains properties of a user role permission.
+        "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+        "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+        "availability": "A String", # Levels of availability for a user role permission.
+        "name": "A String", # Name of this user role permission.
+        "id": "A String", # ID of this user role permission.
+      },
+    ],
+    "id": "A String", # ID of this user role. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this user role. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of auser role, which is used to manage user access.
+      "defaultUserRole": True or False, # Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.
+      "kind": "dfareporting#userRole", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRole".
+      "subaccountId": "A String", # Subaccount ID of this user role. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.
+      "parentUserRoleId": "A String", # ID of the user role that this user role is based on or copied from. This is a required field.
+      "permissions": [ # List of permissions associated with this user role.
+        { # Contains properties of a user role permission.
+          "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+          "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+          "availability": "A String", # Levels of availability for a user role permission.
+          "name": "A String", # Name of this user role permission.
+          "id": "A String", # ID of this user role permission.
+        },
+      ],
+      "id": "A String", # ID of this user role. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this user role. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(profileId, body)</code>
+  <pre>Updates an existing user role.
+
+Args:
+  profileId: string, User profile ID associated with this request. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Contains properties of auser role, which is used to manage user access.
+    "defaultUserRole": True or False, # Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.
+    "kind": "dfareporting#userRole", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRole".
+    "subaccountId": "A String", # Subaccount ID of this user role. This is a read-only field that can be left blank.
+    "name": "A String", # Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.
+    "parentUserRoleId": "A String", # ID of the user role that this user role is based on or copied from. This is a required field.
+    "permissions": [ # List of permissions associated with this user role.
+      { # Contains properties of a user role permission.
+        "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+        "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+        "availability": "A String", # Levels of availability for a user role permission.
+        "name": "A String", # Name of this user role permission.
+        "id": "A String", # ID of this user role permission.
+      },
+    ],
+    "id": "A String", # ID of this user role. This is a read-only, auto-generated field.
+    "accountId": "A String", # Account ID of this user role. This is a read-only field that can be left blank.
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Contains properties of auser role, which is used to manage user access.
+      "defaultUserRole": True or False, # Whether this is a default user role. Default user roles are created by the system for the account/subaccount and cannot be modified or deleted. Each default user role comes with a basic set of preassigned permissions.
+      "kind": "dfareporting#userRole", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRole".
+      "subaccountId": "A String", # Subaccount ID of this user role. This is a read-only field that can be left blank.
+      "name": "A String", # Name of this user role. This is a required field. Must be less than 256 characters long. If this user role is under a subaccount, the name must be unique among sites of the same subaccount. Otherwise, this user role is a top-level user role, and the name must be unique among top-level user roles of the same account.
+      "parentUserRoleId": "A String", # ID of the user role that this user role is based on or copied from. This is a required field.
+      "permissions": [ # List of permissions associated with this user role.
+        { # Contains properties of a user role permission.
+          "permissionGroupId": "A String", # ID of the permission group that this user role permission belongs to.
+          "kind": "dfareporting#userRolePermission", # Identifies what kind of resource this is. Value: the fixed string "dfareporting#userRolePermission".
+          "availability": "A String", # Levels of availability for a user role permission.
+          "name": "A String", # Name of this user role permission.
+          "id": "A String", # ID of this user role permission.
+        },
+      ],
+      "id": "A String", # ID of this user role. This is a read-only, auto-generated field.
+      "accountId": "A String", # Account ID of this user role. This is a read-only field that can be left blank.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/doubleclicksearch_v2.conversion.html b/docs/dyn/doubleclicksearch_v2.conversion.html
index 19b91a9..3517d55 100644
--- a/docs/dyn/doubleclicksearch_v2.conversion.html
+++ b/docs/dyn/doubleclicksearch_v2.conversion.html
@@ -121,11 +121,11 @@
           ],
           "adGroupId": "A String", # DS ad group ID.
           "segmentationName": "A String", # The friendly segmentation identifier (for example, DoubleClick Search Floodlight activity name).
-          "attributionModel": "A String", # This field is ignored.
+          "attributionModel": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
           "campaignId": "A String", # DS campaign ID.
-          "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000, no decimal). For example, to specify a revenue value of "10" enter "10000" in your request.
+          "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000000, no decimal). For example, to specify a revenue value of "10" enter "10000000" (10 million) in your request.
           "advertiserId": "A String", # DS advertiser ID.
-          "countMillis": "A String", # This field is ignored.
+          "countMillis": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
           "conversionTimestamp": "A String", # The time at which the conversion took place, in epoch millis UTC.
           "clickId": "A String", # DS click ID for the conversion.
           "dsConversionId": "A String", # ID that DoubleClick Search generates for each conversion.
@@ -183,11 +183,11 @@
         ],
         "adGroupId": "A String", # DS ad group ID.
         "segmentationName": "A String", # The friendly segmentation identifier (for example, DoubleClick Search Floodlight activity name).
-        "attributionModel": "A String", # This field is ignored.
+        "attributionModel": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
         "campaignId": "A String", # DS campaign ID.
-        "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000, no decimal). For example, to specify a revenue value of "10" enter "10000" in your request.
+        "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000000, no decimal). For example, to specify a revenue value of "10" enter "10000000" (10 million) in your request.
         "advertiserId": "A String", # DS advertiser ID.
-        "countMillis": "A String", # This field is ignored.
+        "countMillis": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
         "conversionTimestamp": "A String", # The time at which the conversion took place, in epoch millis UTC.
         "clickId": "A String", # DS click ID for the conversion.
         "dsConversionId": "A String", # ID that DoubleClick Search generates for each conversion.
@@ -240,11 +240,11 @@
           ],
           "adGroupId": "A String", # DS ad group ID.
           "segmentationName": "A String", # The friendly segmentation identifier (for example, DoubleClick Search Floodlight activity name).
-          "attributionModel": "A String", # This field is ignored.
+          "attributionModel": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
           "campaignId": "A String", # DS campaign ID.
-          "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000, no decimal). For example, to specify a revenue value of "10" enter "10000" in your request.
+          "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000000, no decimal). For example, to specify a revenue value of "10" enter "10000000" (10 million) in your request.
           "advertiserId": "A String", # DS advertiser ID.
-          "countMillis": "A String", # This field is ignored.
+          "countMillis": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
           "conversionTimestamp": "A String", # The time at which the conversion took place, in epoch millis UTC.
           "clickId": "A String", # DS click ID for the conversion.
           "dsConversionId": "A String", # ID that DoubleClick Search generates for each conversion.
@@ -309,11 +309,11 @@
         ],
         "adGroupId": "A String", # DS ad group ID.
         "segmentationName": "A String", # The friendly segmentation identifier (for example, DoubleClick Search Floodlight activity name).
-        "attributionModel": "A String", # This field is ignored.
+        "attributionModel": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
         "campaignId": "A String", # DS campaign ID.
-        "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000, no decimal). For example, to specify a revenue value of "10" enter "10000" in your request.
+        "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000000, no decimal). For example, to specify a revenue value of "10" enter "10000000" (10 million) in your request.
         "advertiserId": "A String", # DS advertiser ID.
-        "countMillis": "A String", # This field is ignored.
+        "countMillis": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
         "conversionTimestamp": "A String", # The time at which the conversion took place, in epoch millis UTC.
         "clickId": "A String", # DS click ID for the conversion.
         "dsConversionId": "A String", # ID that DoubleClick Search generates for each conversion.
@@ -366,11 +366,11 @@
           ],
           "adGroupId": "A String", # DS ad group ID.
           "segmentationName": "A String", # The friendly segmentation identifier (for example, DoubleClick Search Floodlight activity name).
-          "attributionModel": "A String", # This field is ignored.
+          "attributionModel": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
           "campaignId": "A String", # DS campaign ID.
-          "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000, no decimal). For example, to specify a revenue value of "10" enter "10000" in your request.
+          "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000000, no decimal). For example, to specify a revenue value of "10" enter "10000000" (10 million) in your request.
           "advertiserId": "A String", # DS advertiser ID.
-          "countMillis": "A String", # This field is ignored.
+          "countMillis": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
           "conversionTimestamp": "A String", # The time at which the conversion took place, in epoch millis UTC.
           "clickId": "A String", # DS click ID for the conversion.
           "dsConversionId": "A String", # ID that DoubleClick Search generates for each conversion.
@@ -428,11 +428,11 @@
         ],
         "adGroupId": "A String", # DS ad group ID.
         "segmentationName": "A String", # The friendly segmentation identifier (for example, DoubleClick Search Floodlight activity name).
-        "attributionModel": "A String", # This field is ignored.
+        "attributionModel": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
         "campaignId": "A String", # DS campaign ID.
-        "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000, no decimal). For example, to specify a revenue value of "10" enter "10000" in your request.
+        "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000000, no decimal). For example, to specify a revenue value of "10" enter "10000000" (10 million) in your request.
         "advertiserId": "A String", # DS advertiser ID.
-        "countMillis": "A String", # This field is ignored.
+        "countMillis": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
         "conversionTimestamp": "A String", # The time at which the conversion took place, in epoch millis UTC.
         "clickId": "A String", # DS click ID for the conversion.
         "dsConversionId": "A String", # ID that DoubleClick Search generates for each conversion.
@@ -485,11 +485,11 @@
           ],
           "adGroupId": "A String", # DS ad group ID.
           "segmentationName": "A String", # The friendly segmentation identifier (for example, DoubleClick Search Floodlight activity name).
-          "attributionModel": "A String", # This field is ignored.
+          "attributionModel": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
           "campaignId": "A String", # DS campaign ID.
-          "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000, no decimal). For example, to specify a revenue value of "10" enter "10000" in your request.
+          "revenueMicros": "A String", # The revenue amount of this TRANSACTION conversion, in micros (value multiplied by 1000000, no decimal). For example, to specify a revenue value of "10" enter "10000000" (10 million) in your request.
           "advertiserId": "A String", # DS advertiser ID.
-          "countMillis": "A String", # This field is ignored.
+          "countMillis": "A String", # Available to advertisers only after contacting DoubleClick Search customer support.
           "conversionTimestamp": "A String", # The time at which the conversion took place, in epoch millis UTC.
           "clickId": "A String", # DS click ID for the conversion.
           "dsConversionId": "A String", # ID that DoubleClick Search generates for each conversion.
diff --git a/docs/dyn/drive_v3.changes.html b/docs/dyn/drive_v3.changes.html
index 1c2bf29..43855b5 100644
--- a/docs/dyn/drive_v3.changes.html
+++ b/docs/dyn/drive_v3.changes.html
@@ -131,6 +131,7 @@
           "modifiedByMeTime": "A String", # The last time the file was modified by the user (RFC 3339 date-time).
           "thumbnailLink": "A String", # A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours.
           "explicitlyTrashed": True or False, # Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.
+          "isAppAuthorized": True or False, # Whether the file was created or opened by the requesting app.
           "writersCanShare": True or False, # Whether users with only writer permission can modify the file's permissions.
           "ownedByMe": True or False, # Whether the user owns the file.
           "viewedByMeTime": "A String", # The last time the file was viewed by the user (RFC 3339 date-time).
diff --git a/docs/dyn/drive_v3.files.html b/docs/dyn/drive_v3.files.html
index fba0cd7..4cb58e6 100644
--- a/docs/dyn/drive_v3.files.html
+++ b/docs/dyn/drive_v3.files.html
@@ -133,6 +133,7 @@
   "modifiedByMeTime": "A String", # The last time the file was modified by the user (RFC 3339 date-time).
   "thumbnailLink": "A String", # A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours.
   "explicitlyTrashed": True or False, # Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.
+  "isAppAuthorized": True or False, # Whether the file was created or opened by the requesting app.
   "writersCanShare": True or False, # Whether users with only writer permission can modify the file's permissions.
   "ownedByMe": True or False, # Whether the user owns the file.
   "viewedByMeTime": "A String", # The last time the file was viewed by the user (RFC 3339 date-time).
@@ -287,6 +288,7 @@
     "modifiedByMeTime": "A String", # The last time the file was modified by the user (RFC 3339 date-time).
     "thumbnailLink": "A String", # A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours.
     "explicitlyTrashed": True or False, # Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.
+    "isAppAuthorized": True or False, # Whether the file was created or opened by the requesting app.
     "writersCanShare": True or False, # Whether users with only writer permission can modify the file's permissions.
     "ownedByMe": True or False, # Whether the user owns the file.
     "viewedByMeTime": "A String", # The last time the file was viewed by the user (RFC 3339 date-time).
@@ -443,6 +445,7 @@
   "modifiedByMeTime": "A String", # The last time the file was modified by the user (RFC 3339 date-time).
   "thumbnailLink": "A String", # A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours.
   "explicitlyTrashed": True or False, # Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.
+  "isAppAuthorized": True or False, # Whether the file was created or opened by the requesting app.
   "writersCanShare": True or False, # Whether users with only writer permission can modify the file's permissions.
   "ownedByMe": True or False, # Whether the user owns the file.
   "viewedByMeTime": "A String", # The last time the file was viewed by the user (RFC 3339 date-time).
@@ -599,6 +602,7 @@
     "modifiedByMeTime": "A String", # The last time the file was modified by the user (RFC 3339 date-time).
     "thumbnailLink": "A String", # A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours.
     "explicitlyTrashed": True or False, # Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.
+    "isAppAuthorized": True or False, # Whether the file was created or opened by the requesting app.
     "writersCanShare": True or False, # Whether users with only writer permission can modify the file's permissions.
     "ownedByMe": True or False, # Whether the user owns the file.
     "viewedByMeTime": "A String", # The last time the file was viewed by the user (RFC 3339 date-time).
@@ -815,6 +819,7 @@
     "modifiedByMeTime": "A String", # The last time the file was modified by the user (RFC 3339 date-time).
     "thumbnailLink": "A String", # A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours.
     "explicitlyTrashed": True or False, # Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.
+    "isAppAuthorized": True or False, # Whether the file was created or opened by the requesting app.
     "writersCanShare": True or False, # Whether users with only writer permission can modify the file's permissions.
     "ownedByMe": True or False, # Whether the user owns the file.
     "viewedByMeTime": "A String", # The last time the file was viewed by the user (RFC 3339 date-time).
@@ -997,6 +1002,7 @@
         "modifiedByMeTime": "A String", # The last time the file was modified by the user (RFC 3339 date-time).
         "thumbnailLink": "A String", # A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours.
         "explicitlyTrashed": True or False, # Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.
+        "isAppAuthorized": True or False, # Whether the file was created or opened by the requesting app.
         "writersCanShare": True or False, # Whether users with only writer permission can modify the file's permissions.
         "ownedByMe": True or False, # Whether the user owns the file.
         "viewedByMeTime": "A String", # The last time the file was viewed by the user (RFC 3339 date-time).
@@ -1172,6 +1178,7 @@
   "modifiedByMeTime": "A String", # The last time the file was modified by the user (RFC 3339 date-time).
   "thumbnailLink": "A String", # A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours.
   "explicitlyTrashed": True or False, # Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.
+  "isAppAuthorized": True or False, # Whether the file was created or opened by the requesting app.
   "writersCanShare": True or False, # Whether users with only writer permission can modify the file's permissions.
   "ownedByMe": True or False, # Whether the user owns the file.
   "viewedByMeTime": "A String", # The last time the file was viewed by the user (RFC 3339 date-time).
@@ -1329,6 +1336,7 @@
     "modifiedByMeTime": "A String", # The last time the file was modified by the user (RFC 3339 date-time).
     "thumbnailLink": "A String", # A short-lived link to the file's thumbnail, if available. Typically lasts on the order of hours.
     "explicitlyTrashed": True or False, # Whether the file has been explicitly trashed, as opposed to recursively trashed from a parent folder.
+    "isAppAuthorized": True or False, # Whether the file was created or opened by the requesting app.
     "writersCanShare": True or False, # Whether users with only writer permission can modify the file's permissions.
     "ownedByMe": True or False, # Whether the user owns the file.
     "viewedByMeTime": "A String", # The last time the file was viewed by the user (RFC 3339 date-time).
diff --git a/docs/dyn/firebaserules_v1.html b/docs/dyn/firebaserules_v1.html
new file mode 100644
index 0000000..e17baeb
--- /dev/null
+++ b/docs/dyn/firebaserules_v1.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="firebaserules_v1.html">Firebase Rules API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="firebaserules_v1.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/firebaserules_v1.projects.html b/docs/dyn/firebaserules_v1.projects.html
new file mode 100644
index 0000000..afd044c
--- /dev/null
+++ b/docs/dyn/firebaserules_v1.projects.html
@@ -0,0 +1,160 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="firebaserules_v1.html">Firebase Rules API</a> . <a href="firebaserules_v1.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="firebaserules_v1.projects.releases.html">releases()</a></code>
+</p>
+<p class="firstline">Returns the releases Resource.</p>
+
+<p class="toc_element">
+  <code><a href="firebaserules_v1.projects.rulesets.html">rulesets()</a></code>
+</p>
+<p class="firstline">Returns the rulesets Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#test">test(name=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Test `Source` for syntactic and semantic correctness. Issues present in the</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="test">test(name=None, body, x__xgafv=None)</code>
+  <pre>Test `Source` for syntactic and semantic correctness. Issues present in the
+rules, if any, will be returned to the caller with a description, severity,
+and source location.
+
+The test method will typically be executed with a developer provided
+`Source`, but if regression testing is desired, this method may be
+executed against a `Ruleset` resource name and the `Source` will be
+retrieved from the persisted `Ruleset`.
+
+The following is an example of `Source` that permits users to upload images
+to a bucket bearing their user id and matching the correct metadata:
+
+_*Example*_
+
+    // Users are allowed to subscribe and unsubscribe to the blog.
+    service firebase.storage {
+      match /users/{userId}/images/{imageName} {
+          allow write: if userId == request.userId
+              && (imageName.endsWith('.png') || imageName.endsWith('.jpg'))
+              && resource.mimeType.startsWith('image/')
+      }
+    }
+
+Args:
+  name: string, Name of the project.
+
+Format: `projects/{project_id}` (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for FirebaseRulesService.TestRuleset.
+    "source": { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` to be checked for correctness.
+      "files": [ # `File` set constituting the `Source` bundle.
+        { # `File` containing source content.
+          "content": "A String", # Textual Content.
+          "name": "A String", # File name.
+          "fingerprint": "A String", # Fingerprint (e.g. github sha) associated with the `File`.
+        },
+      ],
+    },
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response for FirebaseRulesService.TestRuleset.
+    "issues": [ # Syntactic and semantic `Source` issues of varying severity. Issues of
+        # `ERROR` severity will prevent tests from executing.
+      { # Issues include warnings, errors, and deprecation notices.
+        "sourcePosition": { # Position in the `Source` content including its line, column number, and an # Position of the issue in the `Source`.
+            # index of the `File` in the `Source` message. Used for debug purposes.
+          "column": 42, # First column on the source line associated with the source fragment.
+          "line": 42, # Line number of the source fragment. 1-based.
+          "fileName": "A String", # Name of the `File`.
+        },
+        "description": "A String", # Short error description.
+        "severity": "A String", # The severity of the issue.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/firebaserules_v1.projects.releases.html b/docs/dyn/firebaserules_v1.projects.releases.html
new file mode 100644
index 0000000..8d9f299
--- /dev/null
+++ b/docs/dyn/firebaserules_v1.projects.releases.html
@@ -0,0 +1,503 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="firebaserules_v1.html">Firebase Rules API</a> . <a href="firebaserules_v1.projects.html">projects</a> . <a href="firebaserules_v1.projects.releases.html">releases</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(name=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Create a `Release`.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Delete a `Release` by resource name.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Get a `Release` by name.</p>
+<p class="toc_element">
+  <code><a href="#list">list(name=None, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">List the `Release` values for a project. This list may optionally be</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#update">update(name=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Update a `Release`.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(name=None, body, x__xgafv=None)</code>
+  <pre>Create a `Release`.
+
+Release names should reflect the developer's deployment practices. For
+example, the release name may include the environment name, application
+name, application version, or any other name meaningful to the developer.
+Once a `Release` refers to a `Ruleset`, the rules can be enforced by
+Firebase Rules-enabled services.
+
+More than one `Release` may be 'live' concurrently. Consider the following
+three `Release` names for `projects/foo` and the `Ruleset` to which they
+refer.
+
+Release Name                    | Ruleset Name
+--------------------------------|-------------
+projects/foo/releases/prod      | projects/foo/rulesets/uuid123
+projects/foo/releases/prod/beta | projects/foo/rulesets/uuid123
+projects/foo/releases/prod/v23  | projects/foo/rulesets/uuid456
+
+The table reflects the `Ruleset` rollout in progress. The `prod` and
+`prod/beta` releases refer to the same `Ruleset`. However, `prod/v23`
+refers to a new `Ruleset`. The `Ruleset` reference for a `Release` may be
+updated using the UpdateRelease method, and the custom `Release` name
+may be referenced by specifying the `X-Firebase-Rules-Release-Name` header.
+
+Args:
+  name: string, Resource name for the project which owns this `Release`.
+
+Format: `projects/{project_id}` (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # `Release` is a named reference to a `Ruleset`. Once a `Release` refers to a
+      # `Ruleset`, rules-enabled services will be able to enforce the `Ruleset`.
+    "updateTime": "A String", # Time the release was updated.
+        # @OutputOnly
+    "rulesetName": "A String", # Name of the `Ruleset` referred to by this `Release`. The `Ruleset` must
+        # exist the `Release` to be created.
+    "createTime": "A String", # Time the release was created.
+        # @OutputOnly
+    "name": "A String", # Resource name for the `Release`.
+        # 
+        # `Release` names may be structured `app1/prod/v2` or flat `app1_prod_v2`
+        # which affords developers a great deal of flexibility in mapping the name
+        # to the style that best fits their existing development practices. For
+        # example, a name could refer to an environment, an app, a version, or some
+        # combination of three.
+        # 
+        # In the table below, for the project name `projects/foo`, the following
+        # relative release paths show how flat and structured names might be chosen
+        # to match a desired development / deployment strategy.
+        # 
+        # Use Case     | Flat Name           | Structured Name
+        # -------------|---------------------|----------------
+        # Environments | releases/qa         | releases/qa
+        # Apps         | releases/app1_qa    | releases/app1/qa
+        # Versions     | releases/app1_v2_qa | releases/app1/v2/qa
+        # 
+        # The delimiter between the release name path elements can be almost anything
+        # and it should work equally well with the release name list filter, but in
+        # many ways the structured paths provide a clearer picture of the
+        # relationship between `Release` instances.
+        # 
+        # Format: `projects/{project_id}/releases/{release_id}`
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # `Release` is a named reference to a `Ruleset`. Once a `Release` refers to a
+        # `Ruleset`, rules-enabled services will be able to enforce the `Ruleset`.
+      "updateTime": "A String", # Time the release was updated.
+          # @OutputOnly
+      "rulesetName": "A String", # Name of the `Ruleset` referred to by this `Release`. The `Ruleset` must
+          # exist the `Release` to be created.
+      "createTime": "A String", # Time the release was created.
+          # @OutputOnly
+      "name": "A String", # Resource name for the `Release`.
+          #
+          # `Release` names may be structured `app1/prod/v2` or flat `app1_prod_v2`
+          # which affords developers a great deal of flexibility in mapping the name
+          # to the style that best fits their existing development practices. For
+          # example, a name could refer to an environment, an app, a version, or some
+          # combination of three.
+          #
+          # In the table below, for the project name `projects/foo`, the following
+          # relative release paths show how flat and structured names might be chosen
+          # to match a desired development / deployment strategy.
+          #
+          # Use Case     | Flat Name           | Structured Name
+          # -------------|---------------------|----------------
+          # Environments | releases/qa         | releases/qa
+          # Apps         | releases/app1_qa    | releases/app1/qa
+          # Versions     | releases/app1_v2_qa | releases/app1/v2/qa
+          #
+          # The delimiter between the release name path elements can be almost anything
+          # and it should work equally well with the release name list filter, but in
+          # many ways the structured paths provide a clearer picture of the
+          # relationship between `Release` instances.
+          #
+          # Format: `projects/{project_id}/releases/{release_id}`
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name=None, x__xgafv=None)</code>
+  <pre>Delete a `Release` by resource name.
+
+Args:
+  name: string, Resource name for the `Release` to delete.
+
+Format: `projects/{project_id}/releases/{release_id}` (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated
+      # empty messages in your APIs. A typical example is to use it as the request
+      # or the response type of an API method. For instance:
+      #
+      #     service Foo {
+      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+      #     }
+      #
+      # The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name=None, x__xgafv=None)</code>
+  <pre>Get a `Release` by name.
+
+
+Args:
+  name: string, Resource name of the `Release`.
+
+
+Format: `projects/{project_id}/releases/{release_id}` (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # `Release` is a named reference to a `Ruleset`. Once a `Release` refers to a
+        # `Ruleset`, rules-enabled services will be able to enforce the `Ruleset`.
+      "updateTime": "A String", # Time the release was updated.
+          # @OutputOnly
+      "rulesetName": "A String", # Name of the `Ruleset` referred to by this `Release`. The `Ruleset` must
+          # exist the `Release` to be created.
+      "createTime": "A String", # Time the release was created.
+          # @OutputOnly
+      "name": "A String", # Resource name for the `Release`.
+          #
+          # `Release` names may be structured `app1/prod/v2` or flat `app1_prod_v2`
+          # which affords developers a great deal of flexibility in mapping the name
+          # to the style that best fits their existing development practices. For
+          # example, a name could refer to an environment, an app, a version, or some
+          # combination of three.
+          #
+          # In the table below, for the project name `projects/foo`, the following
+          # relative release paths show how flat and structured names might be chosen
+          # to match a desired development / deployment strategy.
+          #
+          # Use Case     | Flat Name           | Structured Name
+          # -------------|---------------------|----------------
+          # Environments | releases/qa         | releases/qa
+          # Apps         | releases/app1_qa    | releases/app1/qa
+          # Versions     | releases/app1_v2_qa | releases/app1/v2/qa
+          #
+          # The delimiter between the release name path elements can be almost anything
+          # and it should work equally well with the release name list filter, but in
+          # many ways the structured paths provide a clearer picture of the
+          # relationship between `Release` instances.
+          #
+          # Format: `projects/{project_id}/releases/{release_id}`
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name=None, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</code>
+  <pre>List the `Release` values for a project. This list may optionally be
+filtered by `Release` name or `Ruleset` id or both.
+
+Args:
+  name: string, Resource name for the project.
+
+Format: `projects/{project_id}` (required)
+  pageSize: integer, Page size to load. Maximum of 100. Defaults to 10.
+Note: `page_size` is just a hint and the service may choose to load less
+than `page_size` due to the size of the output. To traverse all of the
+releases, caller should iterate until the `page_token` is empty.
+  filter: string, `Release` filter. The list method supports filters with restrictions on the
+`Release` `name` and also on the `Ruleset` `ruleset_name`.
+
+Example 1) A filter of 'name=prod*' might return `Release`s with names
+within 'projects/foo' prefixed with 'prod':
+
+Name                          | Ruleset Name
+------------------------------|-------------
+projects/foo/releases/prod    | projects/foo/rulesets/uuid1234
+projects/foo/releases/prod/v1 | projects/foo/rulesets/uuid1234
+projects/foo/releases/prod/v2 | projects/foo/rulesets/uuid8888
+
+Example 2) A filter of `name=prod* ruleset_name=uuid1234` would return only
+`Release` instances for 'projects/foo' with names prefixed with 'prod'
+referring to the same `Ruleset` name of 'uuid1234':
+
+Name                          | Ruleset Name
+------------------------------|-------------
+projects/foo/releases/prod    | projects/foo/rulesets/1234
+projects/foo/releases/prod/v1 | projects/foo/rulesets/1234
+
+In the examples, the filter parameters refer to the search filters for
+release and ruleset names are relative to the project releases and rulesets
+collections. Fully qualified prefixed may also be used. e.g.
+`name=projects/foo/releases/prod* ruleset_name=projects/foo/rulesets/uuid1`
+  pageToken: string, Next page token for the next batch of `Release` instances.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response for FirebaseRulesService.ListReleases.
+    "nextPageToken": "A String", # The pagination token to retrieve the next page of results. If the value is
+        # empty, no further results remain.
+    "releases": [ # List of `Release` instances.
+      { # `Release` is a named reference to a `Ruleset`. Once a `Release` refers to a
+            # `Ruleset`, rules-enabled services will be able to enforce the `Ruleset`.
+          "updateTime": "A String", # Time the release was updated.
+              # @OutputOnly
+          "rulesetName": "A String", # Name of the `Ruleset` referred to by this `Release`. The `Ruleset` must
+              # exist the `Release` to be created.
+          "createTime": "A String", # Time the release was created.
+              # @OutputOnly
+          "name": "A String", # Resource name for the `Release`.
+              #
+              # `Release` names may be structured `app1/prod/v2` or flat `app1_prod_v2`
+              # which affords developers a great deal of flexibility in mapping the name
+              # to the style that best fits their existing development practices. For
+              # example, a name could refer to an environment, an app, a version, or some
+              # combination of three.
+              #
+              # In the table below, for the project name `projects/foo`, the following
+              # relative release paths show how flat and structured names might be chosen
+              # to match a desired development / deployment strategy.
+              #
+              # Use Case     | Flat Name           | Structured Name
+              # -------------|---------------------|----------------
+              # Environments | releases/qa         | releases/qa
+              # Apps         | releases/app1_qa    | releases/app1/qa
+              # Versions     | releases/app1_v2_qa | releases/app1/v2/qa
+              #
+              # The delimiter between the release name path elements can be almost anything
+              # and it should work equally well with the release name list filter, but in
+              # many ways the structured paths provide a clearer picture of the
+              # relationship between `Release` instances.
+              #
+              # Format: `projects/{project_id}/releases/{release_id}`
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(name=None, body, x__xgafv=None)</code>
+  <pre>Update a `Release`.
+
+Only updates to the `ruleset_name` field will be honored. `Release` rename
+is not supported. To create a `Release` use the CreateRelease method
+instead.
+
+Args:
+  name: string, Resource name for the `Release`.
+
+`Release` names may be structured `app1/prod/v2` or flat `app1_prod_v2`
+which affords developers a great deal of flexibility in mapping the name
+to the style that best fits their existing development practices. For
+example, a name could refer to an environment, an app, a version, or some
+combination of three.
+
+In the table below, for the project name `projects/foo`, the following
+relative release paths show how flat and structured names might be chosen
+to match a desired development / deployment strategy.
+
+Use Case     | Flat Name           | Structured Name
+-------------|---------------------|----------------
+Environments | releases/qa         | releases/qa
+Apps         | releases/app1_qa    | releases/app1/qa
+Versions     | releases/app1_v2_qa | releases/app1/v2/qa
+
+The delimiter between the release name path elements can be almost anything
+and it should work equally well with the release name list filter, but in
+many ways the structured paths provide a clearer picture of the
+relationship between `Release` instances.
+
+Format: `projects/{project_id}/releases/{release_id}`
+ (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # `Release` is a named reference to a `Ruleset`. Once a `Release` refers to a
+      # `Ruleset`, rules-enabled services will be able to enforce the `Ruleset`.
+    "updateTime": "A String", # Time the release was updated.
+        # @OutputOnly
+    "rulesetName": "A String", # Name of the `Ruleset` referred to by this `Release`. The `Ruleset` must
+        # exist the `Release` to be created.
+    "createTime": "A String", # Time the release was created.
+        # @OutputOnly
+    "name": "A String", # Resource name for the `Release`.
+        # 
+        # `Release` names may be structured `app1/prod/v2` or flat `app1_prod_v2`
+        # which affords developers a great deal of flexibility in mapping the name
+        # to the style that best fits their existing development practices. For
+        # example, a name could refer to an environment, an app, a version, or some
+        # combination of three.
+        # 
+        # In the table below, for the project name `projects/foo`, the following
+        # relative release paths show how flat and structured names might be chosen
+        # to match a desired development / deployment strategy.
+        # 
+        # Use Case     | Flat Name           | Structured Name
+        # -------------|---------------------|----------------
+        # Environments | releases/qa         | releases/qa
+        # Apps         | releases/app1_qa    | releases/app1/qa
+        # Versions     | releases/app1_v2_qa | releases/app1/v2/qa
+        # 
+        # The delimiter between the release name path elements can be almost anything
+        # and it should work equally well with the release name list filter, but in
+        # many ways the structured paths provide a clearer picture of the
+        # relationship between `Release` instances.
+        # 
+        # Format: `projects/{project_id}/releases/{release_id}`
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # `Release` is a named reference to a `Ruleset`. Once a `Release` refers to a
+        # `Ruleset`, rules-enabled services will be able to enforce the `Ruleset`.
+      "updateTime": "A String", # Time the release was updated.
+          # @OutputOnly
+      "rulesetName": "A String", # Name of the `Ruleset` referred to by this `Release`. The `Ruleset` must
+          # exist the `Release` to be created.
+      "createTime": "A String", # Time the release was created.
+          # @OutputOnly
+      "name": "A String", # Resource name for the `Release`.
+          #
+          # `Release` names may be structured `app1/prod/v2` or flat `app1_prod_v2`
+          # which affords developers a great deal of flexibility in mapping the name
+          # to the style that best fits their existing development practices. For
+          # example, a name could refer to an environment, an app, a version, or some
+          # combination of three.
+          #
+          # In the table below, for the project name `projects/foo`, the following
+          # relative release paths show how flat and structured names might be chosen
+          # to match a desired development / deployment strategy.
+          #
+          # Use Case     | Flat Name           | Structured Name
+          # -------------|---------------------|----------------
+          # Environments | releases/qa         | releases/qa
+          # Apps         | releases/app1_qa    | releases/app1/qa
+          # Versions     | releases/app1_v2_qa | releases/app1/v2/qa
+          #
+          # The delimiter between the release name path elements can be almost anything
+          # and it should work equally well with the release name list filter, but in
+          # many ways the structured paths provide a clearer picture of the
+          # relationship between `Release` instances.
+          #
+          # Format: `projects/{project_id}/releases/{release_id}`
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/firebaserules_v1.projects.rulesets.html b/docs/dyn/firebaserules_v1.projects.rulesets.html
new file mode 100644
index 0000000..6130a25
--- /dev/null
+++ b/docs/dyn/firebaserules_v1.projects.rulesets.html
@@ -0,0 +1,283 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="firebaserules_v1.html">Firebase Rules API</a> . <a href="firebaserules_v1.projects.html">projects</a> . <a href="firebaserules_v1.projects.rulesets.html">rulesets</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(name=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Create a `Ruleset` from `Source`.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Delete a `Ruleset` by resource name.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Get a `Ruleset` by name including the full `Source` contents.</p>
+<p class="toc_element">
+  <code><a href="#list">list(name=None, pageToken=None, x__xgafv=None, pageSize=None)</a></code></p>
+<p class="firstline">List `Ruleset` metadata only and optionally filter the results by Ruleset</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(name=None, body, x__xgafv=None)</code>
+  <pre>Create a `Ruleset` from `Source`.
+
+The `Ruleset` is given a unique generated name which is returned to the
+caller. `Source` containing syntactic or semantics errors will result in an
+error response indicating the first error encountered. For a detailed view
+of `Source` issues, use TestRuleset.
+
+Args:
+  name: string, Resource name for Project which owns this `Ruleset`.
+
+Format: `projects/{project_id}` (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # `Ruleset` is an immutable copy of `Source` with a globally unique identifier
+      # and a creation time.
+    "source": { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` for the `Ruleset`.
+      "files": [ # `File` set constituting the `Source` bundle.
+        { # `File` containing source content.
+          "content": "A String", # Textual Content.
+          "name": "A String", # File name.
+          "fingerprint": "A String", # Fingerprint (e.g. github sha) associated with the `File`.
+        },
+      ],
+    },
+    "createTime": "A String", # Time the `Ruleset` was created.
+        # @OutputOnly
+    "name": "A String", # Name of the `Ruleset`. The ruleset_id is auto generated by the service.
+        # Format: `projects/{project_id}/rulesets/{ruleset_id}`
+        # @OutputOnly
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # `Ruleset` is an immutable copy of `Source` with a globally unique identifier
+        # and a creation time.
+      "source": { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` for the `Ruleset`.
+        "files": [ # `File` set constituting the `Source` bundle.
+          { # `File` containing source content.
+            "content": "A String", # Textual Content.
+            "name": "A String", # File name.
+            "fingerprint": "A String", # Fingerprint (e.g. github sha) associated with the `File`.
+          },
+        ],
+      },
+      "createTime": "A String", # Time the `Ruleset` was created.
+          # @OutputOnly
+      "name": "A String", # Name of the `Ruleset`. The ruleset_id is auto generated by the service.
+          # Format: `projects/{project_id}/rulesets/{ruleset_id}`
+          # @OutputOnly
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name=None, x__xgafv=None)</code>
+  <pre>Delete a `Ruleset` by resource name.
+
+If the `Ruleset` is referenced by a `Release` the operation will fail.
+
+Args:
+  name: string, Resource name for the ruleset to delete.
+
+Format: `projects/{project_id}/rulesets/{ruleset_id}` (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated
+      # empty messages in your APIs. A typical example is to use it as the request
+      # or the response type of an API method. For instance:
+      #
+      #     service Foo {
+      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+      #     }
+      #
+      # The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name=None, x__xgafv=None)</code>
+  <pre>Get a `Ruleset` by name including the full `Source` contents.
+
+Args:
+  name: string, Resource name for the ruleset to get.
+
+Format: `projects/{project_id}/rulesets/{ruleset_id}` (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # `Ruleset` is an immutable copy of `Source` with a globally unique identifier
+        # and a creation time.
+      "source": { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` for the `Ruleset`.
+        "files": [ # `File` set constituting the `Source` bundle.
+          { # `File` containing source content.
+            "content": "A String", # Textual Content.
+            "name": "A String", # File name.
+            "fingerprint": "A String", # Fingerprint (e.g. github sha) associated with the `File`.
+          },
+        ],
+      },
+      "createTime": "A String", # Time the `Ruleset` was created.
+          # @OutputOnly
+      "name": "A String", # Name of the `Ruleset`. The ruleset_id is auto generated by the service.
+          # Format: `projects/{project_id}/rulesets/{ruleset_id}`
+          # @OutputOnly
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name=None, pageToken=None, x__xgafv=None, pageSize=None)</code>
+  <pre>List `Ruleset` metadata only and optionally filter the results by Ruleset
+name.
+
+The full `Source` contents of a `Ruleset` may be retrieved with
+GetRuleset.
+
+Args:
+  name: string, Resource name for the project.
+
+Format: `projects/{project_id}` (required)
+  pageToken: string, Next page token for loading the next batch of `Ruleset` instances.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+  pageSize: integer, Page size to load. Maximum of 100. Defaults to 10.
+Note: `page_size` is just a hint and the service may choose to load less
+than `page_size` due to the size of the output. To traverse all of the
+releases, caller should iterate until the `page_token` is empty.
+
+Returns:
+  An object of the form:
+
+    { # The response for FirebaseRulesService.ListRulesets
+    "nextPageToken": "A String", # The pagination token to retrieve the next page of results. If the value is
+        # empty, no further results remain.
+    "rulesets": [ # List of `Ruleset` instances.
+      { # `Ruleset` is an immutable copy of `Source` with a globally unique identifier
+            # and a creation time.
+          "source": { # `Source` is one or more `File` messages comprising a logical set of rules. # `Source` for the `Ruleset`.
+            "files": [ # `File` set constituting the `Source` bundle.
+              { # `File` containing source content.
+                "content": "A String", # Textual Content.
+                "name": "A String", # File name.
+                "fingerprint": "A String", # Fingerprint (e.g. github sha) associated with the `File`.
+              },
+            ],
+          },
+          "createTime": "A String", # Time the `Ruleset` was created.
+              # @OutputOnly
+          "name": "A String", # Name of the `Ruleset`. The ruleset_id is auto generated by the service.
+              # Format: `projects/{project_id}/rulesets/{ruleset_id}`
+              # @OutputOnly
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/gamesManagement_v1management.applications.html b/docs/dyn/gamesManagement_v1management.applications.html
index d8838c2..0c30de9 100644
--- a/docs/dyn/gamesManagement_v1management.applications.html
+++ b/docs/dyn/gamesManagement_v1management.applications.html
@@ -111,7 +111,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "gamesManagement#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string gamesManagement#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -127,6 +130,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "kind": "gamesManagement#hiddenPlayer", # Uniquely identifies the type of this resource. Value is always the fixed string gamesManagement#hiddenPlayer.
diff --git a/docs/dyn/games_v1.achievements.html b/docs/dyn/games_v1.achievements.html
index 15092bf..b1d9390 100644
--- a/docs/dyn/games_v1.achievements.html
+++ b/docs/dyn/games_v1.achievements.html
@@ -110,7 +110,7 @@
 
     { # This is a JSON template for an achievement increment response
     "currentSteps": 42, # The current steps recorded for this incremental achievement.
-    "newlyUnlocked": True or False, # Whether the the current steps for the achievement has reached the number of steps required to unlock.
+    "newlyUnlocked": True or False, # Whether the current steps for the achievement has reached the number of steps required to unlock.
     "kind": "games#achievementIncrementResponse", # Uniquely identifies the type of this resource. Value is always the fixed string games#achievementIncrementResponse.
   }</pre>
 </div>
diff --git a/docs/dyn/games_v1.applications.html b/docs/dyn/games_v1.applications.html
index f0bb357..fe053c7 100644
--- a/docs/dyn/games_v1.applications.html
+++ b/docs/dyn/games_v1.applications.html
@@ -187,6 +187,7 @@
     { # This is a JSON template for a third party application verification response resource.
     "player_id": "A String", # The ID of the player that was issued the auth token used in this request.
     "kind": "games#applicationVerifyResponse", # Uniquely identifies the type of this resource. Value is always the fixed string games#applicationVerifyResponse.
+    "alternate_player_id": "A String", # An alternate ID that was once used for the player that was issued the auth token used in this request. (This field is not normally populated.)
   }</pre>
 </div>
 
diff --git a/docs/dyn/games_v1.players.html b/docs/dyn/games_v1.players.html
index 38a5681..39e147c 100644
--- a/docs/dyn/games_v1.players.html
+++ b/docs/dyn/games_v1.players.html
@@ -110,7 +110,10 @@
     },
     "playerId": "A String", # The ID of the player.
     "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-    "title": "A String", # The player's title rewarded for their game activities.
+    "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+      "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+      "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+    },
     "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
       "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
       "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -129,6 +132,7 @@
       },
     },
     "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+    "title": "A String", # The player's title rewarded for their game activities.
     "avatarImageUrl": "A String", # The base URL for the image that represents the player.
   }</pre>
 </div>
@@ -169,7 +173,10 @@
         },
         "playerId": "A String", # The ID of the player.
         "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-        "title": "A String", # The player's title rewarded for their game activities.
+        "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+          "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+          "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+        },
         "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
           "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
           "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -188,6 +195,7 @@
           },
         },
         "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+        "title": "A String", # The player's title rewarded for their game activities.
         "avatarImageUrl": "A String", # The base URL for the image that represents the player.
       },
     ],
diff --git a/docs/dyn/games_v1.rooms.html b/docs/dyn/games_v1.rooms.html
index f0307d1..860c71b 100644
--- a/docs/dyn/games_v1.rooms.html
+++ b/docs/dyn/games_v1.rooms.html
@@ -214,7 +214,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -233,6 +236,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "clientAddress": { # This is a JSON template for the client address when setting up a room. # Client address for the participant.
@@ -334,7 +338,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -353,6 +360,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "clientAddress": { # This is a JSON template for the client address when setting up a room. # Client address for the participant.
@@ -463,7 +471,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -482,6 +493,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "clientAddress": { # This is a JSON template for the client address when setting up a room. # Client address for the participant.
@@ -606,7 +618,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -625,6 +640,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "clientAddress": { # This is a JSON template for the client address when setting up a room. # Client address for the participant.
@@ -820,7 +836,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -839,6 +858,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "clientAddress": { # This is a JSON template for the client address when setting up a room. # Client address for the participant.
@@ -944,7 +964,10 @@
               },
               "playerId": "A String", # The ID of the player.
               "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-              "title": "A String", # The player's title rewarded for their game activities.
+              "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+                "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+                "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+              },
               "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
                 "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
                 "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -963,6 +986,7 @@
                 },
               },
               "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+              "title": "A String", # The player's title rewarded for their game activities.
               "avatarImageUrl": "A String", # The base URL for the image that represents the player.
             },
             "clientAddress": { # This is a JSON template for the client address when setting up a room. # Client address for the participant.
@@ -1093,7 +1117,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -1112,6 +1139,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "clientAddress": { # This is a JSON template for the client address when setting up a room. # Client address for the participant.
diff --git a/docs/dyn/games_v1.scores.html b/docs/dyn/games_v1.scores.html
index 8e230d2..cf6eeb0 100644
--- a/docs/dyn/games_v1.scores.html
+++ b/docs/dyn/games_v1.scores.html
@@ -172,7 +172,10 @@
       },
       "playerId": "A String", # The ID of the player.
       "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-      "title": "A String", # The player's title rewarded for their game activities.
+      "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+        "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+        "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+      },
       "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
         "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
         "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -191,6 +194,7 @@
         },
       },
       "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+      "title": "A String", # The player's title rewarded for their game activities.
       "avatarImageUrl": "A String", # The base URL for the image that represents the player.
     },
   }</pre>
@@ -263,7 +267,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -282,6 +289,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "formattedScoreRank": "A String", # The localized string for the rank of this score for this leaderboard.
@@ -314,7 +322,10 @@
         },
         "playerId": "A String", # The ID of the player.
         "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-        "title": "A String", # The player's title rewarded for their game activities.
+        "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+          "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+          "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+        },
         "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
           "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
           "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -333,6 +344,7 @@
           },
         },
         "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+        "title": "A String", # The player's title rewarded for their game activities.
         "avatarImageUrl": "A String", # The base URL for the image that represents the player.
       },
       "formattedScoreRank": "A String", # The localized string for the rank of this score for this leaderboard.
@@ -398,7 +410,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -417,6 +432,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "formattedScoreRank": "A String", # The localized string for the rank of this score for this leaderboard.
@@ -449,7 +465,10 @@
         },
         "playerId": "A String", # The ID of the player.
         "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-        "title": "A String", # The player's title rewarded for their game activities.
+        "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+          "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+          "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+        },
         "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
           "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
           "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -468,6 +487,7 @@
           },
         },
         "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+        "title": "A String", # The player's title rewarded for their game activities.
         "avatarImageUrl": "A String", # The base URL for the image that represents the player.
       },
       "formattedScoreRank": "A String", # The localized string for the rank of this score for this leaderboard.
diff --git a/docs/dyn/games_v1.turnBasedMatches.html b/docs/dyn/games_v1.turnBasedMatches.html
index e8c9090..922e99a 100644
--- a/docs/dyn/games_v1.turnBasedMatches.html
+++ b/docs/dyn/games_v1.turnBasedMatches.html
@@ -220,7 +220,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -239,6 +242,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -358,7 +362,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -377,6 +384,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -532,7 +540,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -551,6 +562,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -671,7 +683,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -690,6 +705,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -809,7 +825,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -828,6 +847,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -947,7 +967,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -966,6 +989,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -1087,7 +1111,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -1106,6 +1133,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -1231,7 +1259,10 @@
               },
               "playerId": "A String", # The ID of the player.
               "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-              "title": "A String", # The player's title rewarded for their game activities.
+              "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+                "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+                "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+              },
               "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
                 "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
                 "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -1250,6 +1281,7 @@
                 },
               },
               "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+              "title": "A String", # The player's title rewarded for their game activities.
               "avatarImageUrl": "A String", # The base URL for the image that represents the player.
             },
             "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -1388,7 +1420,10 @@
             },
             "playerId": "A String", # The ID of the player.
             "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-            "title": "A String", # The player's title rewarded for their game activities.
+            "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+              "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+              "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+            },
             "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
               "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
               "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -1407,6 +1442,7 @@
               },
             },
             "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+            "title": "A String", # The player's title rewarded for their game activities.
             "avatarImageUrl": "A String", # The base URL for the image that represents the player.
           },
           "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -1514,7 +1550,10 @@
             },
             "playerId": "A String", # The ID of the player.
             "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-            "title": "A String", # The player's title rewarded for their game activities.
+            "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+              "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+              "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+            },
             "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
               "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
               "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -1533,6 +1572,7 @@
               },
             },
             "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+            "title": "A String", # The player's title rewarded for their game activities.
             "avatarImageUrl": "A String", # The base URL for the image that represents the player.
           },
           "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -1659,7 +1699,10 @@
               },
               "playerId": "A String", # The ID of the player.
               "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-              "title": "A String", # The player's title rewarded for their game activities.
+              "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+                "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+                "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+              },
               "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
                 "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
                 "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -1678,6 +1721,7 @@
                 },
               },
               "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+              "title": "A String", # The player's title rewarded for their game activities.
               "avatarImageUrl": "A String", # The base URL for the image that represents the player.
             },
             "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
@@ -1843,7 +1887,10 @@
           },
           "playerId": "A String", # The ID of the player.
           "bannerUrlPortrait": "A String", # The url to the portrait mode player banner image.
-          "title": "A String", # The player's title rewarded for their game activities.
+          "profileSettings": { # This is a JSON template for profile settings # The player's profile settings. Controls whether or not the player's profile is visible to other players.
+            "kind": "games#profileSettings", # Uniquely identifies the type of this resource. Value is always the fixed string games#profileSettings.
+            "profileVisible": True or False, # The player's current profile visibility. This field is visible to both 1P and 3P APIs.
+          },
           "experienceInfo": { # This is a JSON template for 1P/3P metadata about the player's experience. # An object to represent Play Game experience information for the player.
             "lastLevelUpTimestampMillis": "A String", # The timestamp when the player was leveled up, in millis since Unix epoch UTC.
             "currentExperiencePoints": "A String", # The current number of experience points for the player.
@@ -1862,6 +1909,7 @@
             },
           },
           "bannerUrlLandscape": "A String", # The url to the landscape mode player banner image.
+          "title": "A String", # The player's title rewarded for their game activities.
           "avatarImageUrl": "A String", # The base URL for the image that represents the player.
         },
         "id": "A String", # An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts.
diff --git a/docs/dyn/genomics_v1.annotations.html b/docs/dyn/genomics_v1.annotations.html
new file mode 100644
index 0000000..aa05359
--- /dev/null
+++ b/docs/dyn/genomics_v1.annotations.html
@@ -0,0 +1,665 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="genomics_v1.html">Genomics API</a> . <a href="genomics_v1.annotations.html">annotations</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#batchCreate">batchCreate(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates one or more new annotations atomically. All annotations must belong to the same annotation set. Caller must have WRITE permission for this annotation set. For optimal performance, batch positionally adjacent annotations together. If the request has a systemic issue, such as an attempt to write to an inaccessible annotation set, the entire RPC will fail accordingly. For lesser data issues, when possible an error will be isolated to the corresponding batch entry in the response; the remaining well formed annotations will be created normally. For details on the requirements for each individual annotation resource, see CreateAnnotation.</p>
+<p class="toc_element">
+  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a new annotation. Caller must have WRITE permission for the associated annotation set. The following fields are required: * annotationSetId * referenceName or referenceId ### Transcripts For annotations of type TRANSCRIPT, the following fields of transcript must be provided: * exons.start * exons.end All other fields may be optionally specified, unless documented as being server-generated (for example, the `id` field). The annotated range must be no longer than 100Mbp (mega base pairs). See the Annotation resource for additional restrictions on each field.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(annotationId, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes an annotation. Caller must have WRITE permission for the associated annotation set.</p>
+<p class="toc_element">
+  <code><a href="#get">get(annotationId, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets an annotation. Caller must have READ permission for the associated annotation set.</p>
+<p class="toc_element">
+  <code><a href="#search">search(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Searches for annotations that match the given criteria. Results are ordered by genomic coordinate (by reference sequence, then position). Annotations with equivalent genomic coordinates are returned in an unspecified order. This order is consistent, such that two queries for the same content (regardless of page size) yield annotations in the same order across their respective streams of paginated responses. Caller must have READ permission for the queried annotation sets.</p>
+<p class="toc_element">
+  <code><a href="#update">update(annotationId, body, updateMask=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an annotation. Caller must have WRITE permission for the associated dataset.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="batchCreate">batchCreate(body, x__xgafv=None)</code>
+  <pre>Creates one or more new annotations atomically. All annotations must belong to the same annotation set. Caller must have WRITE permission for this annotation set. For optimal performance, batch positionally adjacent annotations together. If the request has a systemic issue, such as an attempt to write to an inaccessible annotation set, the entire RPC will fail accordingly. For lesser data issues, when possible an error will be isolated to the corresponding batch entry in the response; the remaining well formed annotations will be created normally. For details on the requirements for each individual annotation resource, see CreateAnnotation.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{
+    "annotations": [ # The annotations to be created. At most 4096 can be specified in a single request.
+      { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are `GENE` and `VARIANT`.
+        "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+          "a_key": [
+            "",
+          ],
+        },
+        "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
+        "end": "A String", # The end position of the range on the reference, 0-based exclusive.
+        "name": "A String", # The display name of this annotation.
+        "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type `TRANSCRIPT`.
+          "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them. Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
+            "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+            "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+          },
+          "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes. Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns. Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence. Exons are ordered by start position and may not overlap.
+            {
+              "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and **not** the containing annotation start.
+              "frame": 42, # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.reverse_strand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end `- 1`. Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
+              "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and *not* the containing annotation start.
+            },
+          ],
+          "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
+        },
+        "variant": { # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type `VARIANT`.
+          "type": "A String", # Type has been adapted from ClinVar's list of variant types.
+          "effect": "A String", # Effect of the variant on the coding sequence.
+          "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
+            "A String",
+          ],
+          "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
+          "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
+          "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
+            {
+              "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
+              "externalIds": [ # The set of external IDs for this condition.
+                {
+                  "sourceName": "A String", # The name of the source of this data.
+                  "id": "A String", # The id used by the source of this data.
+                },
+              ],
+              "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
+              "names": [ # A set of names for the condition.
+                "A String",
+              ],
+            },
+          ],
+          "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
+        },
+        "start": "A String", # The start position of the range on the reference, 0-based inclusive.
+        "annotationSetId": "A String", # The annotation set to which this annotation belongs.
+        "referenceName": "A String", # The display name corresponding to the reference specified by `referenceId`, for example `chr1`, `1`, or `chrX`.
+        "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
+        "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
+        "id": "A String", # The server-generated annotation ID, unique across all annotations.
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    {
+    "entries": [ # The resulting per-annotation entries, ordered consistently with the original request.
+      {
+        "status": { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model is designed to be: - Simple to use and understand for most users - Flexible enough to meet unexpected needs # Overview The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` which can be used for common error conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments. Example uses of this error model include: - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting purpose. - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response. - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message. - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons. # The creation status.
+          "message": "A String", # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
+          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+          "details": [ # A list of messages that carry the error details. There will be a common set of message types for APIs to use.
+            {
+              "a_key": "", # Properties of the object. Contains field @ype with type URL.
+            },
+          ],
+        },
+        "annotation": { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are `GENE` and `VARIANT`. # The created annotation, if creation was successful.
+          "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+            "a_key": [
+              "",
+            ],
+          },
+          "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
+          "end": "A String", # The end position of the range on the reference, 0-based exclusive.
+          "name": "A String", # The display name of this annotation.
+          "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type `TRANSCRIPT`.
+            "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them. Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
+              "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+              "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+            },
+            "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes. Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns. Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence. Exons are ordered by start position and may not overlap.
+              {
+                "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and **not** the containing annotation start.
+                "frame": 42, # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.reverse_strand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end `- 1`. Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
+                "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and *not* the containing annotation start.
+              },
+            ],
+            "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
+          },
+          "variant": { # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type `VARIANT`.
+            "type": "A String", # Type has been adapted from ClinVar's list of variant types.
+            "effect": "A String", # Effect of the variant on the coding sequence.
+            "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
+              "A String",
+            ],
+            "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
+            "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
+            "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
+              {
+                "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
+                "externalIds": [ # The set of external IDs for this condition.
+                  {
+                    "sourceName": "A String", # The name of the source of this data.
+                    "id": "A String", # The id used by the source of this data.
+                  },
+                ],
+                "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
+                "names": [ # A set of names for the condition.
+                  "A String",
+                ],
+              },
+            ],
+            "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
+          },
+          "start": "A String", # The start position of the range on the reference, 0-based inclusive.
+          "annotationSetId": "A String", # The annotation set to which this annotation belongs.
+          "referenceName": "A String", # The display name corresponding to the reference specified by `referenceId`, for example `chr1`, `1`, or `chrX`.
+          "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
+          "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
+          "id": "A String", # The server-generated annotation ID, unique across all annotations.
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="create">create(body, x__xgafv=None)</code>
+  <pre>Creates a new annotation. Caller must have WRITE permission for the associated annotation set. The following fields are required: * annotationSetId * referenceName or referenceId ### Transcripts For annotations of type TRANSCRIPT, the following fields of transcript must be provided: * exons.start * exons.end All other fields may be optionally specified, unless documented as being server-generated (for example, the `id` field). The annotated range must be no longer than 100Mbp (mega base pairs). See the Annotation resource for additional restrictions on each field.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are `GENE` and `VARIANT`.
+  "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+    "a_key": [
+      "",
+    ],
+  },
+  "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
+  "end": "A String", # The end position of the range on the reference, 0-based exclusive.
+  "name": "A String", # The display name of this annotation.
+  "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type `TRANSCRIPT`.
+    "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them. Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
+      "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+      "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+    },
+    "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes. Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns. Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence. Exons are ordered by start position and may not overlap.
+      {
+        "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and **not** the containing annotation start.
+        "frame": 42, # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.reverse_strand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end `- 1`. Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
+        "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and *not* the containing annotation start.
+      },
+    ],
+    "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
+  },
+  "variant": { # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type `VARIANT`.
+    "type": "A String", # Type has been adapted from ClinVar's list of variant types.
+    "effect": "A String", # Effect of the variant on the coding sequence.
+    "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
+      "A String",
+    ],
+    "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
+    "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
+    "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
+      {
+        "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
+        "externalIds": [ # The set of external IDs for this condition.
+          {
+            "sourceName": "A String", # The name of the source of this data.
+            "id": "A String", # The id used by the source of this data.
+          },
+        ],
+        "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
+        "names": [ # A set of names for the condition.
+          "A String",
+        ],
+      },
+    ],
+    "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
+  },
+  "start": "A String", # The start position of the range on the reference, 0-based inclusive.
+  "annotationSetId": "A String", # The annotation set to which this annotation belongs.
+  "referenceName": "A String", # The display name corresponding to the reference specified by `referenceId`, for example `chr1`, `1`, or `chrX`.
+  "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
+  "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
+  "id": "A String", # The server-generated annotation ID, unique across all annotations.
+}
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are `GENE` and `VARIANT`.
+    "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+      "a_key": [
+        "",
+      ],
+    },
+    "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
+    "end": "A String", # The end position of the range on the reference, 0-based exclusive.
+    "name": "A String", # The display name of this annotation.
+    "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type `TRANSCRIPT`.
+      "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them. Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
+        "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+        "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+      },
+      "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes. Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns. Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence. Exons are ordered by start position and may not overlap.
+        {
+          "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and **not** the containing annotation start.
+          "frame": 42, # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.reverse_strand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end `- 1`. Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
+          "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and *not* the containing annotation start.
+        },
+      ],
+      "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
+    },
+    "variant": { # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type `VARIANT`.
+      "type": "A String", # Type has been adapted from ClinVar's list of variant types.
+      "effect": "A String", # Effect of the variant on the coding sequence.
+      "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
+        "A String",
+      ],
+      "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
+      "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
+      "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
+        {
+          "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
+          "externalIds": [ # The set of external IDs for this condition.
+            {
+              "sourceName": "A String", # The name of the source of this data.
+              "id": "A String", # The id used by the source of this data.
+            },
+          ],
+          "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
+          "names": [ # A set of names for the condition.
+            "A String",
+          ],
+        },
+      ],
+      "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
+    },
+    "start": "A String", # The start position of the range on the reference, 0-based inclusive.
+    "annotationSetId": "A String", # The annotation set to which this annotation belongs.
+    "referenceName": "A String", # The display name corresponding to the reference specified by `referenceId`, for example `chr1`, `1`, or `chrX`.
+    "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
+    "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
+    "id": "A String", # The server-generated annotation ID, unique across all annotations.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(annotationId, x__xgafv=None)</code>
+  <pre>Deletes an annotation. Caller must have WRITE permission for the associated annotation set.
+
+Args:
+  annotationId: string, The ID of the annotation to be deleted. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(annotationId, x__xgafv=None)</code>
+  <pre>Gets an annotation. Caller must have READ permission for the associated annotation set.
+
+Args:
+  annotationId: string, The ID of the annotation to be retrieved. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are `GENE` and `VARIANT`.
+    "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+      "a_key": [
+        "",
+      ],
+    },
+    "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
+    "end": "A String", # The end position of the range on the reference, 0-based exclusive.
+    "name": "A String", # The display name of this annotation.
+    "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type `TRANSCRIPT`.
+      "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them. Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
+        "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+        "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+      },
+      "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes. Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns. Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence. Exons are ordered by start position and may not overlap.
+        {
+          "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and **not** the containing annotation start.
+          "frame": 42, # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.reverse_strand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end `- 1`. Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
+          "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and *not* the containing annotation start.
+        },
+      ],
+      "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
+    },
+    "variant": { # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type `VARIANT`.
+      "type": "A String", # Type has been adapted from ClinVar's list of variant types.
+      "effect": "A String", # Effect of the variant on the coding sequence.
+      "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
+        "A String",
+      ],
+      "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
+      "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
+      "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
+        {
+          "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
+          "externalIds": [ # The set of external IDs for this condition.
+            {
+              "sourceName": "A String", # The name of the source of this data.
+              "id": "A String", # The id used by the source of this data.
+            },
+          ],
+          "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
+          "names": [ # A set of names for the condition.
+            "A String",
+          ],
+        },
+      ],
+      "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
+    },
+    "start": "A String", # The start position of the range on the reference, 0-based inclusive.
+    "annotationSetId": "A String", # The annotation set to which this annotation belongs.
+    "referenceName": "A String", # The display name corresponding to the reference specified by `referenceId`, for example `chr1`, `1`, or `chrX`.
+    "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
+    "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
+    "id": "A String", # The server-generated annotation ID, unique across all annotations.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="search">search(body, x__xgafv=None)</code>
+  <pre>Searches for annotations that match the given criteria. Results are ordered by genomic coordinate (by reference sequence, then position). Annotations with equivalent genomic coordinates are returned in an unspecified order. This order is consistent, such that two queries for the same content (regardless of page size) yield annotations in the same order across their respective streams of paginated responses. Caller must have READ permission for the queried annotation sets.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{
+    "referenceId": "A String", # The ID of the reference to query.
+    "end": "A String", # The end position of the range on the reference, 0-based exclusive. If referenceId or referenceName must be specified, Defaults to the length of the reference.
+    "pageSize": 42, # The maximum number of results to return in a single page. If unspecified, defaults to 256. The maximum value is 2048.
+    "pageToken": "A String", # The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of `nextPageToken` from the previous response.
+    "annotationSetIds": [ # Required. The annotation sets to search within. The caller must have `READ` access to these annotation sets. All queried annotation sets must have the same type.
+      "A String",
+    ],
+    "start": "A String", # The start position of the range on the reference, 0-based inclusive. If specified, referenceId or referenceName must be specified. Defaults to 0.
+    "referenceName": "A String", # The name of the reference to query, within the reference set associated with this query.
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    {
+    "nextPageToken": "A String", # The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results. This field will be empty if there aren't any additional results.
+    "annotations": [ # The matching annotations.
+      { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are `GENE` and `VARIANT`.
+        "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+          "a_key": [
+            "",
+          ],
+        },
+        "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
+        "end": "A String", # The end position of the range on the reference, 0-based exclusive.
+        "name": "A String", # The display name of this annotation.
+        "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type `TRANSCRIPT`.
+          "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them. Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
+            "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+            "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+          },
+          "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes. Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns. Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence. Exons are ordered by start position and may not overlap.
+            {
+              "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and **not** the containing annotation start.
+              "frame": 42, # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.reverse_strand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end `- 1`. Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
+              "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and *not* the containing annotation start.
+            },
+          ],
+          "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
+        },
+        "variant": { # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type `VARIANT`.
+          "type": "A String", # Type has been adapted from ClinVar's list of variant types.
+          "effect": "A String", # Effect of the variant on the coding sequence.
+          "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
+            "A String",
+          ],
+          "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
+          "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
+          "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
+            {
+              "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
+              "externalIds": [ # The set of external IDs for this condition.
+                {
+                  "sourceName": "A String", # The name of the source of this data.
+                  "id": "A String", # The id used by the source of this data.
+                },
+              ],
+              "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
+              "names": [ # A set of names for the condition.
+                "A String",
+              ],
+            },
+          ],
+          "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
+        },
+        "start": "A String", # The start position of the range on the reference, 0-based inclusive.
+        "annotationSetId": "A String", # The annotation set to which this annotation belongs.
+        "referenceName": "A String", # The display name corresponding to the reference specified by `referenceId`, for example `chr1`, `1`, or `chrX`.
+        "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
+        "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
+        "id": "A String", # The server-generated annotation ID, unique across all annotations.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(annotationId, body, updateMask=None, x__xgafv=None)</code>
+  <pre>Updates an annotation. Caller must have WRITE permission for the associated dataset.
+
+Args:
+  annotationId: string, The ID of the annotation to be updated. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are `GENE` and `VARIANT`.
+  "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+    "a_key": [
+      "",
+    ],
+  },
+  "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
+  "end": "A String", # The end position of the range on the reference, 0-based exclusive.
+  "name": "A String", # The display name of this annotation.
+  "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type `TRANSCRIPT`.
+    "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them. Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
+      "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+      "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+    },
+    "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes. Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns. Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence. Exons are ordered by start position and may not overlap.
+      {
+        "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and **not** the containing annotation start.
+        "frame": 42, # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.reverse_strand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end `- 1`. Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
+        "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and *not* the containing annotation start.
+      },
+    ],
+    "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
+  },
+  "variant": { # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type `VARIANT`.
+    "type": "A String", # Type has been adapted from ClinVar's list of variant types.
+    "effect": "A String", # Effect of the variant on the coding sequence.
+    "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
+      "A String",
+    ],
+    "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
+    "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
+    "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
+      {
+        "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
+        "externalIds": [ # The set of external IDs for this condition.
+          {
+            "sourceName": "A String", # The name of the source of this data.
+            "id": "A String", # The id used by the source of this data.
+          },
+        ],
+        "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
+        "names": [ # A set of names for the condition.
+          "A String",
+        ],
+      },
+    ],
+    "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
+  },
+  "start": "A String", # The start position of the range on the reference, 0-based inclusive.
+  "annotationSetId": "A String", # The annotation set to which this annotation belongs.
+  "referenceName": "A String", # The display name corresponding to the reference specified by `referenceId`, for example `chr1`, `1`, or `chrX`.
+  "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
+  "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
+  "id": "A String", # The server-generated annotation ID, unique across all annotations.
+}
+
+  updateMask: string, An optional mask specifying which fields to update. Mutable fields are name, variant, transcript, and info. If unspecified, all mutable fields will be updated.
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # An annotation describes a region of reference genome. The value of an annotation may be one of several canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific sample or individual (though a client could choose to use annotations in this way). Example canonical annotation types are `GENE` and `VARIANT`.
+    "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+      "a_key": [
+        "",
+      ],
+    },
+    "referenceId": "A String", # The ID of the Google Genomics reference associated with this range.
+    "end": "A String", # The end position of the range on the reference, 0-based exclusive.
+    "name": "A String", # The display name of this annotation.
+    "transcript": { # A transcript represents the assertion that a particular region of the reference genome may be transcribed as RNA. # A transcript value represents the assertion that a particular region of the reference genome may be transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object. This field is only set for annotations of type `TRANSCRIPT`.
+      "codingSequence": { # The range of the coding sequence for this transcript, if any. To determine the exact ranges of coding sequence, intersect this range with those of the exons, if any. If there are any exons, the codingSequence must start and end within them. Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to produce the original transcript mRNA.
+        "start": "A String", # The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+        "end": "A String", # The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note that this position is relative to the reference start, and *not* the containing annotation start.
+      },
+      "exons": [ # The exons that compose this transcript. This field should be unset for genomes where transcript splicing does not occur, for example prokaryotes. Introns are regions of the transcript that are not included in the spliced RNA product. Though not explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are introns. Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of exons bounded by the codingSequence correspond to coding DNA sequence. Exons are ordered by start position and may not overlap.
+        {
+          "start": "A String", # The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note that this is relative to the reference start, and **not** the containing annotation start.
+          "frame": 42, # The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent on the strandedness of this annotation (see Annotation.reverse_strand). For forward stranded annotations, this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the exon.end `- 1`. Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be populated for all or none of the coding exons.
+          "end": "A String", # The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that this is relative to the reference start, and *not* the containing annotation start.
+        },
+      ],
+      "geneId": "A String", # The annotation ID of the gene from which this transcript is transcribed.
+    },
+    "variant": { # A variant annotation, which describes the effect of a variant on the genome, the coding sequence, and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for annotations of type `VARIANT`.
+      "type": "A String", # Type has been adapted from ClinVar's list of variant types.
+      "effect": "A String", # Effect of the variant on the coding sequence.
+      "transcriptIds": [ # Google annotation IDs of the transcripts affected by this variant. These should be provided when the variant is created.
+        "A String",
+      ],
+      "alternateBases": "A String", # The alternate allele for this variant. If multiple alternate alleles exist at this location, create a separate variant for each one, as they may represent distinct conditions.
+      "clinicalSignificance": "A String", # Describes the clinical significance of a variant. It is adapted from the ClinVar controlled vocabulary for clinical significance described at: http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/
+      "conditions": [ # The set of conditions associated with this variant. A condition describes the way a variant influences human health.
+        {
+          "conceptId": "A String", # The MedGen concept id associated with this gene. Search for these IDs at http://www.ncbi.nlm.nih.gov/medgen/
+          "externalIds": [ # The set of external IDs for this condition.
+            {
+              "sourceName": "A String", # The name of the source of this data.
+              "id": "A String", # The id used by the source of this data.
+            },
+          ],
+          "omimId": "A String", # The OMIM id for this condition. Search for these IDs at http://omim.org/
+          "names": [ # A set of names for the condition.
+            "A String",
+          ],
+        },
+      ],
+      "geneId": "A String", # Google annotation ID of the gene affected by this variant. This should be provided when the variant is created.
+    },
+    "start": "A String", # The start position of the range on the reference, 0-based inclusive.
+    "annotationSetId": "A String", # The annotation set to which this annotation belongs.
+    "referenceName": "A String", # The display name corresponding to the reference specified by `referenceId`, for example `chr1`, `1`, or `chrX`.
+    "reverseStrand": True or False, # Whether this range refers to the reverse strand, as opposed to the forward strand. Note that regardless of this field, the start/end position of the range always refer to the forward strand.
+    "type": "A String", # The data type for this annotation. Must match the containing annotation set's type.
+    "id": "A String", # The server-generated annotation ID, unique across all annotations.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/genomics_v1.annotationsets.html b/docs/dyn/genomics_v1.annotationsets.html
new file mode 100644
index 0000000..1a24a9e
--- /dev/null
+++ b/docs/dyn/genomics_v1.annotationsets.html
@@ -0,0 +1,266 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="genomics_v1.html">Genomics API</a> . <a href="genomics_v1.annotationsets.html">annotationsets</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a new annotation set. Caller must have WRITE permission for the associated dataset. The following fields are required: * datasetId * referenceSetId All other fields may be optionally specified, unless documented as being server-generated (for example, the `id` field).</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(annotationSetId, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes an annotation set. Caller must have WRITE permission for the associated annotation set.</p>
+<p class="toc_element">
+  <code><a href="#get">get(annotationSetId, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets an annotation set. Caller must have READ permission for the associated dataset.</p>
+<p class="toc_element">
+  <code><a href="#search">search(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Searches for annotation sets that match the given criteria. Annotation sets are returned in an unspecified order. This order is consistent, such that two queries for the same content (regardless of page size) yield annotation sets in the same order across their respective streams of paginated responses. Caller must have READ permission for the queried datasets.</p>
+<p class="toc_element">
+  <code><a href="#update">update(annotationSetId, body, x__xgafv=None, updateMask=None)</a></code></p>
+<p class="firstline">Updates an annotation set. The update must respect all mutability restrictions and other invariants described on the annotation set resource. Caller must have WRITE permission for the associated dataset.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(body, x__xgafv=None)</code>
+  <pre>Creates a new annotation set. Caller must have WRITE permission for the associated dataset. The following fields are required: * datasetId * referenceSetId All other fields may be optionally specified, unless documented as being server-generated (for example, the `id` field).
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # An annotation set is a logical grouping of annotations that share consistent type information and provenance. Examples of annotation sets include 'all genes from refseq', and 'all variant annotations from ClinVar'.
+  "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+    "a_key": [
+      "",
+    ],
+  },
+  "name": "A String", # The display name for this annotation set.
+  "sourceUri": "A String", # The source URI describing the file from which this annotation set was generated, if any.
+  "referenceSetId": "A String", # The ID of the reference set that defines the coordinate space for this set's annotations.
+  "type": "A String", # The type of annotations contained within this set.
+  "id": "A String", # The server-generated annotation set ID, unique across all annotation sets.
+  "datasetId": "A String", # The dataset to which this annotation set belongs.
+}
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # An annotation set is a logical grouping of annotations that share consistent type information and provenance. Examples of annotation sets include 'all genes from refseq', and 'all variant annotations from ClinVar'.
+    "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+      "a_key": [
+        "",
+      ],
+    },
+    "name": "A String", # The display name for this annotation set.
+    "sourceUri": "A String", # The source URI describing the file from which this annotation set was generated, if any.
+    "referenceSetId": "A String", # The ID of the reference set that defines the coordinate space for this set's annotations.
+    "type": "A String", # The type of annotations contained within this set.
+    "id": "A String", # The server-generated annotation set ID, unique across all annotation sets.
+    "datasetId": "A String", # The dataset to which this annotation set belongs.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(annotationSetId, x__xgafv=None)</code>
+  <pre>Deletes an annotation set. Caller must have WRITE permission for the associated annotation set.
+
+Args:
+  annotationSetId: string, The ID of the annotation set to be deleted. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(annotationSetId, x__xgafv=None)</code>
+  <pre>Gets an annotation set. Caller must have READ permission for the associated dataset.
+
+Args:
+  annotationSetId: string, The ID of the annotation set to be retrieved. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # An annotation set is a logical grouping of annotations that share consistent type information and provenance. Examples of annotation sets include 'all genes from refseq', and 'all variant annotations from ClinVar'.
+    "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+      "a_key": [
+        "",
+      ],
+    },
+    "name": "A String", # The display name for this annotation set.
+    "sourceUri": "A String", # The source URI describing the file from which this annotation set was generated, if any.
+    "referenceSetId": "A String", # The ID of the reference set that defines the coordinate space for this set's annotations.
+    "type": "A String", # The type of annotations contained within this set.
+    "id": "A String", # The server-generated annotation set ID, unique across all annotation sets.
+    "datasetId": "A String", # The dataset to which this annotation set belongs.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="search">search(body, x__xgafv=None)</code>
+  <pre>Searches for annotation sets that match the given criteria. Annotation sets are returned in an unspecified order. This order is consistent, such that two queries for the same content (regardless of page size) yield annotation sets in the same order across their respective streams of paginated responses. Caller must have READ permission for the queried datasets.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{
+    "name": "A String", # Only return annotations sets for which a substring of the name matches this string (case insensitive).
+    "pageSize": 42, # The maximum number of results to return in a single page. If unspecified, defaults to 128. The maximum value is 1024.
+    "datasetIds": [ # Required. The dataset IDs to search within. Caller must have `READ` access to these datasets.
+      "A String",
+    ],
+    "pageToken": "A String", # The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of `nextPageToken` from the previous response.
+    "referenceSetId": "A String", # If specified, only annotation sets associated with the given reference set are returned.
+    "types": [ # If specified, only annotation sets that have any of these types are returned.
+      "A String",
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    {
+    "nextPageToken": "A String", # The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results. This field will be empty if there aren't any additional results.
+    "annotationSets": [ # The matching annotation sets.
+      { # An annotation set is a logical grouping of annotations that share consistent type information and provenance. Examples of annotation sets include 'all genes from refseq', and 'all variant annotations from ClinVar'.
+        "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+          "a_key": [
+            "",
+          ],
+        },
+        "name": "A String", # The display name for this annotation set.
+        "sourceUri": "A String", # The source URI describing the file from which this annotation set was generated, if any.
+        "referenceSetId": "A String", # The ID of the reference set that defines the coordinate space for this set's annotations.
+        "type": "A String", # The type of annotations contained within this set.
+        "id": "A String", # The server-generated annotation set ID, unique across all annotation sets.
+        "datasetId": "A String", # The dataset to which this annotation set belongs.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(annotationSetId, body, x__xgafv=None, updateMask=None)</code>
+  <pre>Updates an annotation set. The update must respect all mutability restrictions and other invariants described on the annotation set resource. Caller must have WRITE permission for the associated dataset.
+
+Args:
+  annotationSetId: string, The ID of the annotation set to be updated. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # An annotation set is a logical grouping of annotations that share consistent type information and provenance. Examples of annotation sets include 'all genes from refseq', and 'all variant annotations from ClinVar'.
+  "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+    "a_key": [
+      "",
+    ],
+  },
+  "name": "A String", # The display name for this annotation set.
+  "sourceUri": "A String", # The source URI describing the file from which this annotation set was generated, if any.
+  "referenceSetId": "A String", # The ID of the reference set that defines the coordinate space for this set's annotations.
+  "type": "A String", # The type of annotations contained within this set.
+  "id": "A String", # The server-generated annotation set ID, unique across all annotation sets.
+  "datasetId": "A String", # The dataset to which this annotation set belongs.
+}
+
+  x__xgafv: string, V1 error format.
+  updateMask: string, An optional mask specifying which fields to update. Mutable fields are name, source_uri, and info. If unspecified, all mutable fields will be updated.
+
+Returns:
+  An object of the form:
+
+    { # An annotation set is a logical grouping of annotations that share consistent type information and provenance. Examples of annotation sets include 'all genes from refseq', and 'all variant annotations from ClinVar'.
+    "info": { # A map of additional read alignment information. This must be of the form map (string key mapping to a list of string values).
+      "a_key": [
+        "",
+      ],
+    },
+    "name": "A String", # The display name for this annotation set.
+    "sourceUri": "A String", # The source URI describing the file from which this annotation set was generated, if any.
+    "referenceSetId": "A String", # The ID of the reference set that defines the coordinate space for this set's annotations.
+    "type": "A String", # The type of annotations contained within this set.
+    "id": "A String", # The server-generated annotation set ID, unique across all annotation sets.
+    "datasetId": "A String", # The dataset to which this annotation set belongs.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/genomics_v1.datasets.html b/docs/dyn/genomics_v1.datasets.html
index baabdff..8380209 100644
--- a/docs/dyn/genomics_v1.datasets.html
+++ b/docs/dyn/genomics_v1.datasets.html
@@ -79,7 +79,7 @@
 <p class="firstline">Creates a new dataset. For the definitions of datasets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
 <p class="toc_element">
   <code><a href="#delete">delete(datasetId, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes a dataset. For the definitions of datasets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
+<p class="firstline">Deletes a dataset and all of its contents (all read group sets, reference sets, variant sets, call sets, annotation sets, etc.) This is reversible (up to one week after the deletion) via the datasets.undelete operation. For the definitions of datasets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
 <p class="toc_element">
   <code><a href="#get">get(datasetId, x__xgafv=None)</a></code></p>
 <p class="firstline">Gets a dataset by ID. For the definitions of datasets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
@@ -135,7 +135,7 @@
 
 <div class="method">
     <code class="details" id="delete">delete(datasetId, x__xgafv=None)</code>
-  <pre>Deletes a dataset. For the definitions of datasets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
+  <pre>Deletes a dataset and all of its contents (all read group sets, reference sets, variant sets, call sets, annotation sets, etc.) This is reversible (up to one week after the deletion) via the datasets.undelete operation. For the definitions of datasets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
 
 Args:
   datasetId: string, The ID of the dataset to be deleted. (required)
diff --git a/docs/dyn/genomics_v1.html b/docs/dyn/genomics_v1.html
index 500feb3..2d0b200 100644
--- a/docs/dyn/genomics_v1.html
+++ b/docs/dyn/genomics_v1.html
@@ -75,6 +75,16 @@
 <h1><a href="genomics_v1.html">Genomics API</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
+  <code><a href="genomics_v1.annotations.html">annotations()</a></code>
+</p>
+<p class="firstline">Returns the annotations Resource.</p>
+
+<p class="toc_element">
+  <code><a href="genomics_v1.annotationsets.html">annotationsets()</a></code>
+</p>
+<p class="firstline">Returns the annotationsets Resource.</p>
+
+<p class="toc_element">
   <code><a href="genomics_v1.callsets.html">callsets()</a></code>
 </p>
 <p class="firstline">Returns the callsets Resource.</p>
diff --git a/docs/dyn/genomics_v1.reads.html b/docs/dyn/genomics_v1.reads.html
index d50ce67..5ec52a7 100644
--- a/docs/dyn/genomics_v1.reads.html
+++ b/docs/dyn/genomics_v1.reads.html
@@ -167,10 +167,12 @@
     The object takes the form of:
 
 { # The stream reads request.
-    "projectId": "A String", # The Google Developers Console project ID or number which will be billed for this access. The caller must have WRITE access to this project. Required.
     "end": "A String", # The end position of the range on the reference, 0-based exclusive. If specified, `referenceName` must also be specified.
-    "start": "A String", # The start position of the range on the reference, 0-based inclusive. If specified, `referenceName` must also be specified.
+    "totalShards": 42, # Specifying `totalShards` causes a disjoint subset of the normal response payload to be returned for each query with a unique `shard` parameter specified. A best effort is made to yield equally sized shards. Sharding can be used to distribute processing amongst workers, where each worker is assigned a unique `shard` number and all workers specify the same `totalShards` number. The union of reads returned for all sharded queries `[0, totalShards)` is equal to those returned by a single unsharded query. Queries for different values of `totalShards` with common divisors will share shard boundaries. For example, streaming `shard` 2 of 5 `totalShards` yields the same results as streaming `shard`s 4 and 5 of 10 `totalShards`. This property can be leveraged for adaptive retries.
     "readGroupSetId": "A String", # The ID of the read group set from which to stream reads.
+    "projectId": "A String", # The Google Developers Console project ID or number which will be billed for this access. The caller must have WRITE access to this project. Required.
+    "shard": 42, # Restricts results to a shard containing approximately `1/totalShards` of the normal response payload for this query. Results from a sharded request are disjoint from those returned by all queries which differ only in their shard parameter. A shard may yield 0 results; this is especially likely for large values of `totalShards`. Valid values are `[0, totalShards)`.
+    "start": "A String", # The start position of the range on the reference, 0-based inclusive. If specified, `referenceName` must also be specified.
     "referenceName": "A String", # The reference sequence name, for example `chr1`, `1`, or `chrX`. If set to *, only unmapped reads are returned.
   }
 
diff --git a/docs/dyn/genomics_v1.variants.html b/docs/dyn/genomics_v1.variants.html
index 3e8dada..b49e253 100644
--- a/docs/dyn/genomics_v1.variants.html
+++ b/docs/dyn/genomics_v1.variants.html
@@ -85,7 +85,10 @@
 <p class="firstline">Gets a variant by ID. For the definitions of variants and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
 <p class="toc_element">
   <code><a href="#import_">import_(body, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates variant data by asynchronously importing the provided information. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The variants for import will be merged with any existing variant that matches its reference sequence, start, end, reference bases, and alternative bases. If no such variant exists, a new one will be created. When variants are merged, the call information from the new variant is added to the existing variant, and other fields (such as key/value pairs) are discarded. In particular, this means for merged VCF variants that have conflicting INFO fields, some data will be arbitrarily discarded. As a special case, for single-sample VCF files, QUAL and FILTER fields will be moved to the call level; these are sometimes interpreted in a call-specific context. Imported VCF headers are appended to the metadata already in a variant set.</p>
+<p class="firstline">Creates variant data by asynchronously importing the provided information. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The variants for import will be merged with any existing variant that matches its reference sequence, start, end, reference bases, and alternative bases. If no such variant exists, a new one will be created. When variants are merged, the call information from the new variant is added to the existing variant, and Variant info fields are merged as specified in infoMergeConfig. As a special case, for single-sample VCF files, QUAL and FILTER fields will be moved to the call level; these are sometimes interpreted in a call-specific context. Imported VCF headers are appended to the metadata already in a variant set.</p>
+<p class="toc_element">
+  <code><a href="#merge">merge(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Merges the given variants with existing variants. For the definitions of variants and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Each variant will be merged with an existing variant that matches its reference sequence, start, end, reference bases, and alternative bases. If no such variant exists, a new one will be created. When variants are merged, the call information from the new variant is added to the existing variant. Variant info fields are merged as specified in the infoMergeConfig field of the MergeVariantsRequest. Please exercise caution when using this method! It is easy to introduce mistakes in existing variants and difficult to back out of them. For example, suppose you were trying to merge a new variant with an existing one and both variants contain calls that belong to callsets with the same callset ID. // Existing variant - irrelevant fields trimmed for clarity { "variantSetId": "10473108253681171589", "referenceName": "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ { "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 0, 1 ], } ] } // New variant with conflicting call information { "variantSetId": "10473108253681171589", "referenceName": "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ { "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 1, 1 ], } ] } The resulting merged variant would overwrite the existing calls with those from the new variant: { "variantSetId": "10473108253681171589", "referenceName": "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ { "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 1, 1 ], } ] } This may be the desired outcome, but it is up to the user to determine if if that is indeed the case.</p>
 <p class="toc_element">
   <code><a href="#patch">patch(variantId, body, x__xgafv=None, updateMask=None)</a></code></p>
 <p class="firstline">Updates a variant. For the definitions of variants and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This method supports patch semantics. Returns the modified variant without its calls.</p>
@@ -268,7 +271,7 @@
 
 <div class="method">
     <code class="details" id="import_">import_(body, x__xgafv=None)</code>
-  <pre>Creates variant data by asynchronously importing the provided information. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The variants for import will be merged with any existing variant that matches its reference sequence, start, end, reference bases, and alternative bases. If no such variant exists, a new one will be created. When variants are merged, the call information from the new variant is added to the existing variant, and other fields (such as key/value pairs) are discarded. In particular, this means for merged VCF variants that have conflicting INFO fields, some data will be arbitrarily discarded. As a special case, for single-sample VCF files, QUAL and FILTER fields will be moved to the call level; these are sometimes interpreted in a call-specific context. Imported VCF headers are appended to the metadata already in a variant set.
+  <pre>Creates variant data by asynchronously importing the provided information. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The variants for import will be merged with any existing variant that matches its reference sequence, start, end, reference bases, and alternative bases. If no such variant exists, a new one will be created. When variants are merged, the call information from the new variant is added to the existing variant, and Variant info fields are merged as specified in infoMergeConfig. As a special case, for single-sample VCF files, QUAL and FILTER fields will be moved to the call level; these are sometimes interpreted in a call-specific context. Imported VCF headers are appended to the metadata already in a variant set.
 
 Args:
   body: object, The request body. (required)
@@ -280,6 +283,9 @@
     "sourceUris": [ # A list of URIs referencing variant files in Google Cloud Storage. URIs can include wildcards [as described here](https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames). Note that recursive wildcards ('**') are not supported.
       "A String",
     ],
+    "infoMergeConfig": { # A mapping between info field keys and the InfoMergeOperations to be performed on them. This is plumbed down to the MergeVariantRequests generated by the resulting import job.
+      "a_key": "A String",
+    },
     "format": "A String", # The format of the variant data being imported. If unspecified, defaults to to `VCF`.
   }
 
@@ -310,6 +316,74 @@
 </div>
 
 <div class="method">
+    <code class="details" id="merge">merge(body, x__xgafv=None)</code>
+  <pre>Merges the given variants with existing variants. For the definitions of variants and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Each variant will be merged with an existing variant that matches its reference sequence, start, end, reference bases, and alternative bases. If no such variant exists, a new one will be created. When variants are merged, the call information from the new variant is added to the existing variant. Variant info fields are merged as specified in the infoMergeConfig field of the MergeVariantsRequest. Please exercise caution when using this method! It is easy to introduce mistakes in existing variants and difficult to back out of them. For example, suppose you were trying to merge a new variant with an existing one and both variants contain calls that belong to callsets with the same callset ID. // Existing variant - irrelevant fields trimmed for clarity { "variantSetId": "10473108253681171589", "referenceName": "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ { "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 0, 1 ], } ] } // New variant with conflicting call information { "variantSetId": "10473108253681171589", "referenceName": "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ { "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 1, 1 ], } ] } The resulting merged variant would overwrite the existing calls with those from the new variant: { "variantSetId": "10473108253681171589", "referenceName": "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ { "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 1, 1 ], } ] } This may be the desired outcome, but it is up to the user to determine if if that is indeed the case.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{
+    "variantSetId": "A String", # The destination variant set.
+    "variants": [ # The variants to be merged with existing variants.
+      { # A variant represents a change in DNA sequence relative to a reference sequence. For example, a variant could represent a SNP or an insertion. Variants belong to a variant set. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) Each of the calls on a variant represent a determination of genotype with respect to that variant. For example, a call might assign probability of 0.32 to the occurrence of a SNP named rs1234 in a sample named NA12345. A call belongs to a call set, which contains related calls typically from one sample.
+        "info": { # A map of additional variant information. This must be of the form map (string key mapping to a list of string values).
+          "a_key": [
+            "",
+          ],
+        },
+        "variantSetId": "A String", # The ID of the variant set this variant belongs to.
+        "end": "A String", # The end position (0-based) of this variant. This corresponds to the first base after the last base in the reference allele. So, the length of the reference allele is (end - start). This is useful for variants that don't explicitly give alternate bases, for example large deletions.
+        "calls": [ # The variant calls for this particular variant. Each one represents the determination of genotype with respect to this variant.
+          { # A call represents the determination of genotype with respect to a particular variant. It may include associated information such as quality and phasing. For example, a call might assign a probability of 0.32 to the occurrence of a SNP named rs1234 in a call set with the name NA12345.
+            "info": { # A map of additional variant call information. This must be of the form map (string key mapping to a list of string values).
+              "a_key": [
+                "",
+              ],
+            },
+            "genotype": [ # The genotype of this variant call. Each value represents either the value of the `referenceBases` field or a 1-based index into `alternateBases`. If a variant had a `referenceBases` value of `T` and an `alternateBases` value of `["A", "C"]`, and the `genotype` was `[2, 1]`, that would mean the call represented the heterozygous value `CA` for this variant. If the `genotype` was instead `[0, 1]`, the represented value would be `TA`. Ordering of the genotype values is important if the `phaseset` is present. If a genotype is not called (that is, a `.` is present in the GT string) -1 is returned.
+              42,
+            ],
+            "callSetId": "A String", # The ID of the call set this variant call belongs to.
+            "phaseset": "A String", # If this field is present, this variant call's genotype ordering implies the phase of the bases and is consistent with any other variant calls in the same reference sequence which have the same phaseset value. When importing data from VCF, if the genotype data was phased but no phase set was specified this field will be set to `*`.
+            "genotypeLikelihood": [ # The genotype likelihoods for this variant call. Each array entry represents how likely a specific genotype is for this call. The value ordering is defined by the GL tag in the VCF spec. If Phred-scaled genotype likelihood scores (PL) are available and log10(P) genotype likelihood scores (GL) are not, PL scores are converted to GL scores. If both are available, PL scores are stored in `info`.
+              3.14,
+            ],
+            "callSetName": "A String", # The name of the call set this variant call belongs to.
+          },
+        ],
+        "created": "A String", # The date this variant was created, in milliseconds from the epoch.
+        "referenceBases": "A String", # The reference bases for this variant. They start at the given position.
+        "filter": [ # A list of filters (normally quality filters) this variant has failed. `PASS` indicates this variant has passed all filters.
+          "A String",
+        ],
+        "start": "A String", # The position at which this variant occurs (0-based). This corresponds to the first base of the string of reference bases.
+        "names": [ # Names for the variant, for example a RefSNP ID.
+          "A String",
+        ],
+        "alternateBases": [ # The bases that appear instead of the reference bases.
+          "A String",
+        ],
+        "referenceName": "A String", # The reference on which this variant occurs. (such as `chr20` or `X`)
+        "quality": 3.14, # A measure of how likely this variant is to be real. A higher value is better.
+        "id": "A String", # The server-generated variant ID, unique across all variants.
+      },
+    ],
+    "infoMergeConfig": { # A mapping between info field keys and the InfoMergeOperations to be performed on them.
+      "a_key": "A String",
+    },
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
     <code class="details" id="patch">patch(variantId, body, x__xgafv=None, updateMask=None)</code>
   <pre>Updates a variant. For the definitions of variants and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) This method supports patch semantics. Returns the modified variant without its calls.
 
diff --git a/docs/dyn/genomics_v1.variantsets.html b/docs/dyn/genomics_v1.variantsets.html
index 4ce7124..b2f54c1 100644
--- a/docs/dyn/genomics_v1.variantsets.html
+++ b/docs/dyn/genomics_v1.variantsets.html
@@ -79,7 +79,7 @@
 <p class="firstline">Creates a new variant set. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics) The provided variant set must have a valid `datasetId` set - all other fields are optional. Note that the `id` field will be ignored, as this is assigned by the server.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(variantSetId, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes the contents of a variant set. The variant set object is not deleted. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
+<p class="firstline">Deletes a variant set including all variants, call sets, and calls within. This is not reversible. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
 <p class="toc_element">
   <code><a href="#export">export(variantSetId, body, x__xgafv=None)</a></code></p>
 <p class="firstline">Exports variant set data to an external destination. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</p>
@@ -102,6 +102,17 @@
     The object takes the form of:
 
 { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
+  "name": "A String", # User-specified, mutable name.
+  "description": "A String", # A textual description of this variant set.
+  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+      "referenceName": "A String", # The name of the reference associated with this reference bound.
+    },
+  ],
+  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+  "id": "A String", # The server-generated variant set ID, unique across all variant sets.
+  "datasetId": "A String", # The dataset to which this variant set belongs.
   "metadata": [ # The metadata associated with this variant set.
     { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
       "info": { # Remaining structured metadata key-value pairs. This must be of the form map (string key mapping to a list of string values).
@@ -117,15 +128,6 @@
       "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
     },
   ],
-  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-  "id": "A String", # The server-generated variant set ID, unique across all variant sets.
-  "datasetId": "A String", # The dataset to which this variant set belongs.
-  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-      "referenceName": "A String", # The name of the reference associated with this reference bound.
-    },
-  ],
 }
 
   x__xgafv: string, V1 error format.
@@ -134,6 +136,17 @@
   An object of the form:
 
     { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
+    "name": "A String", # User-specified, mutable name.
+    "description": "A String", # A textual description of this variant set.
+    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+        "referenceName": "A String", # The name of the reference associated with this reference bound.
+      },
+    ],
+    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+    "id": "A String", # The server-generated variant set ID, unique across all variant sets.
+    "datasetId": "A String", # The dataset to which this variant set belongs.
     "metadata": [ # The metadata associated with this variant set.
       { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
         "info": { # Remaining structured metadata key-value pairs. This must be of the form map (string key mapping to a list of string values).
@@ -149,21 +162,12 @@
         "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
       },
     ],
-    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-    "id": "A String", # The server-generated variant set ID, unique across all variant sets.
-    "datasetId": "A String", # The dataset to which this variant set belongs.
-    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-        "referenceName": "A String", # The name of the reference associated with this reference bound.
-      },
-    ],
   }</pre>
 </div>
 
 <div class="method">
     <code class="details" id="delete">delete(variantSetId, x__xgafv=None)</code>
-  <pre>Deletes the contents of a variant set. The variant set object is not deleted. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
+  <pre>Deletes a variant set including all variants, call sets, and calls within. This is not reversible. For the definitions of variant sets and other genomics resources, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
 
 Args:
   variantSetId: string, The ID of the variant set to be deleted. (required)
@@ -233,6 +237,17 @@
   An object of the form:
 
     { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
+    "name": "A String", # User-specified, mutable name.
+    "description": "A String", # A textual description of this variant set.
+    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+        "referenceName": "A String", # The name of the reference associated with this reference bound.
+      },
+    ],
+    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+    "id": "A String", # The server-generated variant set ID, unique across all variant sets.
+    "datasetId": "A String", # The dataset to which this variant set belongs.
     "metadata": [ # The metadata associated with this variant set.
       { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
         "info": { # Remaining structured metadata key-value pairs. This must be of the form map (string key mapping to a list of string values).
@@ -248,15 +263,6 @@
         "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
       },
     ],
-    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-    "id": "A String", # The server-generated variant set ID, unique across all variant sets.
-    "datasetId": "A String", # The dataset to which this variant set belongs.
-    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-        "referenceName": "A String", # The name of the reference associated with this reference bound.
-      },
-    ],
   }</pre>
 </div>
 
@@ -270,6 +276,17 @@
     The object takes the form of:
 
 { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
+  "name": "A String", # User-specified, mutable name.
+  "description": "A String", # A textual description of this variant set.
+  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+      "referenceName": "A String", # The name of the reference associated with this reference bound.
+    },
+  ],
+  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+  "id": "A String", # The server-generated variant set ID, unique across all variant sets.
+  "datasetId": "A String", # The dataset to which this variant set belongs.
   "metadata": [ # The metadata associated with this variant set.
     { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
       "info": { # Remaining structured metadata key-value pairs. This must be of the form map (string key mapping to a list of string values).
@@ -285,24 +302,26 @@
       "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
     },
   ],
-  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-  "id": "A String", # The server-generated variant set ID, unique across all variant sets.
-  "datasetId": "A String", # The dataset to which this variant set belongs.
-  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-      "referenceName": "A String", # The name of the reference associated with this reference bound.
-    },
-  ],
 }
 
-  updateMask: string, An optional mask specifying which fields to update. Supported fields: * metadata. Leaving `updateMask` unset is equivalent to specifying all mutable fields.
+  updateMask: string, An optional mask specifying which fields to update. Supported fields: * metadata. * name. * description. Leaving `updateMask` unset is equivalent to specifying all mutable fields.
   x__xgafv: string, V1 error format.
 
 Returns:
   An object of the form:
 
     { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
+    "name": "A String", # User-specified, mutable name.
+    "description": "A String", # A textual description of this variant set.
+    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+        "referenceName": "A String", # The name of the reference associated with this reference bound.
+      },
+    ],
+    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+    "id": "A String", # The server-generated variant set ID, unique across all variant sets.
+    "datasetId": "A String", # The dataset to which this variant set belongs.
     "metadata": [ # The metadata associated with this variant set.
       { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
         "info": { # Remaining structured metadata key-value pairs. This must be of the form map (string key mapping to a list of string values).
@@ -318,15 +337,6 @@
         "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
       },
     ],
-    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-    "id": "A String", # The server-generated variant set ID, unique across all variant sets.
-    "datasetId": "A String", # The dataset to which this variant set belongs.
-    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-        "referenceName": "A String", # The name of the reference associated with this reference bound.
-      },
-    ],
   }</pre>
 </div>
 
@@ -355,6 +365,17 @@
     "nextPageToken": "A String", # The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results. This field will be empty if there aren't any additional results.
     "variantSets": [ # The variant sets belonging to the requested dataset.
       { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset. For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
+        "name": "A String", # User-specified, mutable name.
+        "description": "A String", # A textual description of this variant set.
+        "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+          { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+            "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+            "referenceName": "A String", # The name of the reference associated with this reference bound.
+          },
+        ],
+        "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+        "id": "A String", # The server-generated variant set ID, unique across all variant sets.
+        "datasetId": "A String", # The dataset to which this variant set belongs.
         "metadata": [ # The metadata associated with this variant set.
           { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
             "info": { # Remaining structured metadata key-value pairs. This must be of the form map (string key mapping to a list of string values).
@@ -370,15 +391,6 @@
             "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
           },
         ],
-        "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the `referenceBounds`. For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-        "id": "A String", # The server-generated variant set ID, unique across all variant sets.
-        "datasetId": "A String", # The dataset to which this variant set belongs.
-        "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-          { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-            "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-            "referenceName": "A String", # The name of the reference associated with this reference bound.
-          },
-        ],
       },
     ],
   }</pre>
diff --git a/docs/dyn/genomics_v1beta2.annotations.html b/docs/dyn/genomics_v1beta2.annotations.html
index 89f077f..ed08ec6 100644
--- a/docs/dyn/genomics_v1beta2.annotations.html
+++ b/docs/dyn/genomics_v1beta2.annotations.html
@@ -720,11 +720,11 @@
 
 {
     "pageToken": "A String", # The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.
-    "range": { # A 0-based half-open genomic coordinate range for search requests. # If specified, this query matches only annotations that overlap this range.
+    "range": { # A 0-based half-open genomic coordinate range for search requests. reference_id or reference_name must be set. # If specified, this query matches only annotations that overlap this range.
       "start": "A String", # The start position of the range on the reference, 0-based inclusive. If specified, referenceId or referenceName must also be specified. Defaults to 0.
-      "referenceId": "A String", # The ID of the reference to query. At most one of referenceId and referenceName should be specified.
+      "referenceId": "A String", # The ID of the reference to query.
       "end": "A String", # The end position of the range on the reference, 0-based exclusive. If specified, referenceId or referenceName must also be specified. If unset or 0, defaults to the length of the reference.
-      "referenceName": "A String", # The name of the reference to query, within the reference set associated with this query. At most one of referenceId and referenceName pshould be specified.
+      "referenceName": "A String", # The name of the reference to query, within the reference set associated with this query.
     },
     "annotationSetIds": [ # The annotation sets to search within. The caller must have READ access to these annotation sets. Required. All queried annotation sets must have the same type.
       "A String",
diff --git a/docs/dyn/genomics_v1beta2.datasets.html b/docs/dyn/genomics_v1beta2.datasets.html
index cc075c4..c074030 100644
--- a/docs/dyn/genomics_v1beta2.datasets.html
+++ b/docs/dyn/genomics_v1beta2.datasets.html
@@ -79,7 +79,7 @@
 <p class="firstline">Creates a new dataset.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(datasetId)</a></code></p>
-<p class="firstline">Deletes a dataset.</p>
+<p class="firstline">Deletes a dataset and all of its contents (all read group sets, reference sets, variant sets, call sets, annotation sets, etc.) This is reversible (up to one week after the deletion) via the UndeleteDataset operation.</p>
 <p class="toc_element">
   <code><a href="#get">get(datasetId)</a></code></p>
 <p class="firstline">Gets a dataset by ID.</p>
@@ -130,7 +130,7 @@
 
 <div class="method">
     <code class="details" id="delete">delete(datasetId)</code>
-  <pre>Deletes a dataset.
+  <pre>Deletes a dataset and all of its contents (all read group sets, reference sets, variant sets, call sets, annotation sets, etc.) This is reversible (up to one week after the deletion) via the UndeleteDataset operation.
 
 Args:
   datasetId: string, The ID of the dataset to be deleted. (required)
diff --git a/docs/dyn/genomics_v1beta2.variants.html b/docs/dyn/genomics_v1beta2.variants.html
index d220fb3..8e30181 100644
--- a/docs/dyn/genomics_v1beta2.variants.html
+++ b/docs/dyn/genomics_v1beta2.variants.html
@@ -203,7 +203,7 @@
   <pre>Gets a variant by ID.
 
 Args:
-  variantId: string, The ID of the variant. (required)
+  variantId: string, Required. (required)
 
 Returns:
   An object of the form:
@@ -273,7 +273,7 @@
     ],
     "variantName": "A String", # Only return variants which have exactly this name.
     "referenceName": "A String", # Required. Only return variants in this reference sequence.
-    "variantSetIds": [ # At most one variant set ID must be provided. Only variants from this variant set will be returned. If omitted, a call set id must be included in the request.
+    "variantSetIds": [ # At most one variant set ID must be provided. Only variants from this variant set will be returned. If omitted, a call set id must be included in the request. Both this and call_set_ids may be set.
       "A String",
     ],
   }
diff --git a/docs/dyn/genomics_v1beta2.variantsets.html b/docs/dyn/genomics_v1beta2.variantsets.html
index 57ebb6e..4997606 100644
--- a/docs/dyn/genomics_v1beta2.variantsets.html
+++ b/docs/dyn/genomics_v1beta2.variantsets.html
@@ -79,7 +79,7 @@
 <p class="firstline">Creates a new variant set (only necessary in v1).</p>
 <p class="toc_element">
   <code><a href="#delete">delete(variantSetId)</a></code></p>
-<p class="firstline">Deletes the contents of a variant set. The variant set object is not deleted.</p>
+<p class="firstline">Deletes a variant set including all variants, call sets, and calls within. This is not reversible.</p>
 <p class="toc_element">
   <code><a href="#export">export(variantSetId, body)</a></code></p>
 <p class="firstline">Exports variant set data to an external destination.</p>
@@ -113,17 +113,8 @@
     The object takes the form of:
 
 { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset.
-  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-      "referenceName": "A String", # The name of the reference associated with this reference bound.
-    },
-  ],
-  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
-      # 
-      # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-  "id": "A String", # The Google-generated ID of the variant set. Immutable.
-  "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+  "name": "A String", # User-specified, mutable name.
+  "description": "A String", # A textual description of this variant set.
   "metadata": [ # The metadata associated with this variant set.
     { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
       "info": { # A string which maps to an array of values.
@@ -139,6 +130,17 @@
       "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
     },
   ],
+  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
+      # 
+      # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+  "id": "A String", # The Google-generated ID of the variant set. Immutable.
+  "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+      "referenceName": "A String", # The name of the reference associated with this reference bound.
+    },
+  ],
 }
 
 
@@ -146,17 +148,8 @@
   An object of the form:
 
     { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset.
-    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-        "referenceName": "A String", # The name of the reference associated with this reference bound.
-      },
-    ],
-    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
-        #
-        # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-    "id": "A String", # The Google-generated ID of the variant set. Immutable.
-    "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+    "name": "A String", # User-specified, mutable name.
+    "description": "A String", # A textual description of this variant set.
     "metadata": [ # The metadata associated with this variant set.
       { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
         "info": { # A string which maps to an array of values.
@@ -172,15 +165,26 @@
         "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
       },
     ],
+    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
+        #
+        # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+    "id": "A String", # The Google-generated ID of the variant set. Immutable.
+    "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+        "referenceName": "A String", # The name of the reference associated with this reference bound.
+      },
+    ],
   }</pre>
 </div>
 
 <div class="method">
     <code class="details" id="delete">delete(variantSetId)</code>
-  <pre>Deletes the contents of a variant set. The variant set object is not deleted.
+  <pre>Deletes a variant set including all variants, call sets, and calls within. This is not reversible.
 
 Args:
-  variantSetId: string, The ID of the variant set to be deleted. (required)
+  variantSetId: string, The ID of the variant set to be deleted. Required. (required)
 </pre>
 </div>
 
@@ -189,7 +193,7 @@
   <pre>Exports variant set data to an external destination.
 
 Args:
-  variantSetId: string, Required. The ID of the variant set that contains variant data which should be exported. The caller must have READ access to this variant set. (required)
+  variantSetId: string, The ID of the variant set that contains variant data which should be exported. Required. The caller must have READ access to this variant set. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
@@ -217,23 +221,14 @@
   <pre>Gets a variant set by ID.
 
 Args:
-  variantSetId: string, Required. The ID of the variant set. (required)
+  variantSetId: string, The ID of the variant set. Required. (required)
 
 Returns:
   An object of the form:
 
     { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset.
-    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-        "referenceName": "A String", # The name of the reference associated with this reference bound.
-      },
-    ],
-    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
-        #
-        # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-    "id": "A String", # The Google-generated ID of the variant set. Immutable.
-    "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+    "name": "A String", # User-specified, mutable name.
+    "description": "A String", # A textual description of this variant set.
     "metadata": [ # The metadata associated with this variant set.
       { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
         "info": { # A string which maps to an array of values.
@@ -249,6 +244,17 @@
         "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
       },
     ],
+    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
+        #
+        # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+    "id": "A String", # The Google-generated ID of the variant set. Immutable.
+    "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+        "referenceName": "A String", # The name of the reference associated with this reference bound.
+      },
+    ],
   }</pre>
 </div>
 
@@ -256,7 +262,7 @@
     <code class="details" id="importVariants">importVariants(variantSetId, body)</code>
   <pre>Creates variant data by asynchronously importing the provided information.
 
-The variants for import will be merged with any existing data and each other according to the behavior of mergeVariants. In particular, this means for merged VCF variants that have conflicting info fields, some data will be arbitrarily discarded. As a special case, for single-sample VCF files, QUAL and FILTER fields will be moved to the call level; these are sometimes interpreted in a call-specific context. Imported VCF headers are appended to the metadata already in a variant set.
+The variants for import will be merged with any existing data and each other according to the behavior of mergeVariants. In particular, this means for merged VCF variants that have conflicting info fields, some data will be arbitrarily discarded unless otherwise specified in the InfoMergeConfig field of ImportVariantsRequest. As a special case, for single-sample VCF files, QUAL and FILTER fields will be moved to the call level; these are sometimes interpreted in a call-specific context. Imported VCF headers are appended to the metadata already in a variant set.
 
 Args:
   variantSetId: string, Required. The variant set to which variant data should be imported. (required)
@@ -284,7 +290,7 @@
     <code class="details" id="mergeVariants">mergeVariants(variantSetId, body)</code>
   <pre>Merges the given variants with existing variants. Each variant will be merged with an existing variant that matches its reference sequence, start, end, reference bases, and alternative bases. If no such variant exists, a new one will be created.
 
-When variants are merged, the call information from the new variant is added to the existing variant, and other fields (such as key/value pairs) are discarded.
+When variants are merged, the call information from the new variant is added to the existing variant. Variant info fields are merged as specified in the InfoMergeConfig field of the MergeVariantsRequest.
 
 Args:
   variantSetId: string, The destination variant set. (required)
@@ -346,22 +352,13 @@
   <pre>Updates a variant set's metadata. All other modifications are silently ignored. This method supports patch semantics.
 
 Args:
-  variantSetId: string, The ID of the variant to be updated (must already exist). (required)
+  variantSetId: string, The ID of the variant set to be updated (must already exist). (required)
   body: object, The request body. (required)
     The object takes the form of:
 
 { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset.
-  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-      "referenceName": "A String", # The name of the reference associated with this reference bound.
-    },
-  ],
-  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
-      # 
-      # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-  "id": "A String", # The Google-generated ID of the variant set. Immutable.
-  "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+  "name": "A String", # User-specified, mutable name.
+  "description": "A String", # A textual description of this variant set.
   "metadata": [ # The metadata associated with this variant set.
     { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
       "info": { # A string which maps to an array of values.
@@ -377,6 +374,17 @@
       "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
     },
   ],
+  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
+      # 
+      # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+  "id": "A String", # The Google-generated ID of the variant set. Immutable.
+  "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+      "referenceName": "A String", # The name of the reference associated with this reference bound.
+    },
+  ],
 }
 
 
@@ -384,17 +392,8 @@
   An object of the form:
 
     { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset.
-    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-        "referenceName": "A String", # The name of the reference associated with this reference bound.
-      },
-    ],
-    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
-        #
-        # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-    "id": "A String", # The Google-generated ID of the variant set. Immutable.
-    "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+    "name": "A String", # User-specified, mutable name.
+    "description": "A String", # A textual description of this variant set.
     "metadata": [ # The metadata associated with this variant set.
       { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
         "info": { # A string which maps to an array of values.
@@ -410,6 +409,17 @@
         "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
       },
     ],
+    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
+        #
+        # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+    "id": "A String", # The Google-generated ID of the variant set. Immutable.
+    "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+        "referenceName": "A String", # The name of the reference associated with this reference bound.
+      },
+    ],
   }</pre>
 </div>
 
@@ -439,17 +449,8 @@
     "nextPageToken": "A String", # The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results. This field will be empty if there aren't any additional results.
     "variantSets": [ # The variant sets belonging to the requested dataset.
       { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset.
-        "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-          { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-            "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-            "referenceName": "A String", # The name of the reference associated with this reference bound.
-          },
-        ],
-        "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
-            #
-            # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-        "id": "A String", # The Google-generated ID of the variant set. Immutable.
-        "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+        "name": "A String", # User-specified, mutable name.
+        "description": "A String", # A textual description of this variant set.
         "metadata": [ # The metadata associated with this variant set.
           { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
             "info": { # A string which maps to an array of values.
@@ -465,6 +466,17 @@
             "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
           },
         ],
+        "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
+            #
+            # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+        "id": "A String", # The Google-generated ID of the variant set. Immutable.
+        "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+        "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+          { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+            "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+            "referenceName": "A String", # The name of the reference associated with this reference bound.
+          },
+        ],
       },
     ],
   }</pre>
@@ -475,22 +487,13 @@
   <pre>Updates a variant set's metadata. All other modifications are silently ignored.
 
 Args:
-  variantSetId: string, The ID of the variant to be updated (must already exist). (required)
+  variantSetId: string, The ID of the variant set to be updated (must already exist). (required)
   body: object, The request body. (required)
     The object takes the form of:
 
 { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset.
-  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-      "referenceName": "A String", # The name of the reference associated with this reference bound.
-    },
-  ],
-  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
-      # 
-      # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-  "id": "A String", # The Google-generated ID of the variant set. Immutable.
-  "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+  "name": "A String", # User-specified, mutable name.
+  "description": "A String", # A textual description of this variant set.
   "metadata": [ # The metadata associated with this variant set.
     { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
       "info": { # A string which maps to an array of values.
@@ -506,6 +509,17 @@
       "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
     },
   ],
+  "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
+      # 
+      # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+  "id": "A String", # The Google-generated ID of the variant set. Immutable.
+  "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+  "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+    { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+      "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+      "referenceName": "A String", # The name of the reference associated with this reference bound.
+    },
+  ],
 }
 
 
@@ -513,17 +527,8 @@
   An object of the form:
 
     { # A variant set is a collection of call sets and variants. It contains summary statistics of those contents. A variant set belongs to a dataset.
-    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
-      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
-        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
-        "referenceName": "A String", # The name of the reference associated with this reference bound.
-      },
-    ],
-    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
-        #
-        # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
-    "id": "A String", # The Google-generated ID of the variant set. Immutable.
-    "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+    "name": "A String", # User-specified, mutable name.
+    "description": "A String", # A textual description of this variant set.
     "metadata": [ # The metadata associated with this variant set.
       { # Metadata describes a single piece of variant call metadata. These data include a top level key and either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually exclusive.
         "info": { # A string which maps to an array of values.
@@ -539,6 +544,17 @@
         "id": "A String", # User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with identical id and key fields are considered equivalent.
       },
     ],
+    "referenceSetId": "A String", # The reference set to which the variant set is mapped. The reference set describes the alignment provenance of the variant set, while the referenceBounds describe the shape of the actual variant data. The reference set's reference names are a superset of those found in the referenceBounds.
+        #
+        # For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on reference 'X', referenceBounds would contain only an entry for 'X', while the associated reference set enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.
+    "id": "A String", # The Google-generated ID of the variant set. Immutable.
+    "datasetId": "A String", # The dataset to which this variant set belongs. Immutable.
+    "referenceBounds": [ # A list of all references used by the variants in a variant set with associated coordinate upper bounds for each one.
+      { # ReferenceBound records an upper bound for the starting coordinate of variants in a particular reference.
+        "upperBound": "A String", # An upper bound (inclusive) on the starting coordinate of any variant in the reference sequence.
+        "referenceName": "A String", # The name of the reference associated with this reference bound.
+      },
+    ],
   }</pre>
 </div>
 
diff --git a/docs/dyn/gmail_v1.users.drafts.html b/docs/dyn/gmail_v1.users.drafts.html
index 2c5fdc5..7612bd0 100644
--- a/docs/dyn/gmail_v1.users.drafts.html
+++ b/docs/dyn/gmail_v1.users.drafts.html
@@ -84,7 +84,7 @@
   <code><a href="#get">get(userId, id, format=None)</a></code></p>
 <p class="firstline">Gets the specified draft.</p>
 <p class="toc_element">
-  <code><a href="#list">list(userId, pageToken=None, maxResults=None)</a></code></p>
+  <code><a href="#list">list(userId, pageToken=None, maxResults=None, includeSpamTrash=None)</a></code></p>
 <p class="firstline">Lists the drafts in the user's mailbox.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
@@ -254,13 +254,14 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(userId, pageToken=None, maxResults=None)</code>
+    <code class="details" id="list">list(userId, pageToken=None, maxResults=None, includeSpamTrash=None)</code>
   <pre>Lists the drafts in the user's mailbox.
 
 Args:
   userId: string, The user's email address. The special value me can be used to indicate the authenticated user. (required)
   pageToken: string, Page token to retrieve a specific page of results in the list.
   maxResults: integer, Maximum number of drafts to return.
+  includeSpamTrash: boolean, Include drafts from SPAM and TRASH in the results.
 
 Returns:
   An object of the form:
diff --git a/docs/dyn/gmail_v1.users.messages.html b/docs/dyn/gmail_v1.users.messages.html
index a514067..65bb870 100644
--- a/docs/dyn/gmail_v1.users.messages.html
+++ b/docs/dyn/gmail_v1.users.messages.html
@@ -80,6 +80,9 @@
 <p class="firstline">Returns the attachments Resource.</p>
 
 <p class="toc_element">
+  <code><a href="#batchDelete">batchDelete(userId, body)</a></code></p>
+<p class="firstline">Deletes many messages by message ID. Provides no guarantees that messages were not already deleted or even existed at all.</p>
+<p class="toc_element">
   <code><a href="#delete">delete(userId, id)</a></code></p>
 <p class="firstline">Immediately and permanently deletes the specified message. This operation cannot be undone. Prefer messages.trash instead.</p>
 <p class="toc_element">
@@ -111,6 +114,24 @@
 <p class="firstline">Removes the specified message from the trash.</p>
 <h3>Method Details</h3>
 <div class="method">
+    <code class="details" id="batchDelete">batchDelete(userId, body)</code>
+  <pre>Deletes many messages by message ID. Provides no guarantees that messages were not already deleted or even existed at all.
+
+Args:
+  userId: string, The user's email address. The special value me can be used to indicate the authenticated user. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{
+    "ids": [ # The IDs of the messages to delete.
+      "A String",
+    ],
+  }
+
+</pre>
+</div>
+
+<div class="method">
     <code class="details" id="delete">delete(userId, id)</code>
   <pre>Immediately and permanently deletes the specified message. This operation cannot be undone. Prefer messages.trash instead.
 
diff --git a/docs/dyn/groupssettings_v1.groups.html b/docs/dyn/groupssettings_v1.groups.html
index 3965ca2..2325d84 100644
--- a/docs/dyn/groupssettings_v1.groups.html
+++ b/docs/dyn/groupssettings_v1.groups.html
@@ -98,7 +98,7 @@
       "allowExternalMembers": "A String", # Are external members allowed to join the group.
       "whoCanPostMessage": "A String", # Permissions to post messages to the group. Possible values are: NONE_CAN_POST ALL_MANAGERS_CAN_POST ALL_MEMBERS_CAN_POST ALL_IN_DOMAIN_CAN_POST ANYONE_CAN_POST
       "primaryLanguage": "A String", # Primary language for the group.
-      "whoCanViewMembership": "A String", # Permissions to view membership. Possbile values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+      "whoCanViewMembership": "A String", # Permissions to view membership. Possible values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
       "defaultMessageDenyNotificationText": "A String", # Default message deny notification message
       "includeInGlobalAddressList": "A String", # If this groups should be included in global address list or not.
       "archiveOnly": "A String", # If the group is archive only
@@ -111,15 +111,16 @@
       "replyTo": "A String", # Whome should the default reply to a message go to. Possible values are: REPLY_TO_CUSTOM REPLY_TO_SENDER REPLY_TO_LIST REPLY_TO_OWNER REPLY_TO_IGNORE REPLY_TO_MANAGERS
       "customReplyTo": "A String", # Default email to which reply to any message should go.
       "sendMessageDenyNotification": "A String", # Should the member be notified if his message is denied by owner.
-      "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possbile values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
+      "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possible values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
       "messageDisplayFont": "A String", # Default message display font. Possible values are: DEFAULT_FONT FIXED_WIDTH_FONT
-      "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE
+      "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE NONE_CAN_LEAVE
+      "whoCanAdd": "A String", # Permissions to add members. Possible values are: ALL_MANAGERS_CAN_ADD ALL_MEMBERS_CAN_ADD NONE_CAN_ADD
       "whoCanJoin": "A String", # Permissions to join the group. Possible values are: ANYONE_CAN_JOIN ALL_IN_DOMAIN_CAN_JOIN INVITED_CAN_JOIN CAN_REQUEST_TO_JOIN
-      "whoCanInvite": "A String", # Permissions to invite members. Possbile values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE
+      "whoCanInvite": "A String", # Permissions to invite members. Possible values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE NONE_CAN_INVITE
       "kind": "groupsSettings#groups", # The type of the resource.
       "name": "A String", # Name of the Group
       "spamModerationLevel": "A String", # Moderation level for messages detected as spam. Possible values are: ALLOW MODERATE SILENTLY_MODERATE REJECT
-      "whoCanViewGroup": "A String", # Permissions to view group. Possbile values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+      "whoCanViewGroup": "A String", # Permissions to view group. Possible values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
       "showInGroupDirectory": "A String", # Is the group listed in groups directory
       "maxMessageBytes": 42, # Maximum message size allowed.
       "allowGoogleCommunication": "A String", # Is google allowed to contact admins.
@@ -139,7 +140,7 @@
     "allowExternalMembers": "A String", # Are external members allowed to join the group.
     "whoCanPostMessage": "A String", # Permissions to post messages to the group. Possible values are: NONE_CAN_POST ALL_MANAGERS_CAN_POST ALL_MEMBERS_CAN_POST ALL_IN_DOMAIN_CAN_POST ANYONE_CAN_POST
     "primaryLanguage": "A String", # Primary language for the group.
-    "whoCanViewMembership": "A String", # Permissions to view membership. Possbile values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+    "whoCanViewMembership": "A String", # Permissions to view membership. Possible values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
     "defaultMessageDenyNotificationText": "A String", # Default message deny notification message
     "includeInGlobalAddressList": "A String", # If this groups should be included in global address list or not.
     "archiveOnly": "A String", # If the group is archive only
@@ -152,15 +153,16 @@
     "replyTo": "A String", # Whome should the default reply to a message go to. Possible values are: REPLY_TO_CUSTOM REPLY_TO_SENDER REPLY_TO_LIST REPLY_TO_OWNER REPLY_TO_IGNORE REPLY_TO_MANAGERS
     "customReplyTo": "A String", # Default email to which reply to any message should go.
     "sendMessageDenyNotification": "A String", # Should the member be notified if his message is denied by owner.
-    "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possbile values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
+    "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possible values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
     "messageDisplayFont": "A String", # Default message display font. Possible values are: DEFAULT_FONT FIXED_WIDTH_FONT
-    "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE
+    "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE NONE_CAN_LEAVE
+    "whoCanAdd": "A String", # Permissions to add members. Possible values are: ALL_MANAGERS_CAN_ADD ALL_MEMBERS_CAN_ADD NONE_CAN_ADD
     "whoCanJoin": "A String", # Permissions to join the group. Possible values are: ANYONE_CAN_JOIN ALL_IN_DOMAIN_CAN_JOIN INVITED_CAN_JOIN CAN_REQUEST_TO_JOIN
-    "whoCanInvite": "A String", # Permissions to invite members. Possbile values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE
+    "whoCanInvite": "A String", # Permissions to invite members. Possible values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE NONE_CAN_INVITE
     "kind": "groupsSettings#groups", # The type of the resource.
     "name": "A String", # Name of the Group
     "spamModerationLevel": "A String", # Moderation level for messages detected as spam. Possible values are: ALLOW MODERATE SILENTLY_MODERATE REJECT
-    "whoCanViewGroup": "A String", # Permissions to view group. Possbile values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+    "whoCanViewGroup": "A String", # Permissions to view group. Possible values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
     "showInGroupDirectory": "A String", # Is the group listed in groups directory
     "maxMessageBytes": 42, # Maximum message size allowed.
     "allowGoogleCommunication": "A String", # Is google allowed to contact admins.
@@ -174,7 +176,7 @@
       "allowExternalMembers": "A String", # Are external members allowed to join the group.
       "whoCanPostMessage": "A String", # Permissions to post messages to the group. Possible values are: NONE_CAN_POST ALL_MANAGERS_CAN_POST ALL_MEMBERS_CAN_POST ALL_IN_DOMAIN_CAN_POST ANYONE_CAN_POST
       "primaryLanguage": "A String", # Primary language for the group.
-      "whoCanViewMembership": "A String", # Permissions to view membership. Possbile values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+      "whoCanViewMembership": "A String", # Permissions to view membership. Possible values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
       "defaultMessageDenyNotificationText": "A String", # Default message deny notification message
       "includeInGlobalAddressList": "A String", # If this groups should be included in global address list or not.
       "archiveOnly": "A String", # If the group is archive only
@@ -187,15 +189,16 @@
       "replyTo": "A String", # Whome should the default reply to a message go to. Possible values are: REPLY_TO_CUSTOM REPLY_TO_SENDER REPLY_TO_LIST REPLY_TO_OWNER REPLY_TO_IGNORE REPLY_TO_MANAGERS
       "customReplyTo": "A String", # Default email to which reply to any message should go.
       "sendMessageDenyNotification": "A String", # Should the member be notified if his message is denied by owner.
-      "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possbile values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
+      "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possible values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
       "messageDisplayFont": "A String", # Default message display font. Possible values are: DEFAULT_FONT FIXED_WIDTH_FONT
-      "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE
+      "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE NONE_CAN_LEAVE
+      "whoCanAdd": "A String", # Permissions to add members. Possible values are: ALL_MANAGERS_CAN_ADD ALL_MEMBERS_CAN_ADD NONE_CAN_ADD
       "whoCanJoin": "A String", # Permissions to join the group. Possible values are: ANYONE_CAN_JOIN ALL_IN_DOMAIN_CAN_JOIN INVITED_CAN_JOIN CAN_REQUEST_TO_JOIN
-      "whoCanInvite": "A String", # Permissions to invite members. Possbile values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE
+      "whoCanInvite": "A String", # Permissions to invite members. Possible values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE NONE_CAN_INVITE
       "kind": "groupsSettings#groups", # The type of the resource.
       "name": "A String", # Name of the Group
       "spamModerationLevel": "A String", # Moderation level for messages detected as spam. Possible values are: ALLOW MODERATE SILENTLY_MODERATE REJECT
-      "whoCanViewGroup": "A String", # Permissions to view group. Possbile values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+      "whoCanViewGroup": "A String", # Permissions to view group. Possible values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
       "showInGroupDirectory": "A String", # Is the group listed in groups directory
       "maxMessageBytes": 42, # Maximum message size allowed.
       "allowGoogleCommunication": "A String", # Is google allowed to contact admins.
@@ -215,7 +218,7 @@
     "allowExternalMembers": "A String", # Are external members allowed to join the group.
     "whoCanPostMessage": "A String", # Permissions to post messages to the group. Possible values are: NONE_CAN_POST ALL_MANAGERS_CAN_POST ALL_MEMBERS_CAN_POST ALL_IN_DOMAIN_CAN_POST ANYONE_CAN_POST
     "primaryLanguage": "A String", # Primary language for the group.
-    "whoCanViewMembership": "A String", # Permissions to view membership. Possbile values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+    "whoCanViewMembership": "A String", # Permissions to view membership. Possible values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
     "defaultMessageDenyNotificationText": "A String", # Default message deny notification message
     "includeInGlobalAddressList": "A String", # If this groups should be included in global address list or not.
     "archiveOnly": "A String", # If the group is archive only
@@ -228,15 +231,16 @@
     "replyTo": "A String", # Whome should the default reply to a message go to. Possible values are: REPLY_TO_CUSTOM REPLY_TO_SENDER REPLY_TO_LIST REPLY_TO_OWNER REPLY_TO_IGNORE REPLY_TO_MANAGERS
     "customReplyTo": "A String", # Default email to which reply to any message should go.
     "sendMessageDenyNotification": "A String", # Should the member be notified if his message is denied by owner.
-    "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possbile values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
+    "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possible values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
     "messageDisplayFont": "A String", # Default message display font. Possible values are: DEFAULT_FONT FIXED_WIDTH_FONT
-    "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE
+    "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE NONE_CAN_LEAVE
+    "whoCanAdd": "A String", # Permissions to add members. Possible values are: ALL_MANAGERS_CAN_ADD ALL_MEMBERS_CAN_ADD NONE_CAN_ADD
     "whoCanJoin": "A String", # Permissions to join the group. Possible values are: ANYONE_CAN_JOIN ALL_IN_DOMAIN_CAN_JOIN INVITED_CAN_JOIN CAN_REQUEST_TO_JOIN
-    "whoCanInvite": "A String", # Permissions to invite members. Possbile values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE
+    "whoCanInvite": "A String", # Permissions to invite members. Possible values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE NONE_CAN_INVITE
     "kind": "groupsSettings#groups", # The type of the resource.
     "name": "A String", # Name of the Group
     "spamModerationLevel": "A String", # Moderation level for messages detected as spam. Possible values are: ALLOW MODERATE SILENTLY_MODERATE REJECT
-    "whoCanViewGroup": "A String", # Permissions to view group. Possbile values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+    "whoCanViewGroup": "A String", # Permissions to view group. Possible values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
     "showInGroupDirectory": "A String", # Is the group listed in groups directory
     "maxMessageBytes": 42, # Maximum message size allowed.
     "allowGoogleCommunication": "A String", # Is google allowed to contact admins.
@@ -250,7 +254,7 @@
       "allowExternalMembers": "A String", # Are external members allowed to join the group.
       "whoCanPostMessage": "A String", # Permissions to post messages to the group. Possible values are: NONE_CAN_POST ALL_MANAGERS_CAN_POST ALL_MEMBERS_CAN_POST ALL_IN_DOMAIN_CAN_POST ANYONE_CAN_POST
       "primaryLanguage": "A String", # Primary language for the group.
-      "whoCanViewMembership": "A String", # Permissions to view membership. Possbile values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+      "whoCanViewMembership": "A String", # Permissions to view membership. Possible values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
       "defaultMessageDenyNotificationText": "A String", # Default message deny notification message
       "includeInGlobalAddressList": "A String", # If this groups should be included in global address list or not.
       "archiveOnly": "A String", # If the group is archive only
@@ -263,15 +267,16 @@
       "replyTo": "A String", # Whome should the default reply to a message go to. Possible values are: REPLY_TO_CUSTOM REPLY_TO_SENDER REPLY_TO_LIST REPLY_TO_OWNER REPLY_TO_IGNORE REPLY_TO_MANAGERS
       "customReplyTo": "A String", # Default email to which reply to any message should go.
       "sendMessageDenyNotification": "A String", # Should the member be notified if his message is denied by owner.
-      "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possbile values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
+      "whoCanContactOwner": "A String", # Permission to contact owner of the group via web UI. Possible values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT
       "messageDisplayFont": "A String", # Default message display font. Possible values are: DEFAULT_FONT FIXED_WIDTH_FONT
-      "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE
+      "whoCanLeaveGroup": "A String", # Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE NONE_CAN_LEAVE
+      "whoCanAdd": "A String", # Permissions to add members. Possible values are: ALL_MANAGERS_CAN_ADD ALL_MEMBERS_CAN_ADD NONE_CAN_ADD
       "whoCanJoin": "A String", # Permissions to join the group. Possible values are: ANYONE_CAN_JOIN ALL_IN_DOMAIN_CAN_JOIN INVITED_CAN_JOIN CAN_REQUEST_TO_JOIN
-      "whoCanInvite": "A String", # Permissions to invite members. Possbile values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE
+      "whoCanInvite": "A String", # Permissions to invite members. Possible values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE NONE_CAN_INVITE
       "kind": "groupsSettings#groups", # The type of the resource.
       "name": "A String", # Name of the Group
       "spamModerationLevel": "A String", # Moderation level for messages detected as spam. Possible values are: ALLOW MODERATE SILENTLY_MODERATE REJECT
-      "whoCanViewGroup": "A String", # Permissions to view group. Possbile values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
+      "whoCanViewGroup": "A String", # Permissions to view group. Possible values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW
       "showInGroupDirectory": "A String", # Is the group listed in groups directory
       "maxMessageBytes": 42, # Maximum message size allowed.
       "allowGoogleCommunication": "A String", # Is google allowed to contact admins.
diff --git a/docs/dyn/identitytoolkit_v3.relyingparty.html b/docs/dyn/identitytoolkit_v3.relyingparty.html
index eb3f861..9dfe651 100644
--- a/docs/dyn/identitytoolkit_v3.relyingparty.html
+++ b/docs/dyn/identitytoolkit_v3.relyingparty.html
@@ -90,7 +90,7 @@
   <code><a href="#getOobConfirmationCode">getOobConfirmationCode(body)</a></code></p>
 <p class="firstline">Get a code for user action confirmation.</p>
 <p class="toc_element">
-  <code><a href="#getProjectConfig">getProjectConfig()</a></code></p>
+  <code><a href="#getProjectConfig">getProjectConfig(delegatedProjectNumber=None, projectNumber=None)</a></code></p>
 <p class="firstline">Get project configuration.</p>
 <p class="toc_element">
   <code><a href="#getPublicKeys">getPublicKeys()</a></code></p>
@@ -105,6 +105,9 @@
   <code><a href="#setAccountInfo">setAccountInfo(body)</a></code></p>
 <p class="firstline">Set account info for a user.</p>
 <p class="toc_element">
+  <code><a href="#setProjectConfig">setProjectConfig(body)</a></code></p>
+<p class="firstline">Set project configuration.</p>
+<p class="toc_element">
   <code><a href="#signOutUser">signOutUser(body)</a></code></p>
 <p class="firstline">Sign out user.</p>
 <p class="toc_element">
@@ -171,6 +174,7 @@
     The object takes the form of:
 
 { # Request to delete account.
+    "idToken": "A String", # The GITKit token or STS id token of the authenticated user.
     "delegatedProjectNumber": "A String", # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
     "localId": "A String", # The local ID of the user.
   }
@@ -218,10 +222,11 @@
         "providerUserInfo": [ # The IDP of the user.
           {
             "federatedId": "A String", # User's identifier at IDP.
-            "providerId": "A String", # The IdP ID. For white listed IdPs it's a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier.
             "displayName": "A String", # The user's display name at the IDP.
-            "email": "A String", # User's email at IDP.
             "photoUrl": "A String", # The user's photo url at the IDP.
+            "providerId": "A String", # The IdP ID. For white listed IdPs it's a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier.
+            "rawId": "A String", # User's raw identifier directly returned from IDP.
+            "email": "A String", # User's email at IDP.
           },
         ],
         "passwordUpdatedAt": 3.14, # The timestamp when the password was last updated.
@@ -242,6 +247,7 @@
 
 { # Request to get the account information.
     "idToken": "A String", # The GITKit token of the authenticated user.
+    "delegatedProjectNumber": "A String", # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
     "email": [ # The list of emails of the users to inquiry.
       "A String",
     ],
@@ -269,10 +275,11 @@
         "providerUserInfo": [ # The IDP of the user.
           {
             "federatedId": "A String", # User's identifier at IDP.
-            "providerId": "A String", # The IdP ID. For white listed IdPs it's a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier.
             "displayName": "A String", # The user's display name at the IDP.
-            "email": "A String", # User's email at IDP.
             "photoUrl": "A String", # The user's photo url at the IDP.
+            "providerId": "A String", # The IdP ID. For white listed IdPs it's a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier.
+            "rawId": "A String", # User's raw identifier directly returned from IDP.
+            "email": "A String", # User's email at IDP.
           },
         ],
         "passwordUpdatedAt": 3.14, # The timestamp when the password was last updated.
@@ -314,21 +321,61 @@
 </div>
 
 <div class="method">
-    <code class="details" id="getProjectConfig">getProjectConfig()</code>
+    <code class="details" id="getProjectConfig">getProjectConfig(delegatedProjectNumber=None, projectNumber=None)</code>
   <pre>Get project configuration.
 
 Args:
+  delegatedProjectNumber: string, Delegated GCP project number of the request.
+  projectNumber: string, GCP project number of the request.
 
 Returns:
   An object of the form:
 
     { # Response of getting the project configuration.
-    "projectId": "A String", # Project ID of the relying party.
     "apiKey": "A String", # Browser API key, needed when making http request to Apiary.
+    "useEmailSending": True or False, # Whether to use email sending provided by Firebear.
+    "projectId": "A String", # Project ID of the relying party.
+    "enableAnonymousUser": True or False, # Whether anonymous user is enabled.
+    "authorizedDomains": [ # Authorized domains.
+      "A String",
+    ],
+    "resetPasswordTemplate": { # Template for an email template. # Reset password email template.
+      "body": "A String", # Email body.
+      "fromDisplayName": "A String", # From display name.
+      "from": "A String", # From address of the email.
+      "format": "A String", # Email body format.
+      "replyTo": "A String", # Reply-to address.
+      "subject": "A String", # Subject of the email.
+    },
+    "legacyResetPasswordTemplate": { # Template for an email template. # Legacy reset password email template.
+      "body": "A String", # Email body.
+      "fromDisplayName": "A String", # From display name.
+      "from": "A String", # From address of the email.
+      "format": "A String", # Email body format.
+      "replyTo": "A String", # Reply-to address.
+      "subject": "A String", # Subject of the email.
+    },
+    "verifyEmailTemplate": { # Template for an email template. # Verify email template.
+      "body": "A String", # Email body.
+      "fromDisplayName": "A String", # From display name.
+      "from": "A String", # From address of the email.
+      "format": "A String", # Email body format.
+      "replyTo": "A String", # Reply-to address.
+      "subject": "A String", # Subject of the email.
+    },
     "allowPasswordUser": True or False, # Whether to allow password user sign in or sign up.
+    "changeEmailTemplate": { # Template for an email template. # Change email template.
+      "body": "A String", # Email body.
+      "fromDisplayName": "A String", # From display name.
+      "from": "A String", # From address of the email.
+      "format": "A String", # Email body format.
+      "replyTo": "A String", # Reply-to address.
+      "subject": "A String", # Subject of the email.
+    },
     "idpConfig": [ # OAuth2 provider configuration.
       { # Template for a single idp configuration.
         "experimentPercent": 42, # Percent of users who will be prompted/redirected federated login for this IDP.
+        "secret": "A String", # OAuth2 client secret.
         "enabled": True or False, # Whether this IDP is enabled.
         "clientId": "A String", # OAuth2 client ID.
         "provider": "A String", # OAuth2 provider.
@@ -403,7 +450,9 @@
 { # Request to set the account information.
     "instanceId": "A String", # Instance id token of the app.
     "delegatedProjectNumber": "A String", # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
-    "displayName": "A String", # The name of the user.
+    "deleteAttribute": [ # The attributes users request to delete.
+      "A String",
+    ],
     "localId": "A String", # The local ID of the user.
     "validSince": "A String", # Timestamp in seconds for valid login token.
     "photoUrl": "A String", # The photo url of the user.
@@ -414,11 +463,16 @@
     ],
     "upgradeToFederatedLogin": True or False, # Mark the user to upgrade to federated login.
     "disableUser": True or False, # Whether to disable the user.
+    "deleteProvider": [ # The IDPs the user request to delete.
+      "A String",
+    ],
     "captchaChallenge": "A String", # The captcha challenge.
     "idToken": "A String", # The GITKit token of the authenticated user.
-    "oobCode": "A String", # The out-of-band code of the change email request.
+    "returnSecureToken": True or False, # Whether return sts id token and refresh token instead of gitkit token.
+    "displayName": "A String", # The name of the user.
     "password": "A String", # The new password of the user.
     "email": "A String", # The email of the user.
+    "oobCode": "A String", # The out-of-band code of the change email request.
   }
 
 
@@ -426,23 +480,97 @@
   An object of the form:
 
     { # Respone of setting the account information.
+    "expiresIn": "A String", # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
     "kind": "identitytoolkit#SetAccountInfoResponse", # The fixed string "identitytoolkit#SetAccountInfoResponse".
     "displayName": "A String", # The name of the user.
+    "localId": "A String", # The local ID of the user.
+    "photoUrl": "A String", # The photo url of the user.
+    "idToken": "A String", # The Gitkit id token to login the newly sign up user.
+    "passwordHash": "A String", # The user's hashed password.
+    "newEmail": "A String", # The new email the user attempts to change to.
+    "refreshToken": "A String", # If idToken is STS id token, then this field will be refresh token.
     "providerUserInfo": [ # The user's profiles at the associated IdPs.
       {
+        "federatedId": "A String", # User's identifier at IDP.
         "providerId": "A String", # The IdP ID. For whitelisted IdPs it's a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier.
         "displayName": "A String", # The user's display name at the IDP.
         "photoUrl": "A String", # The user's photo url at the IDP.
       },
     ],
-    "photoUrl": "A String", # The photo url of the user.
-    "idToken": "A String", # The Gitkit id token to login the newly sign up user.
-    "newEmail": "A String", # The new email the user attempts to change to.
     "email": "A String", # The email of the user.
   }</pre>
 </div>
 
 <div class="method">
+    <code class="details" id="setProjectConfig">setProjectConfig(body)</code>
+  <pre>Set project configuration.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request to set the project configuration.
+    "apiKey": "A String", # Browser API key, needed when making http request to Apiary.
+    "useEmailSending": True or False, # Whether to use email sending provided by Firebear.
+    "verifyEmailTemplate": { # Template for an email template. # Verify email template.
+      "body": "A String", # Email body.
+      "fromDisplayName": "A String", # From display name.
+      "from": "A String", # From address of the email.
+      "format": "A String", # Email body format.
+      "replyTo": "A String", # Reply-to address.
+      "subject": "A String", # Subject of the email.
+    },
+    "enableAnonymousUser": True or False, # Whether to enable anonymous user.
+    "authorizedDomains": [ # Authorized domains for widget redirect.
+      "A String",
+    ],
+    "resetPasswordTemplate": { # Template for an email template. # Reset password email template.
+      "body": "A String", # Email body.
+      "fromDisplayName": "A String", # From display name.
+      "from": "A String", # From address of the email.
+      "format": "A String", # Email body format.
+      "replyTo": "A String", # Reply-to address.
+      "subject": "A String", # Subject of the email.
+    },
+    "legacyResetPasswordTemplate": { # Template for an email template. # Legacy reset password email template.
+      "body": "A String", # Email body.
+      "fromDisplayName": "A String", # From display name.
+      "from": "A String", # From address of the email.
+      "format": "A String", # Email body format.
+      "replyTo": "A String", # Reply-to address.
+      "subject": "A String", # Subject of the email.
+    },
+    "delegatedProjectNumber": "A String", # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
+    "allowPasswordUser": True or False, # Whether to allow password user sign in or sign up.
+    "changeEmailTemplate": { # Template for an email template. # Change email template.
+      "body": "A String", # Email body.
+      "fromDisplayName": "A String", # From display name.
+      "from": "A String", # From address of the email.
+      "format": "A String", # Email body format.
+      "replyTo": "A String", # Reply-to address.
+      "subject": "A String", # Subject of the email.
+    },
+    "idpConfig": [ # Oauth2 provider configuration.
+      { # Template for a single idp configuration.
+        "experimentPercent": 42, # Percent of users who will be prompted/redirected federated login for this IDP.
+        "secret": "A String", # OAuth2 client secret.
+        "enabled": True or False, # Whether this IDP is enabled.
+        "clientId": "A String", # OAuth2 client ID.
+        "provider": "A String", # OAuth2 provider.
+      },
+    ],
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # Response of setting the project configuration.
+    "projectId": "A String", # Project ID of the relying party.
+  }</pre>
+</div>
+
+<div class="method">
     <code class="details" id="signOutUser">signOutUser(body)</code>
   <pre>Sign out user.
 
@@ -487,9 +615,12 @@
   An object of the form:
 
     { # Response of signing up new user, creating anonymous user or anonymous user reauth.
-    "idToken": "A String", # The Gitkit id token to login the newly sign up user.
+    "expiresIn": "A String", # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
     "kind": "identitytoolkit#SignupNewUserResponse", # The fixed string "identitytoolkit#SignupNewUserResponse".
     "displayName": "A String", # The name of the user.
+    "localId": "A String", # The RP local ID of the user.
+    "idToken": "A String", # The Gitkit id token to login the newly sign up user.
+    "refreshToken": "A String", # If idToken is STS id token, then this field will be refresh token.
     "email": "A String", # The email of the user.
   }</pre>
 </div>
@@ -518,10 +649,11 @@
         "providerUserInfo": [ # The IDP of the user.
           {
             "federatedId": "A String", # User's identifier at IDP.
-            "providerId": "A String", # The IdP ID. For white listed IdPs it's a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier.
             "displayName": "A String", # The user's display name at the IDP.
-            "email": "A String", # User's email at IDP.
             "photoUrl": "A String", # The user's photo url at the IDP.
+            "providerId": "A String", # The IdP ID. For white listed IdPs it's a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier.
+            "rawId": "A String", # User's raw identifier directly returned from IDP.
+            "email": "A String", # User's email at IDP.
           },
         ],
         "passwordUpdatedAt": 3.14, # The timestamp when the password was last updated.
@@ -566,6 +698,7 @@
     "pendingIdToken": "A String", # The GITKit token for the non-trusted IDP pending to be confirmed by the user.
     "sessionId": "A String", # Session ID, which should match the one in previous createAuthUri request.
     "requestUri": "A String", # The URI to which the IDP redirects the user back. It may contain federated login result params added by the IDP.
+    "returnSecureToken": True or False, # Whether return sts id token and refresh token instead of gitkit token.
     "returnRefreshToken": True or False, # Whether to return refresh tokens.
   }
 
@@ -579,6 +712,8 @@
     "photoUrl": "A String", # The URI of the public accessible profiel picture.
     "inputEmail": "A String", # It's the identifier param in the createAuthUri request if the identifier is an email. It can be used to check whether the user input email is different from the asserted email.
     "appScheme": "A String", # The custom scheme used by mobile app.
+    "expiresIn": "A String", # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
+    "refreshToken": "A String", # If idToken is STS id token, then this field will be refresh token.
     "verifiedProvider": [ # When action is 'map', contains the idps which can be used for confirmation.
       "A String",
     ],
@@ -587,8 +722,10 @@
     "nickName": "A String", # The nick name of the user.
     "email": "A String", # The email returned by the IdP. NOTE: The federated login user may not own the email.
     "oauthAccessToken": "A String", # The OAuth2 access token.
+    "oauthTokenSecret": "A String", # The OAuth1 access token secret.
     "language": "A String", # The language preference of the user.
     "needConfirmation": True or False, # Whether the assertion is from a non-trusted IDP and need account linking confirmation.
+    "oauthIdToken": "A String", # The OIDC id token.
     "fullName": "A String", # The full name of the user.
     "kind": "identitytoolkit#VerifyAssertionResponse", # The fixed string "identitytoolkit#VerifyAssertionResponse".
     "idToken": "A String", # The ID token.
@@ -620,7 +757,9 @@
 
 { # Request to verify a custom token
     "instanceId": "A String", # Instance id token of the app.
+    "returnSecureToken": True or False, # Whether return sts id token and refresh token instead of gitkit token.
     "token": "A String", # The custom token to verify
+    "delegatedProjectNumber": "A String", # GCP project number of the requesting delegated app. Currently only intended for Firebase V1 migration.
   }
 
 
@@ -628,8 +767,10 @@
   An object of the form:
 
     { # Response from verifying a custom token
+    "expiresIn": "A String", # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
     "idToken": "A String", # The GITKit token for authenticated user.
     "kind": "identitytoolkit#VerifyCustomTokenResponse", # The fixed string "identitytoolkit#VerifyCustomTokenResponse".
+    "refreshToken": "A String", # If idToken is STS id token, then this field will be refresh token.
   }</pre>
 </div>
 
@@ -648,6 +789,7 @@
     "idToken": "A String", # The GITKit token of the authenticated user.
     "pendingIdToken": "A String", # The GITKit token for the non-trusted IDP, which is to be confirmed by the user.
     "captchaChallenge": "A String", # The captcha challenge.
+    "returnSecureToken": True or False, # Whether return sts id token and refresh token instead of gitkit token.
     "password": "A String", # The password inputed by the user.
     "email": "A String", # The email of the user.
   }
@@ -657,6 +799,7 @@
   An object of the form:
 
     { # Request of verifying the password.
+    "expiresIn": "A String", # If idToken is STS id token, then this field will be expiration time of STS id token in seconds.
     "kind": "identitytoolkit#VerifyPasswordResponse", # The fixed string "identitytoolkit#VerifyPasswordResponse".
     "displayName": "A String", # The name of the user.
     "localId": "A String", # The RP local ID if it's already been mapped to the IdP account identified by the federated ID.
@@ -666,6 +809,7 @@
     "idToken": "A String", # The GITKit token for authenticated user.
     "registered": True or False, # Whether the email is registered.
     "oauthAuthorizationCode": "A String", # The OAuth2 authorization code.
+    "refreshToken": "A String", # If idToken is STS id token, then this field will be refresh token.
     "email": "A String", # The email returned by the IdP. NOTE: The federated login user may not own the email.
   }</pre>
 </div>
diff --git a/docs/dyn/logging_v2beta1.entries.html b/docs/dyn/logging_v2beta1.entries.html
index 4ac177d..0dd8eba 100644
--- a/docs/dyn/logging_v2beta1.entries.html
+++ b/docs/dyn/logging_v2beta1.entries.html
@@ -90,13 +90,14 @@
     The object takes the form of:
 
 { # The parameters to `ListLogEntries`.
+    "orderBy": "A String", # Optional. How the results should be sorted. Presently, the only permitted values are `"timestamp asc"` (default) and `"timestamp desc"`. The first option returns entries in order of increasing values of `LogEntry.timestamp` (oldest first), and the second option returns entries in order of decreasing timestamps (newest first). Entries with equal timestamps are returned in order of `LogEntry.insertId`.
+    "pageSize": 42, # Optional. The maximum number of results to return from this request. You must check for presence of `nextPageToken` to determine if additional results are available, which you can retrieve by passing the `nextPageToken` value as the `pageToken` parameter in the next request.
+    "partialSuccess": True or False, # Optional. If true, read access to all projects is not required and results will be returned for the subset of projects for which read access is permitted (empty subset is permitted).
     "filter": "A String", # Optional. An [advanced logs filter](/logging/docs/view/advanced_filters). The filter is compared against all log entries in the projects specified by `projectIds`. Only entries that match the filter are retrieved. An empty filter matches all log entries.
+    "pageToken": "A String", # Optional. If the `pageToken` parameter is supplied, then the next page of results is retrieved. The `pageToken` parameter must be set to the value of the `nextPageToken` from the previous response. The values of `projectIds`, `filter`, and `orderBy` must be the same as in the previous request.
     "projectIds": [ # Required. One or more project IDs or project numbers from which to retrieve log entries. Examples of a project ID: `"my-project-1A"`, `"1234567890"`.
       "A String",
     ],
-    "pageSize": 42, # Optional. The maximum number of results to return from this request. Fewer results might be returned. You must check for the `nextPageToken` result to determine if additional results are available, which you can retrieve by passing the `nextPageToken` value in the `pageToken` parameter to the next request.
-    "orderBy": "A String", # Optional. How the results should be sorted. Presently, the only permitted values are `"timestamp"` (default) and `"timestamp desc"`. The first option returns entries in order of increasing values of `LogEntry.timestamp` (oldest first), and the second option returns entries in order of decreasing timestamps (newest first). Entries with equal timestamps are returned in order of `LogEntry.insertId`.
-    "pageToken": "A String", # Optional. If the `pageToken` request parameter is supplied, then the next page of results in the set are retrieved. The `pageToken` parameter must be set with the value of the `nextPageToken` result parameter from the previous request. The values of `projectIds`, `filter`, and `orderBy` must be the same as in the previous request.
   }
 
   x__xgafv: string, V1 error format.
@@ -105,26 +106,39 @@
   An object of the form:
 
     { # Result returned from `ListLogEntries`.
-    "nextPageToken": "A String", # If there are more results than were returned, then `nextPageToken` is given a value in the response. To get the next batch of results, call this method again using the value of `nextPageToken` as `pageToken`.
+    "nextPageToken": "A String", # If there are more results than were returned, then `nextPageToken` is included in the response. To get the next set of results, call this method again using the value of `nextPageToken` as `pageToken`.
+    "projectIdErrors": { # If partial_success is true, contains the project ids that had errors and the associated errors.
+      "a_key": { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model is designed to be: - Simple to use and understand for most users - Flexible enough to meet unexpected needs # Overview The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` which can be used for common error conditions. # Language mapping The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C. # Other uses The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments. Example uses of this error model include: - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors. - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting purpose. - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response. - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message. - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons.
+        "message": "A String", # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
+        "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+        "details": [ # A list of messages that carry the error details. There will be a common set of message types for APIs to use.
+          {
+            "a_key": "", # Properties of the object. Contains field @ype with type URL.
+          },
+        ],
+      },
+    },
     "entries": [ # A list of log entries.
       { # An individual entry in a log.
         "httpRequest": { # A common proto for logging HTTP requests. # Optional. Information about the HTTP request associated with this log entry, if applicable.
           "status": 42, # The response code indicating the status of response. Examples: 200, 404.
+          "cacheValidatedWithOriginServer": True or False, # Whether or not the response was validated with the origin server before being served from cache. This field is only meaningful if `cache_hit` is True.
           "cacheHit": True or False, # Whether or not an entity was served from cache (with or without validation).
+          "cacheFillBytes": "A String", # The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.
           "requestUrl": "A String", # The scheme (http, https), the host name, the path and the query portion of the URL that was requested. Example: `"http://example.com/some/info?color=red"`.
+          "cacheLookup": True or False, # Whether or not a cache lookup was attempted.
           "requestMethod": "A String", # The request method. Examples: `"GET"`, `"HEAD"`, `"PUT"`, `"POST"`.
           "referer": "A String", # The referer URL of the request, as defined in [HTTP/1.1 Header Field Definitions](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
           "remoteIp": "A String", # The IP address (IPv4 or IPv6) of the client that issued the HTTP request. Examples: `"192.168.1.1"`, `"FE80::0202:B3FF:FE1E:8329"`.
-          "validatedWithOriginServer": True or False, # Whether or not the response was validated with the origin server before being served from cache. This field is only meaningful if `cache_hit` is True.
           "userAgent": "A String", # The user agent sent by the client. Example: `"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)"`.
           "requestSize": "A String", # The size of the HTTP request message in bytes, including the request headers and the request body.
           "responseSize": "A String", # The size of the HTTP response message sent back to the client, in bytes, including the response headers and the response body.
         },
-        "resource": { # A specific monitored resource or a group of monitored resources. # Required. The monitored resource associated with this log entry. Example: a log entry that reports a database error would be associated with the monitored resource designating the particular database that reported the error.
-          "labels": { # Values for some or all of the labels listed in the associated monitored resource descriptor. For example, specify a specific Cloud SQL database by supplying values for both the `"database_id"` and `"zone"` labels. Specify the set of all Cloud SQL databases in a particular location by supplying a value for only the `"zone"` label.
+        "resource": { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The `type` field identifies a MonitoredResourceDescriptor object that describes the resource's schema. Information in the `labels` field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for `"gce_instance"` has labels `"instance_id"` and `"zone"`: { "type": "gce_instance", "labels": { "instance_id": "my-instance", "zone": "us-central1-a" }} # Required. The monitored resource associated with this log entry. Example: a log entry that reports a database error would be associated with the monitored resource designating the particular database that reported the error.
+          "labels": { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels `"database_id"` and `"zone"`.
             "a_key": "A String",
           },
-          "type": "A String", # The type of monitored resource. This field must match the value of the `type` field in a MonitoredResourceDescriptor object. For example, `"cloudsql_database"` represents Cloud SQL databases.
+          "type": "A String", # Required. The monitored resource type. This field must match the `type` field of a MonitoredResourceDescriptor object. For example, the type of a Cloud SQL database is `"cloudsql_database"`.
         },
         "severity": "A String", # Optional. The severity of the log entry. The default value is `LogSeverity.DEFAULT`.
         "textPayload": "A String", # The log entry payload, represented as a Unicode string (UTF-8).
@@ -136,7 +150,8 @@
         "jsonPayload": { # The log entry payload, represented as a structure that is expressed as a JSON object.
           "a_key": "", # Properties of the object.
         },
-        "logName": "A String", # Required. The resource name of the log to which this log entry belongs. The format of the name is `projects/<project-id>/logs/<log-id%gt;`. Examples: `"projects/my-projectid/logs/syslog"`, `"projects/1234567890/logs/library.googleapis.com%2Fbook_log"`. The log ID part of resource name must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters: [A-Za-z0-9]; and punctuation characters: forward-slash, underscore, hyphen, and period. Forward-slash (`/`) characters in the log ID must be URL-encoded.
+        "logName": "A String", # Required. The resource name of the log to which this log entry belongs. The format of the name is `"projects/
+            # /logs/"`. Examples: `"projects/my-projectid/logs/syslog"`, `"projects/1234567890/logs/library.googleapis.com%2Fbook_log"`. The log ID part of resource name must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters: [A-Za-z0-9]; and punctuation characters: forward-slash, underscore, hyphen, and period. Forward-slash (`/`) characters in the log ID must be URL-encoded.
         "protoPayload": { # The log entry payload, represented as a protocol buffer. You can only use `protoPayload` values that belong to a set of approved types.
           "a_key": "", # Properties of the object. Contains field @ype with type URL.
         },
@@ -160,12 +175,13 @@
     The object takes the form of:
 
 { # The parameters to WriteLogEntries.
-    "resource": { # A specific monitored resource or a group of monitored resources. # Optional. A default monitored resource for those log entries in `entries` that do not specify their own `resource`.
-      "labels": { # Values for some or all of the labels listed in the associated monitored resource descriptor. For example, specify a specific Cloud SQL database by supplying values for both the `"database_id"` and `"zone"` labels. Specify the set of all Cloud SQL databases in a particular location by supplying a value for only the `"zone"` label.
+    "resource": { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The `type` field identifies a MonitoredResourceDescriptor object that describes the resource's schema. Information in the `labels` field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for `"gce_instance"` has labels `"instance_id"` and `"zone"`: { "type": "gce_instance", "labels": { "instance_id": "my-instance", "zone": "us-central1-a" }} # Optional. A default monitored resource for those log entries in `entries` that do not specify their own `resource`.
+      "labels": { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels `"database_id"` and `"zone"`.
         "a_key": "A String",
       },
-      "type": "A String", # The type of monitored resource. This field must match the value of the `type` field in a MonitoredResourceDescriptor object. For example, `"cloudsql_database"` represents Cloud SQL databases.
+      "type": "A String", # Required. The monitored resource type. This field must match the `type` field of a MonitoredResourceDescriptor object. For example, the type of a Cloud SQL database is `"cloudsql_database"`.
     },
+    "partialSuccess": True or False, # Optional. Whether valid entries should be written even if some other entries fail due to INVALID_ARGUMENT or PERMISSION_DENIED errors. If any entry is not written, the response status will be the error associated with one of the failed entries and include error details in the form of WriteLogEntriesPartialErrors.
     "labels": { # Optional. User-defined `key:value` items that are added to the `labels` field of each log entry in `entries`, except when a log entry specifies its own `key:value` item with the same key. Example: `{ "size": "large", "color":"red" }`
       "a_key": "A String",
     },
@@ -174,21 +190,23 @@
       { # An individual entry in a log.
         "httpRequest": { # A common proto for logging HTTP requests. # Optional. Information about the HTTP request associated with this log entry, if applicable.
           "status": 42, # The response code indicating the status of response. Examples: 200, 404.
+          "cacheValidatedWithOriginServer": True or False, # Whether or not the response was validated with the origin server before being served from cache. This field is only meaningful if `cache_hit` is True.
           "cacheHit": True or False, # Whether or not an entity was served from cache (with or without validation).
+          "cacheFillBytes": "A String", # The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.
           "requestUrl": "A String", # The scheme (http, https), the host name, the path and the query portion of the URL that was requested. Example: `"http://example.com/some/info?color=red"`.
+          "cacheLookup": True or False, # Whether or not a cache lookup was attempted.
           "requestMethod": "A String", # The request method. Examples: `"GET"`, `"HEAD"`, `"PUT"`, `"POST"`.
           "referer": "A String", # The referer URL of the request, as defined in [HTTP/1.1 Header Field Definitions](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
           "remoteIp": "A String", # The IP address (IPv4 or IPv6) of the client that issued the HTTP request. Examples: `"192.168.1.1"`, `"FE80::0202:B3FF:FE1E:8329"`.
-          "validatedWithOriginServer": True or False, # Whether or not the response was validated with the origin server before being served from cache. This field is only meaningful if `cache_hit` is True.
           "userAgent": "A String", # The user agent sent by the client. Example: `"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)"`.
           "requestSize": "A String", # The size of the HTTP request message in bytes, including the request headers and the request body.
           "responseSize": "A String", # The size of the HTTP response message sent back to the client, in bytes, including the response headers and the response body.
         },
-        "resource": { # A specific monitored resource or a group of monitored resources. # Required. The monitored resource associated with this log entry. Example: a log entry that reports a database error would be associated with the monitored resource designating the particular database that reported the error.
-          "labels": { # Values for some or all of the labels listed in the associated monitored resource descriptor. For example, specify a specific Cloud SQL database by supplying values for both the `"database_id"` and `"zone"` labels. Specify the set of all Cloud SQL databases in a particular location by supplying a value for only the `"zone"` label.
+        "resource": { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The `type` field identifies a MonitoredResourceDescriptor object that describes the resource's schema. Information in the `labels` field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for `"gce_instance"` has labels `"instance_id"` and `"zone"`: { "type": "gce_instance", "labels": { "instance_id": "my-instance", "zone": "us-central1-a" }} # Required. The monitored resource associated with this log entry. Example: a log entry that reports a database error would be associated with the monitored resource designating the particular database that reported the error.
+          "labels": { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels `"database_id"` and `"zone"`.
             "a_key": "A String",
           },
-          "type": "A String", # The type of monitored resource. This field must match the value of the `type` field in a MonitoredResourceDescriptor object. For example, `"cloudsql_database"` represents Cloud SQL databases.
+          "type": "A String", # Required. The monitored resource type. This field must match the `type` field of a MonitoredResourceDescriptor object. For example, the type of a Cloud SQL database is `"cloudsql_database"`.
         },
         "severity": "A String", # Optional. The severity of the log entry. The default value is `LogSeverity.DEFAULT`.
         "textPayload": "A String", # The log entry payload, represented as a Unicode string (UTF-8).
@@ -200,7 +218,8 @@
         "jsonPayload": { # The log entry payload, represented as a structure that is expressed as a JSON object.
           "a_key": "", # Properties of the object.
         },
-        "logName": "A String", # Required. The resource name of the log to which this log entry belongs. The format of the name is `projects/<project-id>/logs/<log-id%gt;`. Examples: `"projects/my-projectid/logs/syslog"`, `"projects/1234567890/logs/library.googleapis.com%2Fbook_log"`. The log ID part of resource name must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters: [A-Za-z0-9]; and punctuation characters: forward-slash, underscore, hyphen, and period. Forward-slash (`/`) characters in the log ID must be URL-encoded.
+        "logName": "A String", # Required. The resource name of the log to which this log entry belongs. The format of the name is `"projects/
+            # /logs/"`. Examples: `"projects/my-projectid/logs/syslog"`, `"projects/1234567890/logs/library.googleapis.com%2Fbook_log"`. The log ID part of resource name must be less than 512 characters long and can only include the following characters: upper and lower case alphanumeric characters: [A-Za-z0-9]; and punctuation characters: forward-slash, underscore, hyphen, and period. Forward-slash (`/`) characters in the log ID must be URL-encoded.
         "protoPayload": { # The log entry payload, represented as a protocol buffer. You can only use `protoPayload` values that belong to a set of approved types.
           "a_key": "", # Properties of the object. Contains field @ype with type URL.
         },
diff --git a/docs/dyn/logging_v2beta1.monitoredResourceDescriptors.html b/docs/dyn/logging_v2beta1.monitoredResourceDescriptors.html
index 7211cef..82e9750 100644
--- a/docs/dyn/logging_v2beta1.monitoredResourceDescriptors.html
+++ b/docs/dyn/logging_v2beta1.monitoredResourceDescriptors.html
@@ -86,27 +86,28 @@
   <pre>Lists monitored resource descriptors that are used by Cloud Logging.
 
 Args:
-  pageSize: integer, Optional. The maximum number of results to return from this request. Fewer results might be returned. You must check for the `nextPageToken` result to determine if additional results are available, which you can retrieve by passing the `nextPageToken` value in the `pageToken` parameter to the next request.
-  pageToken: string, Optional. If the `pageToken` request parameter is supplied, then the next page of results in the set are retrieved. The `pageToken` parameter must be set with the value of the `nextPageToken` result parameter from the previous request.
+  pageSize: integer, Optional. The maximum number of results to return from this request. You must check for presence of `nextPageToken` to determine if additional results are available, which you can retrieve by passing the `nextPageToken` value as the `pageToken` parameter in the next request.
+  pageToken: string, Optional. If the `pageToken` parameter is supplied, then the next page of results is retrieved. The `pageToken` parameter must be set to the value of the `nextPageToken` from the previous response.
   x__xgafv: string, V1 error format.
 
 Returns:
   An object of the form:
 
     { # Result returned from ListMonitoredResourceDescriptors.
-    "nextPageToken": "A String", # If there are more results than were returned, then `nextPageToken` is returned in the response. To get the next batch of results, call this method again using the value of `nextPageToken` as `pageToken`.
+    "nextPageToken": "A String", # If there are more results than were returned, then `nextPageToken` is included in the response. To get the next set of results, call this method again using the value of `nextPageToken` as `pageToken`.
     "resourceDescriptors": [ # A list of resource descriptors.
-      { # A description of a type of monitored resource.
-        "displayName": "A String", # A concise name for the monitored resource type, which is displayed in user interfaces. For example, `"Cloud SQL Database"`.
-        "labels": [ # A set of labels that can be used to describe instances of this monitored resource type. For example, Cloud SQL databases can be labeled with their `"database_id"` and their `"zone"`.
+      { # An object that describes the schema of a MonitoredResource object using a type name and a set of labels. For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of `"gce_instance"` and specifies the use of the labels `"instance_id"` and `"zone"` to identify particular VM instances. Different APIs can support different monitored resource types. APIs generally provide a `list` method that returns the monitored resource descriptors used by the API.
+        "displayName": "A String", # Optional. A concise name for the monitored resource type that might be displayed in user interfaces. For example, `"Google Cloud SQL Database"`.
+        "labels": [ # Required. A set of labels used to describe instances of this monitored resource type. For example, an individual Google Cloud SQL database is identified by values for the labels `"database_id"` and `"zone"`.
           { # A description of a label.
             "valueType": "A String", # The type of data that can be assigned to the label.
             "description": "A String", # A human-readable description for the label.
             "key": "A String", # The label key.
           },
         ],
-        "type": "A String", # The monitored resource type. For example, the type `"cloudsql_database"` represents databases in Google Cloud SQL.
-        "description": "A String", # A detailed description of the monitored resource type, which is used in documentation.
+        "type": "A String", # Required. The monitored resource type. For example, the type `"cloudsql_database"` represents databases in Google Cloud SQL.
+        "name": "A String", # Optional. The resource name of the monitored resource descriptor: `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where {type} is the value of the `type` field in this object and {project_id} is a project ID that provides API-specific context for accessing the type. APIs that do not use project information can use the resource name format `"monitoredResourceDescriptors/{type}"`.
+        "description": "A String", # Optional. A detailed description of the monitored resource type that might be used in documentation.
       },
     ],
   }</pre>
diff --git a/docs/dyn/logging_v2beta1.projects.metrics.html b/docs/dyn/logging_v2beta1.projects.metrics.html
index 5884077..02c17b6 100644
--- a/docs/dyn/logging_v2beta1.projects.metrics.html
+++ b/docs/dyn/logging_v2beta1.projects.metrics.html
@@ -159,8 +159,8 @@
 
 Args:
   projectName: string, Required. The resource name of the project containing the metrics. Example: `"projects/my-project-id"`. (required)
-  pageSize: integer, Optional. The maximum number of results to return from this request. Fewer results might be returned. You must check for the `nextPageToken` result to determine if additional results are available, which you can retrieve by passing the `nextPageToken` value in the `pageToken` parameter to the next request.
-  pageToken: string, Optional. If the `pageToken` request parameter is supplied, then the next page of results in the set are retrieved. The `pageToken` parameter must be set with the value of the `nextPageToken` result parameter from the previous request. The value of `projectName` must be the same as in the previous request.
+  pageSize: integer, Optional. The maximum number of results to return from this request. You must check for presence of `nextPageToken` to determine if additional results are available, which you can retrieve by passing the `nextPageToken` value as the `pageToken` parameter in the next request.
+  pageToken: string, Optional. If the `pageToken` parameter is supplied, then the next page of results is retrieved. The `pageToken` parameter must be set to the value of the `nextPageToken` from the previous response. The value of `projectName` must be the same as in the previous request.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -174,7 +174,7 @@
           "description": "A String", # A description of this metric, which is used in documentation.
         },
     ],
-    "nextPageToken": "A String", # If there are more results than were returned, then `nextPageToken` is given a value in the response. To get the next batch of results, call this method again using the value of `nextPageToken` as `pageToken`.
+    "nextPageToken": "A String", # If there are more results than were returned, then `nextPageToken` is included in the response. To get the next set of results, call this method again using the value of `nextPageToken` as `pageToken`.
   }</pre>
 </div>
 
diff --git a/docs/dyn/logging_v2beta1.projects.sinks.html b/docs/dyn/logging_v2beta1.projects.sinks.html
index 4de1704..7b94b4f 100644
--- a/docs/dyn/logging_v2beta1.projects.sinks.html
+++ b/docs/dyn/logging_v2beta1.projects.sinks.html
@@ -103,10 +103,10 @@
     The object takes the form of:
 
 { # Describes a sink used to export log entries outside Cloud Logging.
-    "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters) that defines the log entries to be exported. The filter must be consistent with the log entry format designed by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example: `"logName:syslog AND severity>=ERROR"`.
+    "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters). Only log entries matching that filter are exported. The filter must be consistent with the log entry format specified by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example (V2 format): `"logName=projects/my-projectid/logs/syslog AND severity>=ERROR"`.
     "destination": "A String", # The export destination. See [Exporting Logs With Sinks](/logging/docs/api/tasks/exporting-logs). Examples: `"storage.googleapis.com/a-bucket"`, `"bigquery.googleapis.com/projects/a-project-id/datasets/a-dataset"`.
     "name": "A String", # Required. The client-assigned sink identifier. Example: `"my-severe-errors-to-pubsub"`. Sink identifiers are limited to 1000 characters and can include only the following characters: `A-Z`, `a-z`, `0-9`, and the special characters `_-.`.
-    "outputVersionFormat": "A String", # The log entry version used when exporting log entries from this sink. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
+    "outputVersionFormat": "A String", # The log entry version to use for this sink's exported log entries. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
   }
 
   x__xgafv: string, V1 error format.
@@ -115,10 +115,10 @@
   An object of the form:
 
     { # Describes a sink used to export log entries outside Cloud Logging.
-      "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters) that defines the log entries to be exported. The filter must be consistent with the log entry format designed by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example: `"logName:syslog AND severity>=ERROR"`.
+      "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters). Only log entries matching that filter are exported. The filter must be consistent with the log entry format specified by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example (V2 format): `"logName=projects/my-projectid/logs/syslog AND severity>=ERROR"`.
       "destination": "A String", # The export destination. See [Exporting Logs With Sinks](/logging/docs/api/tasks/exporting-logs). Examples: `"storage.googleapis.com/a-bucket"`, `"bigquery.googleapis.com/projects/a-project-id/datasets/a-dataset"`.
       "name": "A String", # Required. The client-assigned sink identifier. Example: `"my-severe-errors-to-pubsub"`. Sink identifiers are limited to 1000 characters and can include only the following characters: `A-Z`, `a-z`, `0-9`, and the special characters `_-.`.
-      "outputVersionFormat": "A String", # The log entry version used when exporting log entries from this sink. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
+      "outputVersionFormat": "A String", # The log entry version to use for this sink's exported log entries. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
     }</pre>
 </div>
 
@@ -149,10 +149,10 @@
   An object of the form:
 
     { # Describes a sink used to export log entries outside Cloud Logging.
-      "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters) that defines the log entries to be exported. The filter must be consistent with the log entry format designed by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example: `"logName:syslog AND severity>=ERROR"`.
+      "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters). Only log entries matching that filter are exported. The filter must be consistent with the log entry format specified by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example (V2 format): `"logName=projects/my-projectid/logs/syslog AND severity>=ERROR"`.
       "destination": "A String", # The export destination. See [Exporting Logs With Sinks](/logging/docs/api/tasks/exporting-logs). Examples: `"storage.googleapis.com/a-bucket"`, `"bigquery.googleapis.com/projects/a-project-id/datasets/a-dataset"`.
       "name": "A String", # Required. The client-assigned sink identifier. Example: `"my-severe-errors-to-pubsub"`. Sink identifiers are limited to 1000 characters and can include only the following characters: `A-Z`, `a-z`, `0-9`, and the special characters `_-.`.
-      "outputVersionFormat": "A String", # The log entry version used when exporting log entries from this sink. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
+      "outputVersionFormat": "A String", # The log entry version to use for this sink's exported log entries. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
     }</pre>
 </div>
 
@@ -161,22 +161,22 @@
   <pre>Lists sinks.
 
 Args:
-  projectName: string, Required. The resource name of the project containing the sinks. Example: `"projects/my-logging-project"`, `"projects/01234567890"`. (required)
-  pageSize: integer, Optional. The maximum number of results to return from this request. Fewer results might be returned. You must check for the `nextPageToken` result to determine if additional results are available, which you can retrieve by passing the `nextPageToken` value in the `pageToken` parameter to the next request.
-  pageToken: string, Optional. If the `pageToken` request parameter is supplied, then the next page of results in the set are retrieved. The `pageToken` parameter must be set with the value of the `nextPageToken` result parameter from the previous request. The value of `projectName` must be the same as in the previous request.
+  projectName: string, Required. The resource name of the project containing the sinks. Example: `"projects/my-logging-project"`. (required)
+  pageSize: integer, Optional. The maximum number of results to return from this request. You must check for presence of `nextPageToken` to determine if additional results are available, which you can retrieve by passing the `nextPageToken` value as the `pageToken` parameter in the next request.
+  pageToken: string, Optional. If the `pageToken` parameter is supplied, then the next page of results is retrieved. The `pageToken` parameter must be set to the value of the `nextPageToken` from the previous response. The value of `projectName` must be the same as in the previous request.
   x__xgafv: string, V1 error format.
 
 Returns:
   An object of the form:
 
     { # Result returned from `ListSinks`.
-    "nextPageToken": "A String", # If there are more results than were returned, then `nextPageToken` is given a value in the response. To get the next batch of results, call this method again using the value of `nextPageToken` as `pageToken`.
+    "nextPageToken": "A String", # If there are more results than were returned, then `nextPageToken` is included in the response. To get the next set of results, call this method again using the value of `nextPageToken` as `pageToken`.
     "sinks": [ # A list of sinks.
       { # Describes a sink used to export log entries outside Cloud Logging.
-          "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters) that defines the log entries to be exported. The filter must be consistent with the log entry format designed by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example: `"logName:syslog AND severity>=ERROR"`.
+          "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters). Only log entries matching that filter are exported. The filter must be consistent with the log entry format specified by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example (V2 format): `"logName=projects/my-projectid/logs/syslog AND severity>=ERROR"`.
           "destination": "A String", # The export destination. See [Exporting Logs With Sinks](/logging/docs/api/tasks/exporting-logs). Examples: `"storage.googleapis.com/a-bucket"`, `"bigquery.googleapis.com/projects/a-project-id/datasets/a-dataset"`.
           "name": "A String", # Required. The client-assigned sink identifier. Example: `"my-severe-errors-to-pubsub"`. Sink identifiers are limited to 1000 characters and can include only the following characters: `A-Z`, `a-z`, `0-9`, and the special characters `_-.`.
-          "outputVersionFormat": "A String", # The log entry version used when exporting log entries from this sink. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
+          "outputVersionFormat": "A String", # The log entry version to use for this sink's exported log entries. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
         },
     ],
   }</pre>
@@ -206,10 +206,10 @@
     The object takes the form of:
 
 { # Describes a sink used to export log entries outside Cloud Logging.
-    "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters) that defines the log entries to be exported. The filter must be consistent with the log entry format designed by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example: `"logName:syslog AND severity>=ERROR"`.
+    "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters). Only log entries matching that filter are exported. The filter must be consistent with the log entry format specified by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example (V2 format): `"logName=projects/my-projectid/logs/syslog AND severity>=ERROR"`.
     "destination": "A String", # The export destination. See [Exporting Logs With Sinks](/logging/docs/api/tasks/exporting-logs). Examples: `"storage.googleapis.com/a-bucket"`, `"bigquery.googleapis.com/projects/a-project-id/datasets/a-dataset"`.
     "name": "A String", # Required. The client-assigned sink identifier. Example: `"my-severe-errors-to-pubsub"`. Sink identifiers are limited to 1000 characters and can include only the following characters: `A-Z`, `a-z`, `0-9`, and the special characters `_-.`.
-    "outputVersionFormat": "A String", # The log entry version used when exporting log entries from this sink. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
+    "outputVersionFormat": "A String", # The log entry version to use for this sink's exported log entries. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
   }
 
   x__xgafv: string, V1 error format.
@@ -218,10 +218,10 @@
   An object of the form:
 
     { # Describes a sink used to export log entries outside Cloud Logging.
-      "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters) that defines the log entries to be exported. The filter must be consistent with the log entry format designed by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example: `"logName:syslog AND severity>=ERROR"`.
+      "filter": "A String", # An [advanced logs filter](/logging/docs/view/advanced_filters). Only log entries matching that filter are exported. The filter must be consistent with the log entry format specified by the `outputVersionFormat` parameter, regardless of the format of the log entry that was originally written to Cloud Logging. Example (V2 format): `"logName=projects/my-projectid/logs/syslog AND severity>=ERROR"`.
       "destination": "A String", # The export destination. See [Exporting Logs With Sinks](/logging/docs/api/tasks/exporting-logs). Examples: `"storage.googleapis.com/a-bucket"`, `"bigquery.googleapis.com/projects/a-project-id/datasets/a-dataset"`.
       "name": "A String", # Required. The client-assigned sink identifier. Example: `"my-severe-errors-to-pubsub"`. Sink identifiers are limited to 1000 characters and can include only the following characters: `A-Z`, `a-z`, `0-9`, and the special characters `_-.`.
-      "outputVersionFormat": "A String", # The log entry version used when exporting log entries from this sink. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
+      "outputVersionFormat": "A String", # The log entry version to use for this sink's exported log entries. This version does not have to correspond to the version of the log entry when it was written to Cloud Logging.
     }</pre>
 </div>
 
diff --git a/docs/dyn/monitoring_v3.html b/docs/dyn/monitoring_v3.html
new file mode 100644
index 0000000..783d845
--- /dev/null
+++ b/docs/dyn/monitoring_v3.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="monitoring_v3.html">Google Monitoring API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="monitoring_v3.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/monitoring_v3.projects.collectdTimeSeries.html b/docs/dyn/monitoring_v3.projects.collectdTimeSeries.html
new file mode 100644
index 0000000..dda189d
--- /dev/null
+++ b/docs/dyn/monitoring_v3.projects.collectdTimeSeries.html
@@ -0,0 +1,197 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="monitoring_v3.html">Google Monitoring API</a> . <a href="monitoring_v3.projects.html">projects</a> . <a href="monitoring_v3.projects.collectdTimeSeries.html">collectdTimeSeries</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(name, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a new time series with the given data points. This method is only for use in `collectd`-related code, including the Google Monitoring Agent. See [google.monitoring.v3.MetricService.CreateTimeSeries] instead.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(name, body, x__xgafv=None)</code>
+  <pre>Creates a new time series with the given data points. This method is only for use in `collectd`-related code, including the Google Monitoring Agent. See [google.monitoring.v3.MetricService.CreateTimeSeries] instead.
+
+Args:
+  name: string, The project in which to create the time series. The format is `"projects/PROJECT_ID_OR_NUMBER"`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The `CreateCollectdTimeSeries` request.
+    "collectdPayloads": [ # The `collectd` payloads representing the time series data. You must not include more than a single point for each time series, so no two payloads can have the same values for all of the fields `plugin`, `plugin_instance`, `type`, and `type_instance`.
+      { # A collection of data points sent from a `collectd`-based plugin. See the `collectd` documentation for more information.
+        "plugin": "A String", # The name of the plugin. Example: `"disk"`.
+        "typeInstance": "A String", # The measurement type instance. Example: `"used"`.
+        "values": [ # The measured values during this time interval. Each value must have a different `dataSourceName`.
+          { # A single data point from a `collectd`-based plugin.
+            "dataSourceType": "A String", # The type of measurement.
+            "dataSourceName": "A String", # The data source for the `collectd` value. For example there are two data sources for network measurements: `"rx"` and `"tx"`.
+            "value": { # A single strongly-typed value. # The measurement value.
+              "distributionValue": { # Distribution contains summary statistics for a population of values and, optionally, a histogram representing the distribution of those values across a specified set of histogram buckets. The summary statistics are the count, mean, sum of the squared deviation from the mean, the minimum, and the maximum of the set of population of values. The histogram is based on a sequence of buckets and gives a count of values that fall into each bucket. The boundaries of the buckets are given either explicitly or by specifying parameters for a method of computing them (buckets of fixed width or buckets of exponentially increasing width). Although it is not forbidden, it is generally a bad idea to include non-finite values (infinities or NaNs) in the population of values, as this will render the `mean` and `sum_of_squared_deviation` fields meaningless. # A distribution value.
+                "count": "A String", # The number of values in the population. Must be non-negative.
+                "bucketCounts": [ # If `bucket_options` is given, then the sum of the values in `bucket_counts` must equal the value in `count`. If `bucket_options` is not given, no `bucket_counts` fields may be given. Bucket counts are given in order under the numbering scheme described above (the underflow bucket has number 0; the finite buckets, if any, have numbers 1 through N-2; the overflow bucket has number N-1). The size of `bucket_counts` must be no greater than N as defined in `bucket_options`. Any suffix of trailing zero bucket_count fields may be omitted.
+                  "A String",
+                ],
+                "bucketOptions": { # A Distribution may optionally contain a histogram of the values in the population. The histogram is given in `bucket_counts` as counts of values that fall into one of a sequence of non-overlapping buckets. The sequence of buckets is described by `bucket_options`. A bucket specifies an inclusive lower bound and exclusive upper bound for the values that are counted for that bucket. The upper bound of a bucket is strictly greater than the lower bound. The sequence of N buckets for a Distribution consists of an underflow bucket (number 0), zero or more finite buckets (number 1 through N - 2) and an overflow bucket (number N - 1). The buckets are contiguous: the lower bound of bucket i (i > 0) is the same as the upper bound of bucket i - 1. The buckets span the whole range of finite values: lower bound of the underflow bucket is -infinity and the upper bound of the overflow bucket is +infinity. The finite buckets are so-called because both bounds are finite. `BucketOptions` describes bucket boundaries in one of three ways. Two describe the boundaries by giving parameters for a formula to generate boundaries and one gives the bucket boundaries explicitly. If `bucket_boundaries` is not given, then no `bucket_counts` may be given. # Defines the histogram bucket boundaries.
+                  "exponentialBuckets": { # Specify a sequence of buckets that have a width that is proportional to the value of the lower bound. Each bucket represents a constant relative uncertainty on a specific value in the bucket. Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for bucket i: Upper bound (0 <= i < N-1): scale * (growth_factor ^ i). Lower bound (1 <= i < N): scale * (growth_factor ^ (i - 1)). # The exponential buckets.
+                    "scale": 3.14, # Must be greater than 0
+                    "growthFactor": 3.14, # Must be greater than 1
+                    "numFiniteBuckets": 42, # must be greater than 0
+                  },
+                  "linearBuckets": { # Specify a sequence of buckets that all have the same width (except overflow and underflow). Each bucket represents a constant absolute uncertainty on the specific value in the bucket. Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for bucket `i`: Upper bound (0 <= i < N-1): offset + (width * i). Lower bound (1 <= i < N): offset + (width * (i - 1)). # The linear bucket.
+                    "width": 3.14, # Must be greater than 0.
+                    "numFiniteBuckets": 42, # Must be greater than 0.
+                    "offset": 3.14, # Lower bound of the first bucket.
+                  },
+                  "explicitBuckets": { # A set of buckets with arbitrary widths. Defines `size(bounds) + 1` (= N) buckets with these boundaries for bucket i: Upper bound (0 <= i < N-1): bounds[i] Lower bound (1 <= i < N); bounds[i - 1] There must be at least one element in `bounds`. If `bounds` has only one element, there are no finite buckets, and that single element is the common boundary of the overflow and underflow buckets. # The explicit buckets.
+                    "bounds": [ # The values must be monotonically increasing.
+                      3.14,
+                    ],
+                  },
+                },
+                "range": { # The range of the population values. # If specified, contains the range of the population values. The field must not be present if the `count` is zero.
+                  "max": 3.14, # The maximum of the population values.
+                  "min": 3.14, # The minimum of the population values.
+                },
+                "sumOfSquaredDeviation": 3.14, # The sum of squared deviations from the mean of the values in the population. For values x_i this is: Sum[i=1..n]((x_i - mean)^2) Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition describes Welford's method for accumulating this sum in one pass. If `count` is zero then this field must be zero.
+                "mean": 3.14, # The arithmetic mean of the values in the population. If `count` is zero then this field must be zero.
+              },
+              "stringValue": "A String", # A variable-length string value.
+              "boolValue": True or False, # A Boolean value: `true` or `false`.
+              "int64Value": "A String", # A 64-bit integer. Its range is approximately ±9.2x1018.
+              "doubleValue": 3.14, # A 64-bit double-precision floating-point number. Its magnitude is approximately ±10±300 and it has 16 significant digits of precision.
+            },
+          },
+        ],
+        "startTime": "A String", # The start time of the interval.
+        "endTime": "A String", # The end time of the interval.
+        "type": "A String", # The measurement type. Example: `"memory"`.
+        "pluginInstance": "A String", # The instance name of the plugin Example: `"hdcl"`.
+        "metadata": { # The measurement metadata. Example: `"process_id" -> 12345`
+          "a_key": { # A single strongly-typed value.
+            "distributionValue": { # Distribution contains summary statistics for a population of values and, optionally, a histogram representing the distribution of those values across a specified set of histogram buckets. The summary statistics are the count, mean, sum of the squared deviation from the mean, the minimum, and the maximum of the set of population of values. The histogram is based on a sequence of buckets and gives a count of values that fall into each bucket. The boundaries of the buckets are given either explicitly or by specifying parameters for a method of computing them (buckets of fixed width or buckets of exponentially increasing width). Although it is not forbidden, it is generally a bad idea to include non-finite values (infinities or NaNs) in the population of values, as this will render the `mean` and `sum_of_squared_deviation` fields meaningless. # A distribution value.
+              "count": "A String", # The number of values in the population. Must be non-negative.
+              "bucketCounts": [ # If `bucket_options` is given, then the sum of the values in `bucket_counts` must equal the value in `count`. If `bucket_options` is not given, no `bucket_counts` fields may be given. Bucket counts are given in order under the numbering scheme described above (the underflow bucket has number 0; the finite buckets, if any, have numbers 1 through N-2; the overflow bucket has number N-1). The size of `bucket_counts` must be no greater than N as defined in `bucket_options`. Any suffix of trailing zero bucket_count fields may be omitted.
+                "A String",
+              ],
+              "bucketOptions": { # A Distribution may optionally contain a histogram of the values in the population. The histogram is given in `bucket_counts` as counts of values that fall into one of a sequence of non-overlapping buckets. The sequence of buckets is described by `bucket_options`. A bucket specifies an inclusive lower bound and exclusive upper bound for the values that are counted for that bucket. The upper bound of a bucket is strictly greater than the lower bound. The sequence of N buckets for a Distribution consists of an underflow bucket (number 0), zero or more finite buckets (number 1 through N - 2) and an overflow bucket (number N - 1). The buckets are contiguous: the lower bound of bucket i (i > 0) is the same as the upper bound of bucket i - 1. The buckets span the whole range of finite values: lower bound of the underflow bucket is -infinity and the upper bound of the overflow bucket is +infinity. The finite buckets are so-called because both bounds are finite. `BucketOptions` describes bucket boundaries in one of three ways. Two describe the boundaries by giving parameters for a formula to generate boundaries and one gives the bucket boundaries explicitly. If `bucket_boundaries` is not given, then no `bucket_counts` may be given. # Defines the histogram bucket boundaries.
+                "exponentialBuckets": { # Specify a sequence of buckets that have a width that is proportional to the value of the lower bound. Each bucket represents a constant relative uncertainty on a specific value in the bucket. Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for bucket i: Upper bound (0 <= i < N-1): scale * (growth_factor ^ i). Lower bound (1 <= i < N): scale * (growth_factor ^ (i - 1)). # The exponential buckets.
+                  "scale": 3.14, # Must be greater than 0
+                  "growthFactor": 3.14, # Must be greater than 1
+                  "numFiniteBuckets": 42, # must be greater than 0
+                },
+                "linearBuckets": { # Specify a sequence of buckets that all have the same width (except overflow and underflow). Each bucket represents a constant absolute uncertainty on the specific value in the bucket. Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for bucket `i`: Upper bound (0 <= i < N-1): offset + (width * i). Lower bound (1 <= i < N): offset + (width * (i - 1)). # The linear bucket.
+                  "width": 3.14, # Must be greater than 0.
+                  "numFiniteBuckets": 42, # Must be greater than 0.
+                  "offset": 3.14, # Lower bound of the first bucket.
+                },
+                "explicitBuckets": { # A set of buckets with arbitrary widths. Defines `size(bounds) + 1` (= N) buckets with these boundaries for bucket i: Upper bound (0 <= i < N-1): bounds[i] Lower bound (1 <= i < N); bounds[i - 1] There must be at least one element in `bounds`. If `bounds` has only one element, there are no finite buckets, and that single element is the common boundary of the overflow and underflow buckets. # The explicit buckets.
+                  "bounds": [ # The values must be monotonically increasing.
+                    3.14,
+                  ],
+                },
+              },
+              "range": { # The range of the population values. # If specified, contains the range of the population values. The field must not be present if the `count` is zero.
+                "max": 3.14, # The maximum of the population values.
+                "min": 3.14, # The minimum of the population values.
+              },
+              "sumOfSquaredDeviation": 3.14, # The sum of squared deviations from the mean of the values in the population. For values x_i this is: Sum[i=1..n]((x_i - mean)^2) Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition describes Welford's method for accumulating this sum in one pass. If `count` is zero then this field must be zero.
+              "mean": 3.14, # The arithmetic mean of the values in the population. If `count` is zero then this field must be zero.
+            },
+            "stringValue": "A String", # A variable-length string value.
+            "boolValue": True or False, # A Boolean value: `true` or `false`.
+            "int64Value": "A String", # A 64-bit integer. Its range is approximately ±9.2x1018.
+            "doubleValue": 3.14, # A 64-bit double-precision floating-point number. Its magnitude is approximately ±10±300 and it has 16 significant digits of precision.
+          },
+        },
+      },
+    ],
+    "resource": { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The `type` field identifies a MonitoredResourceDescriptor object that describes the resource's schema. Information in the `labels` field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for `"gce_instance"` has labels `"instance_id"` and `"zone"`: { "type": "gce_instance", "labels": { "instance_id": "my-instance", "zone": "us-central1-a" }} # The monitored resource associated with the time series.
+      "labels": { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels `"database_id"` and `"zone"`.
+        "a_key": "A String",
+      },
+      "type": "A String", # Required. The monitored resource type. This field must match the `type` field of a MonitoredResourceDescriptor object. For example, the type of a Cloud SQL database is `"cloudsql_database"`.
+    },
+    "collectdVersion": "A String", # The version of `collectd` that collected the data. Example: `"5.3.0-192.el6"`.
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/monitoring_v3.projects.groups.html b/docs/dyn/monitoring_v3.projects.groups.html
new file mode 100644
index 0000000..68f850f
--- /dev/null
+++ b/docs/dyn/monitoring_v3.projects.groups.html
@@ -0,0 +1,244 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="monitoring_v3.html">Google Monitoring API</a> . <a href="monitoring_v3.projects.html">projects</a> . <a href="monitoring_v3.projects.groups.html">groups</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="monitoring_v3.projects.groups.members.html">members()</a></code>
+</p>
+<p class="firstline">Returns the members Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#create">create(name, body, validateOnly=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a new group.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes an existing group.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets a single group.</p>
+<p class="toc_element">
+  <code><a href="#list">list(name, ancestorsOfGroup=None, descendantsOfGroup=None, pageSize=None, x__xgafv=None, pageToken=None, childrenOfGroup=None)</a></code></p>
+<p class="firstline">Lists the existing groups.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#update">update(name, body, validateOnly=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an existing group. You can change any group attributes except `name`.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(name, body, validateOnly=None, x__xgafv=None)</code>
+  <pre>Creates a new group.
+
+Args:
+  name: string, The project in which to create the group. The format is `"projects/{project_id_or_number}"`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The description of a dynamic collection of monitored resources. Each group has a filter that is matched against monitored resources and their associated metadata. If a group's filter matches an available monitored resource, then that resource is a member of that group. Groups can contain any number of monitored resources, and each monitored resource can be a member of any number of groups. Groups can be nested in parent-child hierarchies. The `parentName` field identifies an optional parent for each group. If a group has a parent, then the only monitored resources available to be matched by the group's filter are the resources contained in the parent group. In other words, a group contains the monitored resources that match its filter and the filters of all the group's ancestors. A group without a parent can contain any monitored resource. For example, consider an infrastructure running a set of instances with two user-defined tags: `"environment"` and `"role"`. A parent group has a filter, `environment="production"`. A child of that parent group has a filter, `role="transcoder"`. The parent group contains all instances in the production environment, regardless of their roles. The child group contains instances that have the transcoder role *and* are in the production environment. The monitored resources contained in a group can change at any moment, depending on what resources exist and what filters are associated with the group and its ancestors.
+    "filter": "A String", # The filter used to determine which monitored resources belong to this group.
+    "parentName": "A String", # The name of the group's parent, if it has one. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. For groups with no parent, `parentName` is the empty string, `""`.
+    "displayName": "A String", # A user-assigned name for this group, used only for display purposes.
+    "name": "A String", # The name of this group. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to `CreateGroup` and a unique `{group_id}` that is generated automatically. @OutputOnly
+    "isCluster": True or False, # If true, the members of this group are considered to be a cluster. The system can perform additional analysis on groups that are clusters.
+  }
+
+  validateOnly: boolean, If true, validate this request but do not create the group.
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # The description of a dynamic collection of monitored resources. Each group has a filter that is matched against monitored resources and their associated metadata. If a group's filter matches an available monitored resource, then that resource is a member of that group. Groups can contain any number of monitored resources, and each monitored resource can be a member of any number of groups. Groups can be nested in parent-child hierarchies. The `parentName` field identifies an optional parent for each group. If a group has a parent, then the only monitored resources available to be matched by the group's filter are the resources contained in the parent group. In other words, a group contains the monitored resources that match its filter and the filters of all the group's ancestors. A group without a parent can contain any monitored resource. For example, consider an infrastructure running a set of instances with two user-defined tags: `"environment"` and `"role"`. A parent group has a filter, `environment="production"`. A child of that parent group has a filter, `role="transcoder"`. The parent group contains all instances in the production environment, regardless of their roles. The child group contains instances that have the transcoder role *and* are in the production environment. The monitored resources contained in a group can change at any moment, depending on what resources exist and what filters are associated with the group and its ancestors.
+      "filter": "A String", # The filter used to determine which monitored resources belong to this group.
+      "parentName": "A String", # The name of the group's parent, if it has one. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. For groups with no parent, `parentName` is the empty string, `""`.
+      "displayName": "A String", # A user-assigned name for this group, used only for display purposes.
+      "name": "A String", # The name of this group. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to `CreateGroup` and a unique `{group_id}` that is generated automatically. @OutputOnly
+      "isCluster": True or False, # If true, the members of this group are considered to be a cluster. The system can perform additional analysis on groups that are clusters.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
+  <pre>Deletes an existing group.
+
+Args:
+  name: string, The group to delete. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets a single group.
+
+Args:
+  name: string, The group to retrieve. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # The description of a dynamic collection of monitored resources. Each group has a filter that is matched against monitored resources and their associated metadata. If a group's filter matches an available monitored resource, then that resource is a member of that group. Groups can contain any number of monitored resources, and each monitored resource can be a member of any number of groups. Groups can be nested in parent-child hierarchies. The `parentName` field identifies an optional parent for each group. If a group has a parent, then the only monitored resources available to be matched by the group's filter are the resources contained in the parent group. In other words, a group contains the monitored resources that match its filter and the filters of all the group's ancestors. A group without a parent can contain any monitored resource. For example, consider an infrastructure running a set of instances with two user-defined tags: `"environment"` and `"role"`. A parent group has a filter, `environment="production"`. A child of that parent group has a filter, `role="transcoder"`. The parent group contains all instances in the production environment, regardless of their roles. The child group contains instances that have the transcoder role *and* are in the production environment. The monitored resources contained in a group can change at any moment, depending on what resources exist and what filters are associated with the group and its ancestors.
+      "filter": "A String", # The filter used to determine which monitored resources belong to this group.
+      "parentName": "A String", # The name of the group's parent, if it has one. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. For groups with no parent, `parentName` is the empty string, `""`.
+      "displayName": "A String", # A user-assigned name for this group, used only for display purposes.
+      "name": "A String", # The name of this group. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to `CreateGroup` and a unique `{group_id}` that is generated automatically. @OutputOnly
+      "isCluster": True or False, # If true, the members of this group are considered to be a cluster. The system can perform additional analysis on groups that are clusters.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name, ancestorsOfGroup=None, descendantsOfGroup=None, pageSize=None, x__xgafv=None, pageToken=None, childrenOfGroup=None)</code>
+  <pre>Lists the existing groups.
+
+Args:
+  name: string, The project whose groups are to be listed. The format is `"projects/{project_id_or_number}"`. (required)
+  ancestorsOfGroup: string, A group name: `"projects/{project_id_or_number}/groups/{group_id}"`. Returns groups that are ancestors of the specified group. The groups are returned in order, starting with the immediate parent and ending with the most distant ancestor. If the specified group has no immediate parent, the results are empty.
+  descendantsOfGroup: string, A group name: `"projects/{project_id_or_number}/groups/{group_id}"`. Returns the descendants of the specified group. This is a superset of the results returned by the `childrenOfGroup` filter, and includes children-of-children, and so forth.
+  pageSize: integer, A positive number that is the maximum number of results to return.
+  x__xgafv: string, V1 error format.
+  pageToken: string, If this field is not empty then it must contain the `nextPageToken` value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.
+  childrenOfGroup: string, A group name: `"projects/{project_id_or_number}/groups/{group_id}"`. Returns groups whose `parentName` field contains the group name. If no groups have this parent, the results are empty.
+
+Returns:
+  An object of the form:
+
+    { # The `ListGroups` response.
+    "nextPageToken": "A String", # If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as `pageToken` in the next call to this method.
+    "group": [ # The groups that match the specified filters.
+      { # The description of a dynamic collection of monitored resources. Each group has a filter that is matched against monitored resources and their associated metadata. If a group's filter matches an available monitored resource, then that resource is a member of that group. Groups can contain any number of monitored resources, and each monitored resource can be a member of any number of groups. Groups can be nested in parent-child hierarchies. The `parentName` field identifies an optional parent for each group. If a group has a parent, then the only monitored resources available to be matched by the group's filter are the resources contained in the parent group. In other words, a group contains the monitored resources that match its filter and the filters of all the group's ancestors. A group without a parent can contain any monitored resource. For example, consider an infrastructure running a set of instances with two user-defined tags: `"environment"` and `"role"`. A parent group has a filter, `environment="production"`. A child of that parent group has a filter, `role="transcoder"`. The parent group contains all instances in the production environment, regardless of their roles. The child group contains instances that have the transcoder role *and* are in the production environment. The monitored resources contained in a group can change at any moment, depending on what resources exist and what filters are associated with the group and its ancestors.
+          "filter": "A String", # The filter used to determine which monitored resources belong to this group.
+          "parentName": "A String", # The name of the group's parent, if it has one. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. For groups with no parent, `parentName` is the empty string, `""`.
+          "displayName": "A String", # A user-assigned name for this group, used only for display purposes.
+          "name": "A String", # The name of this group. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to `CreateGroup` and a unique `{group_id}` that is generated automatically. @OutputOnly
+          "isCluster": True or False, # If true, the members of this group are considered to be a cluster. The system can perform additional analysis on groups that are clusters.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(name, body, validateOnly=None, x__xgafv=None)</code>
+  <pre>Updates an existing group. You can change any group attributes except `name`.
+
+Args:
+  name: string, The name of this group. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to `CreateGroup` and a unique `{group_id}` that is generated automatically. @OutputOnly (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The description of a dynamic collection of monitored resources. Each group has a filter that is matched against monitored resources and their associated metadata. If a group's filter matches an available monitored resource, then that resource is a member of that group. Groups can contain any number of monitored resources, and each monitored resource can be a member of any number of groups. Groups can be nested in parent-child hierarchies. The `parentName` field identifies an optional parent for each group. If a group has a parent, then the only monitored resources available to be matched by the group's filter are the resources contained in the parent group. In other words, a group contains the monitored resources that match its filter and the filters of all the group's ancestors. A group without a parent can contain any monitored resource. For example, consider an infrastructure running a set of instances with two user-defined tags: `"environment"` and `"role"`. A parent group has a filter, `environment="production"`. A child of that parent group has a filter, `role="transcoder"`. The parent group contains all instances in the production environment, regardless of their roles. The child group contains instances that have the transcoder role *and* are in the production environment. The monitored resources contained in a group can change at any moment, depending on what resources exist and what filters are associated with the group and its ancestors.
+    "filter": "A String", # The filter used to determine which monitored resources belong to this group.
+    "parentName": "A String", # The name of the group's parent, if it has one. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. For groups with no parent, `parentName` is the empty string, `""`.
+    "displayName": "A String", # A user-assigned name for this group, used only for display purposes.
+    "name": "A String", # The name of this group. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to `CreateGroup` and a unique `{group_id}` that is generated automatically. @OutputOnly
+    "isCluster": True or False, # If true, the members of this group are considered to be a cluster. The system can perform additional analysis on groups that are clusters.
+  }
+
+  validateOnly: boolean, If true, validate this request but do not update the existing group.
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # The description of a dynamic collection of monitored resources. Each group has a filter that is matched against monitored resources and their associated metadata. If a group's filter matches an available monitored resource, then that resource is a member of that group. Groups can contain any number of monitored resources, and each monitored resource can be a member of any number of groups. Groups can be nested in parent-child hierarchies. The `parentName` field identifies an optional parent for each group. If a group has a parent, then the only monitored resources available to be matched by the group's filter are the resources contained in the parent group. In other words, a group contains the monitored resources that match its filter and the filters of all the group's ancestors. A group without a parent can contain any monitored resource. For example, consider an infrastructure running a set of instances with two user-defined tags: `"environment"` and `"role"`. A parent group has a filter, `environment="production"`. A child of that parent group has a filter, `role="transcoder"`. The parent group contains all instances in the production environment, regardless of their roles. The child group contains instances that have the transcoder role *and* are in the production environment. The monitored resources contained in a group can change at any moment, depending on what resources exist and what filters are associated with the group and its ancestors.
+      "filter": "A String", # The filter used to determine which monitored resources belong to this group.
+      "parentName": "A String", # The name of the group's parent, if it has one. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. For groups with no parent, `parentName` is the empty string, `""`.
+      "displayName": "A String", # A user-assigned name for this group, used only for display purposes.
+      "name": "A String", # The name of this group. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to `CreateGroup` and a unique `{group_id}` that is generated automatically. @OutputOnly
+      "isCluster": True or False, # If true, the members of this group are considered to be a cluster. The system can perform additional analysis on groups that are clusters.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/monitoring_v3.projects.groups.members.html b/docs/dyn/monitoring_v3.projects.groups.members.html
new file mode 100644
index 0000000..518ca76
--- /dev/null
+++ b/docs/dyn/monitoring_v3.projects.groups.members.html
@@ -0,0 +1,128 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="monitoring_v3.html">Google Monitoring API</a> . <a href="monitoring_v3.projects.html">projects</a> . <a href="monitoring_v3.projects.groups.html">groups</a> . <a href="monitoring_v3.projects.groups.members.html">members</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(name, pageSize=None, x__xgafv=None, pageToken=None, interval_endTime=None, filter=None, interval_startTime=None)</a></code></p>
+<p class="firstline">Lists the monitored resources that are members of a group.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(name, pageSize=None, x__xgafv=None, pageToken=None, interval_endTime=None, filter=None, interval_startTime=None)</code>
+  <pre>Lists the monitored resources that are members of a group.
+
+Args:
+  name: string, The group whose members are listed. The format is `"projects/{project_id_or_number}/groups/{group_id}"`. (required)
+  pageSize: integer, A positive number that is the maximum number of results to return.
+  x__xgafv: string, V1 error format.
+  pageToken: string, If this field is not empty then it must contain the `nextPageToken` value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.
+  interval_endTime: string, Required. The end of the interval. The interval includes this time.
+  filter: string, An optional [list filter](/monitoring/api/learn_more#filtering) describing the members to be returned. The filter may reference the type, labels, and metadata of monitored resources that comprise the group. For example, to return only resources representing Compute Engine VM instances, use this filter: resource.type = "gce_instance"
+  interval_startTime: string, If this value is omitted, the interval is a point in time, `endTime`. If `startTime` is present, it must be earlier than (less than) `endTime`. The interval begins after `startTime`—it does not include `startTime`.
+
+Returns:
+  An object of the form:
+
+    { # The `ListGroupMembers` response.
+    "nextPageToken": "A String", # If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as `pageToken` in the next call to this method.
+    "totalSize": 42, # The total number of elements matching this request.
+    "members": [ # A set of monitored resources in the group.
+      { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The `type` field identifies a MonitoredResourceDescriptor object that describes the resource's schema. Information in the `labels` field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for `"gce_instance"` has labels `"instance_id"` and `"zone"`: { "type": "gce_instance", "labels": { "instance_id": "my-instance", "zone": "us-central1-a" }}
+        "labels": { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels `"database_id"` and `"zone"`.
+          "a_key": "A String",
+        },
+        "type": "A String", # Required. The monitored resource type. This field must match the `type` field of a MonitoredResourceDescriptor object. For example, the type of a Cloud SQL database is `"cloudsql_database"`.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/monitoring_v3.projects.html b/docs/dyn/monitoring_v3.projects.html
new file mode 100644
index 0000000..91daa10
--- /dev/null
+++ b/docs/dyn/monitoring_v3.projects.html
@@ -0,0 +1,102 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="monitoring_v3.html">Google Monitoring API</a> . <a href="monitoring_v3.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="monitoring_v3.projects.collectdTimeSeries.html">collectdTimeSeries()</a></code>
+</p>
+<p class="firstline">Returns the collectdTimeSeries Resource.</p>
+
+<p class="toc_element">
+  <code><a href="monitoring_v3.projects.groups.html">groups()</a></code>
+</p>
+<p class="firstline">Returns the groups Resource.</p>
+
+<p class="toc_element">
+  <code><a href="monitoring_v3.projects.metricDescriptors.html">metricDescriptors()</a></code>
+</p>
+<p class="firstline">Returns the metricDescriptors Resource.</p>
+
+<p class="toc_element">
+  <code><a href="monitoring_v3.projects.monitoredResourceDescriptors.html">monitoredResourceDescriptors()</a></code>
+</p>
+<p class="firstline">Returns the monitoredResourceDescriptors Resource.</p>
+
+<p class="toc_element">
+  <code><a href="monitoring_v3.projects.timeSeries.html">timeSeries()</a></code>
+</p>
+<p class="firstline">Returns the timeSeries Resource.</p>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/monitoring_v3.projects.metricDescriptors.html b/docs/dyn/monitoring_v3.projects.metricDescriptors.html
new file mode 100644
index 0000000..8fb373b
--- /dev/null
+++ b/docs/dyn/monitoring_v3.projects.metricDescriptors.html
@@ -0,0 +1,237 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="monitoring_v3.html">Google Monitoring API</a> . <a href="monitoring_v3.projects.html">projects</a> . <a href="monitoring_v3.projects.metricDescriptors.html">metricDescriptors</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(name, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a new metric descriptor. User-created metric descriptors define [custom metrics](/monitoring/custom-metrics).</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes a metric descriptor. Only user-created [custom metrics](/monitoring/custom-metrics) can be deleted.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets a single metric descriptor. This method does not require a Stackdriver account.</p>
+<p class="toc_element">
+  <code><a href="#list">list(name, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists metric descriptors that match a filter. This method does not require a Stackdriver account.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(name, body, x__xgafv=None)</code>
+  <pre>Creates a new metric descriptor. User-created metric descriptors define [custom metrics](/monitoring/custom-metrics).
+
+Args:
+  name: string, The project on which to execute the request. The format is `"projects/{project_id_or_number}"`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Defines a metric type and its schema.
+    "displayName": "A String", # A concise name for the metric, which can be displayed in user interfaces. Use sentence case without an ending period, for example "Request count".
+    "name": "A String", # Resource name. The format of the name may vary between different implementations. For examples: projects/{project_id}/metricDescriptors/{type=**} metricDescriptors/{type=**}
+    "metricKind": "A String", # Whether the metric records instantaneous values, changes to a value, etc.
+    "valueType": "A String", # Whether the measurement is an integer, a floating-point number, etc.
+    "labels": [ # The set of labels that can be used to describe a specific instance of this metric type. For example, the `compute.googleapis.com/instance/network/received_bytes_count` metric type has a label, `loadbalanced`, that specifies whether the traffic was received through a load balanced IP address.
+      { # A description of a label.
+        "valueType": "A String", # The type of data that can be assigned to the label.
+        "description": "A String", # A human-readable description for the label.
+        "key": "A String", # The label key.
+      },
+    ],
+    "type": "A String", # The metric type including a DNS name prefix, for example `"compute.googleapis.com/instance/cpu/utilization"`. Metric types should use a natural hierarchical grouping such as the following: compute.googleapis.com/instance/cpu/utilization compute.googleapis.com/instance/disk/read_ops_count compute.googleapis.com/instance/network/received_bytes_count Note that if the metric type changes, the monitoring data will be discontinued, and anything depends on it will break, such as monitoring dashboards, alerting rules and quota limits. Therefore, once a metric has been published, its type should be immutable.
+    "unit": "A String", # The unit in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day **Prefixes (PREFIX)** * `k` kilo (10**3) * `M` mega (10**6) * `G` giga (10**9) * `T` tera (10**12) * `P` peta (10**15) * `E` exa (10**18) * `Z` zetta (10**21) * `Y` yotta (10**24) * `m` milli (10**-3) * `u` micro (10**-6) * `n` nano (10**-9) * `p` pico (10**-12) * `f` femto (10**-15) * `a` atto (10**-18) * `z` zepto (10**-21) * `y` yocto (10**-24) * `Ki` kibi (2**10) * `Mi` mebi (2**20) * `Gi` gibi (2**30) * `Ti` tebi (2**40) **Grammar** The grammar includes the dimensionless unit `1`, such as `1/s`. The grammar also includes these connectors: * `/` division (as an infix operator, e.g. `1/s`). * `.` multiplication (as an infix operator, e.g. `GBy.d`) The grammar for a unit is as follows: Expression = Component { "." Component } { "/" Component } ; Component = [ PREFIX ] UNIT [ Annotation ] | Annotation | "1" ; Annotation = "{" NAME "}" ; Notes: * `Annotation` is just a comment if it follows a `UNIT` and is equivalent to `1` if it is used alone. For examples, `{requests}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing '{' or '}'.
+    "description": "A String", # A detailed description of the metric, which can be used in documentation.
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Defines a metric type and its schema.
+      "displayName": "A String", # A concise name for the metric, which can be displayed in user interfaces. Use sentence case without an ending period, for example "Request count".
+      "name": "A String", # Resource name. The format of the name may vary between different implementations. For examples: projects/{project_id}/metricDescriptors/{type=**} metricDescriptors/{type=**}
+      "metricKind": "A String", # Whether the metric records instantaneous values, changes to a value, etc.
+      "valueType": "A String", # Whether the measurement is an integer, a floating-point number, etc.
+      "labels": [ # The set of labels that can be used to describe a specific instance of this metric type. For example, the `compute.googleapis.com/instance/network/received_bytes_count` metric type has a label, `loadbalanced`, that specifies whether the traffic was received through a load balanced IP address.
+        { # A description of a label.
+          "valueType": "A String", # The type of data that can be assigned to the label.
+          "description": "A String", # A human-readable description for the label.
+          "key": "A String", # The label key.
+        },
+      ],
+      "type": "A String", # The metric type including a DNS name prefix, for example `"compute.googleapis.com/instance/cpu/utilization"`. Metric types should use a natural hierarchical grouping such as the following: compute.googleapis.com/instance/cpu/utilization compute.googleapis.com/instance/disk/read_ops_count compute.googleapis.com/instance/network/received_bytes_count Note that if the metric type changes, the monitoring data will be discontinued, and anything depends on it will break, such as monitoring dashboards, alerting rules and quota limits. Therefore, once a metric has been published, its type should be immutable.
+      "unit": "A String", # The unit in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day **Prefixes (PREFIX)** * `k` kilo (10**3) * `M` mega (10**6) * `G` giga (10**9) * `T` tera (10**12) * `P` peta (10**15) * `E` exa (10**18) * `Z` zetta (10**21) * `Y` yotta (10**24) * `m` milli (10**-3) * `u` micro (10**-6) * `n` nano (10**-9) * `p` pico (10**-12) * `f` femto (10**-15) * `a` atto (10**-18) * `z` zepto (10**-21) * `y` yocto (10**-24) * `Ki` kibi (2**10) * `Mi` mebi (2**20) * `Gi` gibi (2**30) * `Ti` tebi (2**40) **Grammar** The grammar includes the dimensionless unit `1`, such as `1/s`. The grammar also includes these connectors: * `/` division (as an infix operator, e.g. `1/s`). * `.` multiplication (as an infix operator, e.g. `GBy.d`) The grammar for a unit is as follows: Expression = Component { "." Component } { "/" Component } ; Component = [ PREFIX ] UNIT [ Annotation ] | Annotation | "1" ; Annotation = "{" NAME "}" ; Notes: * `Annotation` is just a comment if it follows a `UNIT` and is equivalent to `1` if it is used alone. For examples, `{requests}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing '{' or '}'.
+      "description": "A String", # A detailed description of the metric, which can be used in documentation.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
+  <pre>Deletes a metric descriptor. Only user-created [custom metrics](/monitoring/custom-metrics) can be deleted.
+
+Args:
+  name: string, The metric descriptor on which to execute the request. The format is `"projects/{project_id_or_number}/metricDescriptors/{metric_id}"`. An example of `{metric_id}` is: `"custom.googleapis.com/my_test_metric"`. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets a single metric descriptor. This method does not require a Stackdriver account.
+
+Args:
+  name: string, The metric descriptor on which to execute the request. The format is `"projects/{project_id_or_number}/metricDescriptors/{metric_id}"`. An example value of `{metric_id}` is `"compute.googleapis.com/instance/disk/read_bytes_count"`. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Defines a metric type and its schema.
+      "displayName": "A String", # A concise name for the metric, which can be displayed in user interfaces. Use sentence case without an ending period, for example "Request count".
+      "name": "A String", # Resource name. The format of the name may vary between different implementations. For examples: projects/{project_id}/metricDescriptors/{type=**} metricDescriptors/{type=**}
+      "metricKind": "A String", # Whether the metric records instantaneous values, changes to a value, etc.
+      "valueType": "A String", # Whether the measurement is an integer, a floating-point number, etc.
+      "labels": [ # The set of labels that can be used to describe a specific instance of this metric type. For example, the `compute.googleapis.com/instance/network/received_bytes_count` metric type has a label, `loadbalanced`, that specifies whether the traffic was received through a load balanced IP address.
+        { # A description of a label.
+          "valueType": "A String", # The type of data that can be assigned to the label.
+          "description": "A String", # A human-readable description for the label.
+          "key": "A String", # The label key.
+        },
+      ],
+      "type": "A String", # The metric type including a DNS name prefix, for example `"compute.googleapis.com/instance/cpu/utilization"`. Metric types should use a natural hierarchical grouping such as the following: compute.googleapis.com/instance/cpu/utilization compute.googleapis.com/instance/disk/read_ops_count compute.googleapis.com/instance/network/received_bytes_count Note that if the metric type changes, the monitoring data will be discontinued, and anything depends on it will break, such as monitoring dashboards, alerting rules and quota limits. Therefore, once a metric has been published, its type should be immutable.
+      "unit": "A String", # The unit in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day **Prefixes (PREFIX)** * `k` kilo (10**3) * `M` mega (10**6) * `G` giga (10**9) * `T` tera (10**12) * `P` peta (10**15) * `E` exa (10**18) * `Z` zetta (10**21) * `Y` yotta (10**24) * `m` milli (10**-3) * `u` micro (10**-6) * `n` nano (10**-9) * `p` pico (10**-12) * `f` femto (10**-15) * `a` atto (10**-18) * `z` zepto (10**-21) * `y` yocto (10**-24) * `Ki` kibi (2**10) * `Mi` mebi (2**20) * `Gi` gibi (2**30) * `Ti` tebi (2**40) **Grammar** The grammar includes the dimensionless unit `1`, such as `1/s`. The grammar also includes these connectors: * `/` division (as an infix operator, e.g. `1/s`). * `.` multiplication (as an infix operator, e.g. `GBy.d`) The grammar for a unit is as follows: Expression = Component { "." Component } { "/" Component } ; Component = [ PREFIX ] UNIT [ Annotation ] | Annotation | "1" ; Annotation = "{" NAME "}" ; Notes: * `Annotation` is just a comment if it follows a `UNIT` and is equivalent to `1` if it is used alone. For examples, `{requests}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing '{' or '}'.
+      "description": "A String", # A detailed description of the metric, which can be used in documentation.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists metric descriptors that match a filter. This method does not require a Stackdriver account.
+
+Args:
+  name: string, The project on which to execute the request. The format is `"projects/{project_id_or_number}"`. (required)
+  pageSize: integer, A positive number that is the maximum number of results to return.
+  filter: string, If this field is empty, all custom and system-defined metric descriptors are returned. Otherwise, the [filter](/monitoring/api/v3/filters) specifies which metric descriptors are to be returned. For example, the following filter matches all [custom metrics](/monitoring/custom-metrics): metric.type = starts_with("custom.googleapis.com/")
+  pageToken: string, If this field is not empty then it must contain the `nextPageToken` value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # The `ListMetricDescriptors` response.
+    "nextPageToken": "A String", # If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as `pageToken` in the next call to this method.
+    "metricDescriptors": [ # The metric descriptors that are available to the project and that match the value of `filter`, if present.
+      { # Defines a metric type and its schema.
+          "displayName": "A String", # A concise name for the metric, which can be displayed in user interfaces. Use sentence case without an ending period, for example "Request count".
+          "name": "A String", # Resource name. The format of the name may vary between different implementations. For examples: projects/{project_id}/metricDescriptors/{type=**} metricDescriptors/{type=**}
+          "metricKind": "A String", # Whether the metric records instantaneous values, changes to a value, etc.
+          "valueType": "A String", # Whether the measurement is an integer, a floating-point number, etc.
+          "labels": [ # The set of labels that can be used to describe a specific instance of this metric type. For example, the `compute.googleapis.com/instance/network/received_bytes_count` metric type has a label, `loadbalanced`, that specifies whether the traffic was received through a load balanced IP address.
+            { # A description of a label.
+              "valueType": "A String", # The type of data that can be assigned to the label.
+              "description": "A String", # A human-readable description for the label.
+              "key": "A String", # The label key.
+            },
+          ],
+          "type": "A String", # The metric type including a DNS name prefix, for example `"compute.googleapis.com/instance/cpu/utilization"`. Metric types should use a natural hierarchical grouping such as the following: compute.googleapis.com/instance/cpu/utilization compute.googleapis.com/instance/disk/read_ops_count compute.googleapis.com/instance/network/received_bytes_count Note that if the metric type changes, the monitoring data will be discontinued, and anything depends on it will break, such as monitoring dashboards, alerting rules and quota limits. Therefore, once a metric has been published, its type should be immutable.
+          "unit": "A String", # The unit in which the metric value is reported. It is only applicable if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The supported units are a subset of [The Unified Code for Units of Measure](http://unitsofmeasure.org/ucum.html) standard: **Basic units (UNIT)** * `bit` bit * `By` byte * `s` second * `min` minute * `h` hour * `d` day **Prefixes (PREFIX)** * `k` kilo (10**3) * `M` mega (10**6) * `G` giga (10**9) * `T` tera (10**12) * `P` peta (10**15) * `E` exa (10**18) * `Z` zetta (10**21) * `Y` yotta (10**24) * `m` milli (10**-3) * `u` micro (10**-6) * `n` nano (10**-9) * `p` pico (10**-12) * `f` femto (10**-15) * `a` atto (10**-18) * `z` zepto (10**-21) * `y` yocto (10**-24) * `Ki` kibi (2**10) * `Mi` mebi (2**20) * `Gi` gibi (2**30) * `Ti` tebi (2**40) **Grammar** The grammar includes the dimensionless unit `1`, such as `1/s`. The grammar also includes these connectors: * `/` division (as an infix operator, e.g. `1/s`). * `.` multiplication (as an infix operator, e.g. `GBy.d`) The grammar for a unit is as follows: Expression = Component { "." Component } { "/" Component } ; Component = [ PREFIX ] UNIT [ Annotation ] | Annotation | "1" ; Annotation = "{" NAME "}" ; Notes: * `Annotation` is just a comment if it follows a `UNIT` and is equivalent to `1` if it is used alone. For examples, `{requests}/s == 1/s`, `By{transmitted}/s == By/s`. * `NAME` is a sequence of non-blank printable ASCII characters not containing '{' or '}'.
+          "description": "A String", # A detailed description of the metric, which can be used in documentation.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/monitoring_v3.projects.monitoredResourceDescriptors.html b/docs/dyn/monitoring_v3.projects.monitoredResourceDescriptors.html
new file mode 100644
index 0000000..3738462
--- /dev/null
+++ b/docs/dyn/monitoring_v3.projects.monitoredResourceDescriptors.html
@@ -0,0 +1,161 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="monitoring_v3.html">Google Monitoring API</a> . <a href="monitoring_v3.projects.html">projects</a> . <a href="monitoring_v3.projects.monitoredResourceDescriptors.html">monitoredResourceDescriptors</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets a single monitored resource descriptor. This method does not require a Stackdriver account.</p>
+<p class="toc_element">
+  <code><a href="#list">list(name, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists monitored resource descriptors that match a filter. This method does not require a Stackdriver account.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets a single monitored resource descriptor. This method does not require a Stackdriver account.
+
+Args:
+  name: string, The monitored resource descriptor to get. The format is `"projects/{project_id_or_number}/monitoredResourceDescriptors/{resource_type}"`. The `{resource_type}` is a predefined type, such as `cloudsql_database`. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # An object that describes the schema of a MonitoredResource object using a type name and a set of labels. For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of `"gce_instance"` and specifies the use of the labels `"instance_id"` and `"zone"` to identify particular VM instances. Different APIs can support different monitored resource types. APIs generally provide a `list` method that returns the monitored resource descriptors used by the API.
+    "displayName": "A String", # Optional. A concise name for the monitored resource type that might be displayed in user interfaces. For example, `"Google Cloud SQL Database"`.
+    "labels": [ # Required. A set of labels used to describe instances of this monitored resource type. For example, an individual Google Cloud SQL database is identified by values for the labels `"database_id"` and `"zone"`.
+      { # A description of a label.
+        "valueType": "A String", # The type of data that can be assigned to the label.
+        "description": "A String", # A human-readable description for the label.
+        "key": "A String", # The label key.
+      },
+    ],
+    "type": "A String", # Required. The monitored resource type. For example, the type `"cloudsql_database"` represents databases in Google Cloud SQL.
+    "name": "A String", # Optional. The resource name of the monitored resource descriptor: `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where {type} is the value of the `type` field in this object and {project_id} is a project ID that provides API-specific context for accessing the type. APIs that do not use project information can use the resource name format `"monitoredResourceDescriptors/{type}"`.
+    "description": "A String", # Optional. A detailed description of the monitored resource type that might be used in documentation.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists monitored resource descriptors that match a filter. This method does not require a Stackdriver account.
+
+Args:
+  name: string, The project on which to execute the request. The format is `"projects/{project_id_or_number}"`. (required)
+  pageSize: integer, A positive number that is the maximum number of results to return.
+  filter: string, An optional [filter](/monitoring/api/v3/filters) describing the descriptors to be returned. The filter can reference the descriptor's type and labels. For example, the following filter returns only Google Compute Engine descriptors that have an `id` label: resource.type = starts_with("gce_") AND resource.label:id
+  pageToken: string, If this field is not empty then it must contain the `nextPageToken` value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # The `ListMonitoredResourcDescriptors` response.
+    "nextPageToken": "A String", # If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as `pageToken` in the next call to this method.
+    "resourceDescriptors": [ # The monitored resource descriptors that are available to this project and that match `filter`, if present.
+      { # An object that describes the schema of a MonitoredResource object using a type name and a set of labels. For example, the monitored resource descriptor for Google Compute Engine VM instances has a type of `"gce_instance"` and specifies the use of the labels `"instance_id"` and `"zone"` to identify particular VM instances. Different APIs can support different monitored resource types. APIs generally provide a `list` method that returns the monitored resource descriptors used by the API.
+        "displayName": "A String", # Optional. A concise name for the monitored resource type that might be displayed in user interfaces. For example, `"Google Cloud SQL Database"`.
+        "labels": [ # Required. A set of labels used to describe instances of this monitored resource type. For example, an individual Google Cloud SQL database is identified by values for the labels `"database_id"` and `"zone"`.
+          { # A description of a label.
+            "valueType": "A String", # The type of data that can be assigned to the label.
+            "description": "A String", # A human-readable description for the label.
+            "key": "A String", # The label key.
+          },
+        ],
+        "type": "A String", # Required. The monitored resource type. For example, the type `"cloudsql_database"` represents databases in Google Cloud SQL.
+        "name": "A String", # Optional. The resource name of the monitored resource descriptor: `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where {type} is the value of the `type` field in this object and {project_id} is a project ID that provides API-specific context for accessing the type. APIs that do not use project information can use the resource name format `"monitoredResourceDescriptors/{type}"`.
+        "description": "A String", # Optional. A detailed description of the monitored resource type that might be used in documentation.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/monitoring_v3.projects.timeSeries.html b/docs/dyn/monitoring_v3.projects.timeSeries.html
new file mode 100644
index 0000000..8c5a729
--- /dev/null
+++ b/docs/dyn/monitoring_v3.projects.timeSeries.html
@@ -0,0 +1,271 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="monitoring_v3.html">Google Monitoring API</a> . <a href="monitoring_v3.projects.html">projects</a> . <a href="monitoring_v3.projects.timeSeries.html">timeSeries</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(name, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates or adds data to one or more time series. The response is empty if all time series in the request were written. If any time series could not be written, a corresponding failure message is included in the error response.</p>
+<p class="toc_element">
+  <code><a href="#list">list(name, orderBy=None, pageSize=None, x__xgafv=None, aggregation_alignmentPeriod=None, pageToken=None, aggregation_groupByFields=None, aggregation_perSeriesAligner=None, interval_endTime=None, aggregation_crossSeriesReducer=None, filter=None, interval_startTime=None, view=None)</a></code></p>
+<p class="firstline">Lists time series that match a filter. This method does not require a Stackdriver account.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(name, body, x__xgafv=None)</code>
+  <pre>Creates or adds data to one or more time series. The response is empty if all time series in the request were written. If any time series could not be written, a corresponding failure message is included in the error response.
+
+Args:
+  name: string, The project on which to execute the request. The format is `"projects/{project_id_or_number}"`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The `CreateTimeSeries` request.
+    "timeSeries": [ # The new data to be added to a list of time series. Adds at most one data point to each of several time series. The new data point must be more recent than any other point in its time series. Each `TimeSeries` value must fully specify a unique time series by supplying all label values for the metric and the monitored resource.
+      { # A collection of data points that describes the time-varying nature of a metric. A time series is identified by a combination of a fully-specified monitored resource and a fully-specified metric.
+        "metricKind": "A String", # The metric kind of the time series. This can be different than the metric kind specified in [google.api.MetricDescriptor] because of alignment and reduction operations on the data. This field is ignored when writing data; the value specified in the descriptor is used instead. @OutputOnly
+        "metric": { # A specific metric identified by specifying values for all of the labels of a `MetricDescriptor`. # The fully-specified metric used to identify the time series.
+          "labels": { # The set of labels that uniquely identify a metric. To specify a metric, all labels enumerated in the `MetricDescriptor` must be assigned values.
+            "a_key": "A String",
+          },
+          "type": "A String", # An existing metric type, see google.api.MetricDescriptor. For example, `compute.googleapis.com/instance/cpu/usage_time`.
+        },
+        "points": [ # The data points of this time series. When used as output, points will be sorted by decreasing time order. When used as input, points could be written in any orders.
+          { # A single data point in a time series.
+            "interval": { # A time interval extending from after `startTime` through `endTime`. If `startTime` is omitted, the interval is the single point in time, `endTime`. # The time interval to which the value applies.
+              "endTime": "A String", # Required. The end of the interval. The interval includes this time.
+              "startTime": "A String", # If this value is omitted, the interval is a point in time, `endTime`. If `startTime` is present, it must be earlier than (less than) `endTime`. The interval begins after `startTime`—it does not include `startTime`.
+            },
+            "value": { # A single strongly-typed value. # The value of the data point.
+              "distributionValue": { # Distribution contains summary statistics for a population of values and, optionally, a histogram representing the distribution of those values across a specified set of histogram buckets. The summary statistics are the count, mean, sum of the squared deviation from the mean, the minimum, and the maximum of the set of population of values. The histogram is based on a sequence of buckets and gives a count of values that fall into each bucket. The boundaries of the buckets are given either explicitly or by specifying parameters for a method of computing them (buckets of fixed width or buckets of exponentially increasing width). Although it is not forbidden, it is generally a bad idea to include non-finite values (infinities or NaNs) in the population of values, as this will render the `mean` and `sum_of_squared_deviation` fields meaningless. # A distribution value.
+                "count": "A String", # The number of values in the population. Must be non-negative.
+                "bucketCounts": [ # If `bucket_options` is given, then the sum of the values in `bucket_counts` must equal the value in `count`. If `bucket_options` is not given, no `bucket_counts` fields may be given. Bucket counts are given in order under the numbering scheme described above (the underflow bucket has number 0; the finite buckets, if any, have numbers 1 through N-2; the overflow bucket has number N-1). The size of `bucket_counts` must be no greater than N as defined in `bucket_options`. Any suffix of trailing zero bucket_count fields may be omitted.
+                  "A String",
+                ],
+                "bucketOptions": { # A Distribution may optionally contain a histogram of the values in the population. The histogram is given in `bucket_counts` as counts of values that fall into one of a sequence of non-overlapping buckets. The sequence of buckets is described by `bucket_options`. A bucket specifies an inclusive lower bound and exclusive upper bound for the values that are counted for that bucket. The upper bound of a bucket is strictly greater than the lower bound. The sequence of N buckets for a Distribution consists of an underflow bucket (number 0), zero or more finite buckets (number 1 through N - 2) and an overflow bucket (number N - 1). The buckets are contiguous: the lower bound of bucket i (i > 0) is the same as the upper bound of bucket i - 1. The buckets span the whole range of finite values: lower bound of the underflow bucket is -infinity and the upper bound of the overflow bucket is +infinity. The finite buckets are so-called because both bounds are finite. `BucketOptions` describes bucket boundaries in one of three ways. Two describe the boundaries by giving parameters for a formula to generate boundaries and one gives the bucket boundaries explicitly. If `bucket_boundaries` is not given, then no `bucket_counts` may be given. # Defines the histogram bucket boundaries.
+                  "exponentialBuckets": { # Specify a sequence of buckets that have a width that is proportional to the value of the lower bound. Each bucket represents a constant relative uncertainty on a specific value in the bucket. Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for bucket i: Upper bound (0 <= i < N-1): scale * (growth_factor ^ i). Lower bound (1 <= i < N): scale * (growth_factor ^ (i - 1)). # The exponential buckets.
+                    "scale": 3.14, # Must be greater than 0
+                    "growthFactor": 3.14, # Must be greater than 1
+                    "numFiniteBuckets": 42, # must be greater than 0
+                  },
+                  "linearBuckets": { # Specify a sequence of buckets that all have the same width (except overflow and underflow). Each bucket represents a constant absolute uncertainty on the specific value in the bucket. Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for bucket `i`: Upper bound (0 <= i < N-1): offset + (width * i). Lower bound (1 <= i < N): offset + (width * (i - 1)). # The linear bucket.
+                    "width": 3.14, # Must be greater than 0.
+                    "numFiniteBuckets": 42, # Must be greater than 0.
+                    "offset": 3.14, # Lower bound of the first bucket.
+                  },
+                  "explicitBuckets": { # A set of buckets with arbitrary widths. Defines `size(bounds) + 1` (= N) buckets with these boundaries for bucket i: Upper bound (0 <= i < N-1): bounds[i] Lower bound (1 <= i < N); bounds[i - 1] There must be at least one element in `bounds`. If `bounds` has only one element, there are no finite buckets, and that single element is the common boundary of the overflow and underflow buckets. # The explicit buckets.
+                    "bounds": [ # The values must be monotonically increasing.
+                      3.14,
+                    ],
+                  },
+                },
+                "range": { # The range of the population values. # If specified, contains the range of the population values. The field must not be present if the `count` is zero.
+                  "max": 3.14, # The maximum of the population values.
+                  "min": 3.14, # The minimum of the population values.
+                },
+                "sumOfSquaredDeviation": 3.14, # The sum of squared deviations from the mean of the values in the population. For values x_i this is: Sum[i=1..n]((x_i - mean)^2) Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition describes Welford's method for accumulating this sum in one pass. If `count` is zero then this field must be zero.
+                "mean": 3.14, # The arithmetic mean of the values in the population. If `count` is zero then this field must be zero.
+              },
+              "stringValue": "A String", # A variable-length string value.
+              "boolValue": True or False, # A Boolean value: `true` or `false`.
+              "int64Value": "A String", # A 64-bit integer. Its range is approximately ±9.2x1018.
+              "doubleValue": 3.14, # A 64-bit double-precision floating-point number. Its magnitude is approximately ±10±300 and it has 16 significant digits of precision.
+            },
+          },
+        ],
+        "resource": { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The `type` field identifies a MonitoredResourceDescriptor object that describes the resource's schema. Information in the `labels` field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for `"gce_instance"` has labels `"instance_id"` and `"zone"`: { "type": "gce_instance", "labels": { "instance_id": "my-instance", "zone": "us-central1-a" }} # The fully-specified monitored resource used to identify the time series.
+          "labels": { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels `"database_id"` and `"zone"`.
+            "a_key": "A String",
+          },
+          "type": "A String", # Required. The monitored resource type. This field must match the `type` field of a MonitoredResourceDescriptor object. For example, the type of a Cloud SQL database is `"cloudsql_database"`.
+        },
+        "valueType": "A String", # The value type of the time series. This can be different than the value type specified in [google.api.MetricDescriptor] because of alignment and reduction operations on the data. This field is ignored when writing data; the value specified in the descriptor is used instead. @OutputOnly
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(name, orderBy=None, pageSize=None, x__xgafv=None, aggregation_alignmentPeriod=None, pageToken=None, aggregation_groupByFields=None, aggregation_perSeriesAligner=None, interval_endTime=None, aggregation_crossSeriesReducer=None, filter=None, interval_startTime=None, view=None)</code>
+  <pre>Lists time series that match a filter. This method does not require a Stackdriver account.
+
+Args:
+  name: string, The project on which to execute the request. The format is "projects/{project_id_or_number}". (required)
+  orderBy: string, Specifies the order in which the points of the time series should be returned. By default, results are not ordered. Currently, this field must be left blank.
+  pageSize: integer, A positive number that is the maximum number of results to return. When `view` field sets to `FULL`, it limits the number of `Points` server will return; if `view` field is `HEADERS`, it limits the number of `TimeSeries` server will return.
+  x__xgafv: string, V1 error format.
+  aggregation_alignmentPeriod: string, The alignment period for per-[time series](TimeSeries) alignment. If present, `alignmentPeriod` must be at least 60 seconds. After per-time series alignment, each time series will contain data points only on the period boundaries. If `perSeriesAligner` is not specified or equals `ALIGN_NONE`, then this field is ignored. If `perSeriesAligner` is specified and does not equal `ALIGN_NONE`, then this field must be defined; otherwise an error is returned.
+  pageToken: string, If this field is not empty then it must contain the `nextPageToken` value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.
+  aggregation_groupByFields: string, The set of fields to preserve when `crossSeriesReducer` is specified. The `groupByFields` determine how the time series are partitioned into subsets prior to applying the aggregation function. Each subset contains time series that have the same value for each of the grouping fields. Each individual time series is a member of exactly one subset. The `crossSeriesReducer` is applied to each subset of time series. Fields not specified in `groupByFields` are aggregated away. If `groupByFields` is not specified, the time series are aggregated into a single output time series. If `crossSeriesReducer` is not defined, this field is ignored. (repeated)
+  aggregation_perSeriesAligner: string, The approach to be used to align individual time series. Not all alignment functions may be applied to all time series, depending on the metric type and value type of the original time series. Alignment may change the metric type or the value type of the time series. Time series data must be aligned in order to perform cross-time series reduction. If `crossSeriesReducer` is specified, then `perSeriesAligner` must be specified and not equal `ALIGN_NONE` and `alignmentPeriod` must be specified; otherwise, an error is returned.
+  interval_endTime: string, Required. The end of the interval. The interval includes this time.
+  aggregation_crossSeriesReducer: string, The approach to be used to combine time series. Not all reducer functions may be applied to all time series, depending on the metric type and the value type of the original time series. Reduction may change the metric type of value type of the time series. Time series data must be aligned in order to perform cross-time series reduction. If `crossSeriesReducer` is specified, then `perSeriesAligner` must be specified and not equal `ALIGN_NONE` and `alignmentPeriod` must be specified; otherwise, an error is returned.
+  filter: string, A [monitoring filter](/monitoring/api/v3/filters) that specifies which time series should be returned. The filter must specify a single metric type, and can additionally specify metric labels and other information. For example: metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND metric.label.instance_name = "my-instance-name"
+  interval_startTime: string, If this value is omitted, the interval is a point in time, `endTime`. If `startTime` is present, it must be earlier than (less than) `endTime`. The interval begins after `startTime`—it does not include `startTime`.
+  view: string, Specifies which information is returned about the time series.
+
+Returns:
+  An object of the form:
+
+    { # The `ListTimeSeries` response.
+    "nextPageToken": "A String", # If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as `pageToken` in the next call to this method.
+    "timeSeries": [ # One or more time series that match the filter included in the request.
+      { # A collection of data points that describes the time-varying nature of a metric. A time series is identified by a combination of a fully-specified monitored resource and a fully-specified metric.
+        "metricKind": "A String", # The metric kind of the time series. This can be different than the metric kind specified in [google.api.MetricDescriptor] because of alignment and reduction operations on the data. This field is ignored when writing data; the value specified in the descriptor is used instead. @OutputOnly
+        "metric": { # A specific metric identified by specifying values for all of the labels of a `MetricDescriptor`. # The fully-specified metric used to identify the time series.
+          "labels": { # The set of labels that uniquely identify a metric. To specify a metric, all labels enumerated in the `MetricDescriptor` must be assigned values.
+            "a_key": "A String",
+          },
+          "type": "A String", # An existing metric type, see google.api.MetricDescriptor. For example, `compute.googleapis.com/instance/cpu/usage_time`.
+        },
+        "points": [ # The data points of this time series. When used as output, points will be sorted by decreasing time order. When used as input, points could be written in any orders.
+          { # A single data point in a time series.
+            "interval": { # A time interval extending from after `startTime` through `endTime`. If `startTime` is omitted, the interval is the single point in time, `endTime`. # The time interval to which the value applies.
+              "endTime": "A String", # Required. The end of the interval. The interval includes this time.
+              "startTime": "A String", # If this value is omitted, the interval is a point in time, `endTime`. If `startTime` is present, it must be earlier than (less than) `endTime`. The interval begins after `startTime`—it does not include `startTime`.
+            },
+            "value": { # A single strongly-typed value. # The value of the data point.
+              "distributionValue": { # Distribution contains summary statistics for a population of values and, optionally, a histogram representing the distribution of those values across a specified set of histogram buckets. The summary statistics are the count, mean, sum of the squared deviation from the mean, the minimum, and the maximum of the set of population of values. The histogram is based on a sequence of buckets and gives a count of values that fall into each bucket. The boundaries of the buckets are given either explicitly or by specifying parameters for a method of computing them (buckets of fixed width or buckets of exponentially increasing width). Although it is not forbidden, it is generally a bad idea to include non-finite values (infinities or NaNs) in the population of values, as this will render the `mean` and `sum_of_squared_deviation` fields meaningless. # A distribution value.
+                "count": "A String", # The number of values in the population. Must be non-negative.
+                "bucketCounts": [ # If `bucket_options` is given, then the sum of the values in `bucket_counts` must equal the value in `count`. If `bucket_options` is not given, no `bucket_counts` fields may be given. Bucket counts are given in order under the numbering scheme described above (the underflow bucket has number 0; the finite buckets, if any, have numbers 1 through N-2; the overflow bucket has number N-1). The size of `bucket_counts` must be no greater than N as defined in `bucket_options`. Any suffix of trailing zero bucket_count fields may be omitted.
+                  "A String",
+                ],
+                "bucketOptions": { # A Distribution may optionally contain a histogram of the values in the population. The histogram is given in `bucket_counts` as counts of values that fall into one of a sequence of non-overlapping buckets. The sequence of buckets is described by `bucket_options`. A bucket specifies an inclusive lower bound and exclusive upper bound for the values that are counted for that bucket. The upper bound of a bucket is strictly greater than the lower bound. The sequence of N buckets for a Distribution consists of an underflow bucket (number 0), zero or more finite buckets (number 1 through N - 2) and an overflow bucket (number N - 1). The buckets are contiguous: the lower bound of bucket i (i > 0) is the same as the upper bound of bucket i - 1. The buckets span the whole range of finite values: lower bound of the underflow bucket is -infinity and the upper bound of the overflow bucket is +infinity. The finite buckets are so-called because both bounds are finite. `BucketOptions` describes bucket boundaries in one of three ways. Two describe the boundaries by giving parameters for a formula to generate boundaries and one gives the bucket boundaries explicitly. If `bucket_boundaries` is not given, then no `bucket_counts` may be given. # Defines the histogram bucket boundaries.
+                  "exponentialBuckets": { # Specify a sequence of buckets that have a width that is proportional to the value of the lower bound. Each bucket represents a constant relative uncertainty on a specific value in the bucket. Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for bucket i: Upper bound (0 <= i < N-1): scale * (growth_factor ^ i). Lower bound (1 <= i < N): scale * (growth_factor ^ (i - 1)). # The exponential buckets.
+                    "scale": 3.14, # Must be greater than 0
+                    "growthFactor": 3.14, # Must be greater than 1
+                    "numFiniteBuckets": 42, # must be greater than 0
+                  },
+                  "linearBuckets": { # Specify a sequence of buckets that all have the same width (except overflow and underflow). Each bucket represents a constant absolute uncertainty on the specific value in the bucket. Defines `num_finite_buckets + 2` (= N) buckets with these boundaries for bucket `i`: Upper bound (0 <= i < N-1): offset + (width * i). Lower bound (1 <= i < N): offset + (width * (i - 1)). # The linear bucket.
+                    "width": 3.14, # Must be greater than 0.
+                    "numFiniteBuckets": 42, # Must be greater than 0.
+                    "offset": 3.14, # Lower bound of the first bucket.
+                  },
+                  "explicitBuckets": { # A set of buckets with arbitrary widths. Defines `size(bounds) + 1` (= N) buckets with these boundaries for bucket i: Upper bound (0 <= i < N-1): bounds[i] Lower bound (1 <= i < N); bounds[i - 1] There must be at least one element in `bounds`. If `bounds` has only one element, there are no finite buckets, and that single element is the common boundary of the overflow and underflow buckets. # The explicit buckets.
+                    "bounds": [ # The values must be monotonically increasing.
+                      3.14,
+                    ],
+                  },
+                },
+                "range": { # The range of the population values. # If specified, contains the range of the population values. The field must not be present if the `count` is zero.
+                  "max": 3.14, # The maximum of the population values.
+                  "min": 3.14, # The minimum of the population values.
+                },
+                "sumOfSquaredDeviation": 3.14, # The sum of squared deviations from the mean of the values in the population. For values x_i this is: Sum[i=1..n]((x_i - mean)^2) Knuth, "The Art of Computer Programming", Vol. 2, page 323, 3rd edition describes Welford's method for accumulating this sum in one pass. If `count` is zero then this field must be zero.
+                "mean": 3.14, # The arithmetic mean of the values in the population. If `count` is zero then this field must be zero.
+              },
+              "stringValue": "A String", # A variable-length string value.
+              "boolValue": True or False, # A Boolean value: `true` or `false`.
+              "int64Value": "A String", # A 64-bit integer. Its range is approximately ±9.2x1018.
+              "doubleValue": 3.14, # A 64-bit double-precision floating-point number. Its magnitude is approximately ±10±300 and it has 16 significant digits of precision.
+            },
+          },
+        ],
+        "resource": { # An object representing a resource that can be used for monitoring, logging, billing, or other purposes. Examples include virtual machine instances, databases, and storage devices such as disks. The `type` field identifies a MonitoredResourceDescriptor object that describes the resource's schema. Information in the `labels` field identifies the actual resource and its attributes according to the schema. For example, a particular Compute Engine VM instance could be represented by the following object, because the MonitoredResourceDescriptor for `"gce_instance"` has labels `"instance_id"` and `"zone"`: { "type": "gce_instance", "labels": { "instance_id": "my-instance", "zone": "us-central1-a" }} # The fully-specified monitored resource used to identify the time series.
+          "labels": { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels `"database_id"` and `"zone"`.
+            "a_key": "A String",
+          },
+          "type": "A String", # Required. The monitored resource type. This field must match the `type` field of a MonitoredResourceDescriptor object. For example, the type of a Cloud SQL database is `"cloudsql_database"`.
+        },
+        "valueType": "A String", # The value type of the time series. This can be different than the value type specified in [google.api.MetricDescriptor] because of alignment and reduction operations on the data. This field is ignored when writing data; the value specified in the descriptor is used instead. @OutputOnly
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/playmoviespartner_v1.accounts.avails.html b/docs/dyn/playmoviespartner_v1.accounts.avails.html
index 678ba19..92a8f8c 100644
--- a/docs/dyn/playmoviespartner_v1.accounts.avails.html
+++ b/docs/dyn/playmoviespartner_v1.accounts.avails.html
@@ -75,14 +75,68 @@
 <h1><a href="playmoviespartner_v1.html">Google Play Movies Partner API</a> . <a href="playmoviespartner_v1.accounts.html">accounts</a> . <a href="playmoviespartner_v1.accounts.avails.html">avails</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#list">list(accountId, pphNames=None, pageSize=None, territories=None, x__xgafv=None, title=None, studioNames=None, pageToken=None, videoIds=None, altId=None)</a></code></p>
+  <code><a href="#get">get(accountId, availId, x__xgafv=None)</a></code></p>
+<p class="firstline">Get an Avail given its avail group id and avail id.</p>
+<p class="toc_element">
+  <code><a href="#list">list(accountId, pphNames=None, pageSize=None, territories=None, altIds=None, x__xgafv=None, title=None, studioNames=None, pageToken=None, videoIds=None, altId=None)</a></code></p>
 <p class="firstline">List Avails owned or managed by the partner. See _Authentication and Authorization rules_ and _List methods rules_ for more information about this method.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(accountId, pphNames=None, pageSize=None, territories=None, x__xgafv=None, title=None, studioNames=None, pageToken=None, videoIds=None, altId=None)</code>
+    <code class="details" id="get">get(accountId, availId, x__xgafv=None)</code>
+  <pre>Get an Avail given its avail group id and avail id.
+
+Args:
+  accountId: string, REQUIRED. See _General rules_ for more information about this field. (required)
+  availId: string, REQUIRED. Avail ID. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # An Avail describes the Availability Window of a specific Edit in a given country, which means the period Google is allowed to sell or rent the Edit. Avails are exposed in EMA format Version 1.6b (available at http://www.movielabs.com/md/avails/) Studios can see the Avails for the Titles they own. Post-production houses cannot see any Avails.
+    "pphNames": [ # Name of the post-production houses that manage the Avail. Not part of EMA Specs.
+      "A String",
+    ],
+    "licenseType": "A String", # Type of transaction.
+    "captionIncluded": True or False, # Communicating if caption file will be delivered.
+    "releaseDate": "A String", # Release date of the Title in earliest released territory. Typically it is just the year, but it is free-form as per EMA spec. Examples: "1979", "Oct 2014"
+    "episodeAltId": "A String", # Other identifier referring to the episode, as defined by partner. Only available on TV avails. Example: "rs_googlers_s1_3".
+    "episodeTitleInternalAlias": "A String", # OPTIONAL.TV Only. Title used by involved parties to refer to this episode. Only available on TV Avails. Example: "Coding at Google".
+    "availId": "A String", # ID internally generated by Google to uniquely identify an Avail. Not part of EMA Specs.
+    "end": "A String", # End of term in YYYY-MM-DD format in the timezone of the country of the Avail. "Open" if no end date is available. Example: "2019-02-17"
+    "altId": "A String", # Other identifier referring to the Edit, as defined by partner. Example: "GOOGLER_2006"
+    "seriesAltId": "A String", # Other identifier referring to the series, as defined by partner. Only available on TV avails. Example: "rs_googlers".
+    "start": "A String", # Start of term in YYYY-MM-DD format in the timezone of the country of the Avail. Example: "2013-05-14".
+    "titleInternalAlias": "A String", # Title used by involved parties to refer to this content. Example: "Googlers, The". Only available on Movie Avails.
+    "seasonTitleInternalAlias": "A String", # Title used by involved parties to refer to this season. Only available on TV Avails. Example: "Googlers, The".
+    "territory": "A String", # ISO 3166-1 alpha-2 country code for the country or territory of this Avail. For Avails, we use Territory in lieu of Country to comply with EMA specifications. But please note that Territory and Country identify the same thing. Example: "US".
+    "productId": "A String", # Edit Identifier. This should be the Edit Level EIDR. Example: "10.2340/1489-49A2-3956-4B2D-FE16-6"
+    "storeLanguage": "A String", # Spoken language of the intended audience. Language shall be encoded in accordance with RFC 5646. Example: "fr".
+    "seasonNumber": "A String", # The number assigned to the season within a series. Only available on TV Avails. Example: "1".
+    "episodeNumber": "A String", # The number assigned to the episode within a season. Only available on TV Avails. Example: "3".
+    "formatProfile": "A String", # Indicates the format profile covered by the transaction.
+    "priceValue": "A String", # Value to be applied to the pricing type. Example: "4" or "2.99"
+    "videoId": "A String", # Google-generated ID identifying the video linked to this Avail, once delivered. Not part of EMA Specs. Example: 'gtry456_xc'
+    "ratingReason": "A String", # Value representing the rating reason. Rating reasons should be formatted as per [EMA ratings spec](http://www.movielabs.com/md/ratings/) and comma-separated for inclusion of multiple reasons. Example: "L, S, V"
+    "captionExemption": "A String", # Communicating an exempt category as defined by FCC regulations. It is not required for non-US Avails. Example: "1"
+    "workType": "A String", # Work type as enumerated in EMA.
+    "ratingValue": "A String", # Value representing the rating. Ratings should be formatted as per http://www.movielabs.com/md/ratings/ Example: "PG"
+    "displayName": "A String", # The name of the studio that owns the Edit referred in the Avail. This is the equivalent of `studio_name` in other resources, but it follows the EMA nomenclature. Example: "Google Films".
+    "seasonAltId": "A String", # Other identifier referring to the season, as defined by partner. Only available on TV avails. Example: "rs_googlers_s1".
+    "contentId": "A String", # Title Identifier. This should be the Title Level EIDR. Example: "10.5240/1489-49A2-3956-4B2D-FE16-5".
+    "ratingSystem": "A String", # Rating system applied to the version of title within territory of Avail. Rating systems should be formatted as per [EMA ratings spec](http://www.movielabs.com/md/ratings/) Example: "MPAA"
+    "encodeId": "A String", # Manifestation Identifier. This should be the Manifestation Level EIDR. Example: "10.2340/1489-49A2-3956-4B2D-FE16-7"
+    "seriesTitleInternalAlias": "A String", # Title used by involved parties to refer to this series. Only available on TV Avails. Example: "Googlers, The".
+    "suppressionLiftDate": "A String", # First date an Edit could be publically announced as becoming available at a specific future date in territory of Avail. *Not* the Avail start date or pre-order start date. Format is YYYY-MM-DD. Only available for pre-orders. Example: "2012-12-10"
+    "priceType": "A String", # Type of pricing that should be applied to this Avail based on how the partner classify them. Example: "Tier", "WSP", "SRP", or "Category".
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(accountId, pphNames=None, pageSize=None, territories=None, altIds=None, x__xgafv=None, title=None, studioNames=None, pageToken=None, videoIds=None, altId=None)</code>
   <pre>List Avails owned or managed by the partner. See _Authentication and Authorization rules_ and _List methods rules_ for more information about this method.
 
 Args:
@@ -90,18 +144,20 @@
   pphNames: string, See _List methods rules_ for info about this field. (repeated)
   pageSize: integer, See _List methods rules_ for info about this field.
   territories: string, Filter Avails that match (case-insensitive) any of the given country codes, using the "ISO 3166-1 alpha-2" format (examples: "US", "us", "Us"). (repeated)
+  altIds: string, Filter Avails that match (case-insensitive) any of the given partner-specific custom ids. (repeated)
   x__xgafv: string, V1 error format.
-  title: string, Filter Avails that match a case-insensitive substring of the default Title name.
+  title: string, Filter that matches Avails with a `title_internal_alias`, `series_title_internal_alias`, `season_title_internal_alias`, or `episode_title_internal_alias` that contains the given case-insensitive title.
   studioNames: string, See _List methods rules_ for info about this field. (repeated)
   pageToken: string, See _List methods rules_ for info about this field.
   videoIds: string, Filter Avails that match any of the given `video_id`s. (repeated)
-  altId: string, Filter Avails that match a case-insensitive, partner-specific custom id.
+  altId: string, Filter Avails that match a case-insensitive, partner-specific custom id. NOTE: this field is deprecated and will be removed on V2; `alt_ids` should be used instead.
 
 Returns:
   An object of the form:
 
     { # Response to the 'ListAvails' method.
     "nextPageToken": "A String", # See _List methods rules_ for info about this field.
+    "totalSize": 42, # See _List methods rules_ for more information about this field.
     "avails": [ # List of Avails that match the request criteria.
       { # An Avail describes the Availability Window of a specific Edit in a given country, which means the period Google is allowed to sell or rent the Edit. Avails are exposed in EMA format Version 1.6b (available at http://www.movielabs.com/md/avails/) Studios can see the Avails for the Titles they own. Post-production houses cannot see any Avails.
         "pphNames": [ # Name of the post-production houses that manage the Avail. Not part of EMA Specs.
@@ -112,7 +168,7 @@
         "releaseDate": "A String", # Release date of the Title in earliest released territory. Typically it is just the year, but it is free-form as per EMA spec. Examples: "1979", "Oct 2014"
         "episodeAltId": "A String", # Other identifier referring to the episode, as defined by partner. Only available on TV avails. Example: "rs_googlers_s1_3".
         "episodeTitleInternalAlias": "A String", # OPTIONAL.TV Only. Title used by involved parties to refer to this episode. Only available on TV Avails. Example: "Coding at Google".
-        "episodeNumber": "A String", # The number assigned to the episode within a season. Only available on TV Avails. Example: "3".
+        "availId": "A String", # ID internally generated by Google to uniquely identify an Avail. Not part of EMA Specs.
         "end": "A String", # End of term in YYYY-MM-DD format in the timezone of the country of the Avail. "Open" if no end date is available. Example: "2019-02-17"
         "altId": "A String", # Other identifier referring to the Edit, as defined by partner. Example: "GOOGLER_2006"
         "seriesAltId": "A String", # Other identifier referring to the series, as defined by partner. Only available on TV avails. Example: "rs_googlers".
@@ -123,13 +179,14 @@
         "productId": "A String", # Edit Identifier. This should be the Edit Level EIDR. Example: "10.2340/1489-49A2-3956-4B2D-FE16-6"
         "storeLanguage": "A String", # Spoken language of the intended audience. Language shall be encoded in accordance with RFC 5646. Example: "fr".
         "seasonNumber": "A String", # The number assigned to the season within a series. Only available on TV Avails. Example: "1".
-        "ratingValue": "A String", # Value representing the rating. Ratings should be formatted as per http://www.movielabs.com/md/ratings/ Example: "PG"
+        "episodeNumber": "A String", # The number assigned to the episode within a season. Only available on TV Avails. Example: "3".
         "formatProfile": "A String", # Indicates the format profile covered by the transaction.
         "priceValue": "A String", # Value to be applied to the pricing type. Example: "4" or "2.99"
         "videoId": "A String", # Google-generated ID identifying the video linked to this Avail, once delivered. Not part of EMA Specs. Example: 'gtry456_xc'
         "ratingReason": "A String", # Value representing the rating reason. Rating reasons should be formatted as per [EMA ratings spec](http://www.movielabs.com/md/ratings/) and comma-separated for inclusion of multiple reasons. Example: "L, S, V"
         "captionExemption": "A String", # Communicating an exempt category as defined by FCC regulations. It is not required for non-US Avails. Example: "1"
         "workType": "A String", # Work type as enumerated in EMA.
+        "ratingValue": "A String", # Value representing the rating. Ratings should be formatted as per http://www.movielabs.com/md/ratings/ Example: "PG"
         "displayName": "A String", # The name of the studio that owns the Edit referred in the Avail. This is the equivalent of `studio_name` in other resources, but it follows the EMA nomenclature. Example: "Google Films".
         "seasonAltId": "A String", # Other identifier referring to the season, as defined by partner. Only available on TV avails. Example: "rs_googlers_s1".
         "contentId": "A String", # Title Identifier. This should be the Title Level EIDR. Example: "10.5240/1489-49A2-3956-4B2D-FE16-5".
diff --git a/docs/dyn/playmoviespartner_v1.accounts.components.html b/docs/dyn/playmoviespartner_v1.accounts.components.html
new file mode 100644
index 0000000..05ac459
--- /dev/null
+++ b/docs/dyn/playmoviespartner_v1.accounts.components.html
@@ -0,0 +1,172 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="playmoviespartner_v1.html">Google Play Movies Partner API</a> . <a href="playmoviespartner_v1.accounts.html">accounts</a> . <a href="playmoviespartner_v1.accounts.components.html">components</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="playmoviespartner_v1.accounts.components.type.html">type()</a></code>
+</p>
+<p class="firstline">Returns the type Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#list">list(accountId, pphNames=None, pageSize=None, editLevelEidr=None, x__xgafv=None, playableSequenceId=None, studioNames=None, filename=None, pageToken=None, customId=None, status=None, titleLevelEidr=None, presentationId=None, inventoryId=None, altCutId=None, elId=None)</a></code></p>
+<p class="firstline">List Components owned or managed by the partner. See _Authentication and Authorization rules_ and _List methods rules_ for more information about this method.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(accountId, pphNames=None, pageSize=None, editLevelEidr=None, x__xgafv=None, playableSequenceId=None, studioNames=None, filename=None, pageToken=None, customId=None, status=None, titleLevelEidr=None, presentationId=None, inventoryId=None, altCutId=None, elId=None)</code>
+  <pre>List Components owned or managed by the partner. See _Authentication and Authorization rules_ and _List methods rules_ for more information about this method.
+
+Args:
+  accountId: string, REQUIRED. See _General rules_ for more information about this field. (required)
+  pphNames: string, See _List methods rules_ for info about this field. (repeated)
+  pageSize: integer, See _List methods rules_ for info about this field.
+  editLevelEidr: string, Filter Components that match a given edit-level EIDR.
+  x__xgafv: string, V1 error format.
+  playableSequenceId: string, PlayableSequenceID available in Common Manifest.
+  studioNames: string, See _List methods rules_ for info about this field. (repeated)
+  filename: string, Filter Components that match a case-insensitive substring of the physical name of the delivered file.
+  pageToken: string, See _List methods rules_ for info about this field.
+  customId: string, Filter Components that match a case-insensitive partner-specific custom id.
+  status: string, Filter Components that match one of the given status. (repeated)
+  titleLevelEidr: string, Filter Components that match a given title-level EIDR.
+  presentationId: string, PresentationID available in Common Manifest.
+  inventoryId: string, InventoryID available in Common Manifest.
+  altCutId: string, Filter Components that match a case-insensitive, partner-specific Alternative Cut ID.
+  elId: string, Experience ID, as defined by Google.
+
+Returns:
+  An object of the form:
+
+    { # Response to the 'ListComponents' method.
+    "nextPageToken": "A String", # See _List methods rules_ for info about this field.
+    "totalSize": 42, # See _List methods rules_ for more information about this field.
+    "components": [ # List of Components that match the request criteria.
+      { # A Component is an element (audio, video, subtitle, artwork, trailer, etc...) that is used in a set of ExperienceLocales. A Component is owned by a Studio and managed either by the Studio itself or by one Post-Production House. Each Component is identified by a `component_id` and its `type`.
+        "altCutIds": [ # List of Alternative Cut IDs, sometimes available in lieu of the main Edit-level EIDR IDs. This is not an EIDR ID, but a Partner-provided ID. Example: "206346_79838".
+          "A String",
+        ],
+        "processingErrors": [ # Processing errors during XML file parsing. Example: 'Invalid input file'
+          "A String",
+        ],
+        "studioName": "A String", # Name of the studio that owns the Component.
+        "rejectionNote": "A String", # Notes explaining why a Component has been rejected.
+        "titleLevelEidrs": [ # List of Title-level EIDR IDs. Example: "10.5240/1489-49A2-3956-4B2D-FE16-5".
+          "A String",
+        ],
+        "playableUnitType": "A String", # Type of the playable unit for which the Component is intended.
+        "receivedTime": "A String", # Timestamp when the Component was received.
+        "filename": "A String", # File name of the Component when delivered.
+        "priority": 3.14, # Component priority, as defined by Google. The higher the value, the higher the priority.
+        "editLevelEidrs": [ # List of Edit-level EIDR IDs. Example: "10.5240/1489-49A2-3956-4B2D-FE16-6".
+          "A String",
+        ],
+        "type": "A String", # Type of the Component. Example: AUDIO_51
+        "componentId": "A String", # ID internally generated by Google to uniquely identify the Component. Example: 'wteyrc_647xc'
+        "status": "A String", # High-level status of the Component.
+        "statusDetail": "A String", # Detailed status of the Component
+        "approvedTime": "A String", # Timestamp when the Component was approved.
+        "elIds": [ # IDs internally generated by Google to uniquely identify the ExperienceLocales for which the Component is used. Example: 'KRZiVjY9h7t'
+          "A String",
+        ],
+        "name": "A String", # Default Edit name, usually in the language of the country of origin. Example: "Googlers, The".
+        "language": "A String", # Language of the component, using the "BCP 47" format. Examples: "en", "en-US", "es", "es-419".
+        "componentDetailType": "A String", # Detail about the type of the Component.
+        "customIds": [ # List of custom IDs (defined by the partner) linked to the ExperienceLocale using this Component. Example: "R86241"
+          "A String",
+        ],
+        "pphName": "A String", # Name of the post-production house that manages the Component.
+        "normalizedPriority": "A String", # A simpler representation of the priority.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/playmoviespartner_v1.accounts.components.type.html b/docs/dyn/playmoviespartner_v1.accounts.components.type.html
new file mode 100644
index 0000000..8ec01d2
--- /dev/null
+++ b/docs/dyn/playmoviespartner_v1.accounts.components.type.html
@@ -0,0 +1,132 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="playmoviespartner_v1.html">Google Play Movies Partner API</a> . <a href="playmoviespartner_v1.accounts.html">accounts</a> . <a href="playmoviespartner_v1.accounts.components.html">components</a> . <a href="playmoviespartner_v1.accounts.components.type.html">type</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(accountId, componentId, type, x__xgafv=None)</a></code></p>
+<p class="firstline">Get a Component given its id.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(accountId, componentId, type, x__xgafv=None)</code>
+  <pre>Get a Component given its id.
+
+Args:
+  accountId: string, REQUIRED. See _General rules_ for more information about this field. (required)
+  componentId: string, REQUIRED. Component ID. (required)
+  type: string, REQUIRED. Component Type. (required)
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # A Component is an element (audio, video, subtitle, artwork, trailer, etc...) that is used in a set of ExperienceLocales. A Component is owned by a Studio and managed either by the Studio itself or by one Post-Production House. Each Component is identified by a `component_id` and its `type`.
+    "altCutIds": [ # List of Alternative Cut IDs, sometimes available in lieu of the main Edit-level EIDR IDs. This is not an EIDR ID, but a Partner-provided ID. Example: "206346_79838".
+      "A String",
+    ],
+    "processingErrors": [ # Processing errors during XML file parsing. Example: 'Invalid input file'
+      "A String",
+    ],
+    "studioName": "A String", # Name of the studio that owns the Component.
+    "rejectionNote": "A String", # Notes explaining why a Component has been rejected.
+    "titleLevelEidrs": [ # List of Title-level EIDR IDs. Example: "10.5240/1489-49A2-3956-4B2D-FE16-5".
+      "A String",
+    ],
+    "playableUnitType": "A String", # Type of the playable unit for which the Component is intended.
+    "receivedTime": "A String", # Timestamp when the Component was received.
+    "filename": "A String", # File name of the Component when delivered.
+    "priority": 3.14, # Component priority, as defined by Google. The higher the value, the higher the priority.
+    "editLevelEidrs": [ # List of Edit-level EIDR IDs. Example: "10.5240/1489-49A2-3956-4B2D-FE16-6".
+      "A String",
+    ],
+    "type": "A String", # Type of the Component. Example: AUDIO_51
+    "componentId": "A String", # ID internally generated by Google to uniquely identify the Component. Example: 'wteyrc_647xc'
+    "status": "A String", # High-level status of the Component.
+    "statusDetail": "A String", # Detailed status of the Component
+    "approvedTime": "A String", # Timestamp when the Component was approved.
+    "elIds": [ # IDs internally generated by Google to uniquely identify the ExperienceLocales for which the Component is used. Example: 'KRZiVjY9h7t'
+      "A String",
+    ],
+    "name": "A String", # Default Edit name, usually in the language of the country of origin. Example: "Googlers, The".
+    "language": "A String", # Language of the component, using the "BCP 47" format. Examples: "en", "en-US", "es", "es-419".
+    "componentDetailType": "A String", # Detail about the type of the Component.
+    "customIds": [ # List of custom IDs (defined by the partner) linked to the ExperienceLocale using this Component. Example: "R86241"
+      "A String",
+    ],
+    "pphName": "A String", # Name of the post-production house that manages the Component.
+    "normalizedPriority": "A String", # A simpler representation of the priority.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/playmoviespartner_v1.accounts.experienceLocales.html b/docs/dyn/playmoviespartner_v1.accounts.experienceLocales.html
index f0856e6..2a13be1 100644
--- a/docs/dyn/playmoviespartner_v1.accounts.experienceLocales.html
+++ b/docs/dyn/playmoviespartner_v1.accounts.experienceLocales.html
@@ -149,6 +149,7 @@
 
     { # Response to the 'ListExperienceLocales' method.
     "nextPageToken": "A String", # See _List methods rules_ for info about this field.
+    "totalSize": 42, # See _List methods rules_ for more information about this field.
     "experienceLocales": [ # List of ExperienceLocales that match the request criteria.
       { # An ExperienceLocale tracks the fulfillment of a Title in a country using a specific language, when delivered using component-based delivery. For example, a Title in Switzerland might have 3 ExperienceLocales: they both share the same country ("CH"), but each has different languages ("de", "fr", and "it"). Each ExperienceLocale is uniquely identified by an `el_id`, which is generated by Google. Externally, an ExperienceLocale can also be identified by partners using its EIDR IDs, AltCutID or `custom_id` (when provided).
         "pphNames": [ # Name of the post-production houses that manage the ExperienceLocale.
diff --git a/docs/dyn/playmoviespartner_v1.accounts.html b/docs/dyn/playmoviespartner_v1.accounts.html
index d3eaa88..039e2fa 100644
--- a/docs/dyn/playmoviespartner_v1.accounts.html
+++ b/docs/dyn/playmoviespartner_v1.accounts.html
@@ -80,6 +80,11 @@
 <p class="firstline">Returns the avails Resource.</p>
 
 <p class="toc_element">
+  <code><a href="playmoviespartner_v1.accounts.components.html">components()</a></code>
+</p>
+<p class="firstline">Returns the components Resource.</p>
+
+<p class="toc_element">
   <code><a href="playmoviespartner_v1.accounts.experienceLocales.html">experienceLocales()</a></code>
 </p>
 <p class="firstline">Returns the experienceLocales Resource.</p>
diff --git a/docs/dyn/playmoviespartner_v1.accounts.orders.html b/docs/dyn/playmoviespartner_v1.accounts.orders.html
index ef842d6..ea1a20d 100644
--- a/docs/dyn/playmoviespartner_v1.accounts.orders.html
+++ b/docs/dyn/playmoviespartner_v1.accounts.orders.html
@@ -78,7 +78,7 @@
   <code><a href="#get">get(accountId, orderId, x__xgafv=None)</a></code></p>
 <p class="firstline">Get an Order given its id. See _Authentication and Authorization rules_ and _Get methods rules_ for more information about this method.</p>
 <p class="toc_element">
-  <code><a href="#list">list(accountId, pphNames=None, pageSize=None, x__xgafv=None, studioNames=None, pageToken=None, customId=None, status=None, name=None)</a></code></p>
+  <code><a href="#list">list(accountId, pphNames=None, pageSize=None, x__xgafv=None, studioNames=None, pageToken=None, customId=None, status=None, videoIds=None, name=None)</a></code></p>
 <p class="firstline">List Orders owned or managed by the partner. See _Authentication and Authorization rules_ and _List methods rules_ for more information about this method.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
@@ -126,7 +126,7 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(accountId, pphNames=None, pageSize=None, x__xgafv=None, studioNames=None, pageToken=None, customId=None, status=None, name=None)</code>
+    <code class="details" id="list">list(accountId, pphNames=None, pageSize=None, x__xgafv=None, studioNames=None, pageToken=None, customId=None, status=None, videoIds=None, name=None)</code>
   <pre>List Orders owned or managed by the partner. See _Authentication and Authorization rules_ and _List methods rules_ for more information about this method.
 
 Args:
@@ -138,13 +138,15 @@
   pageToken: string, See _List methods rules_ for info about this field.
   customId: string, Filter Orders that match a case-insensitive, partner-specific custom id.
   status: string, Filter Orders that match one of the given status. (repeated)
-  name: string, Filter Orders that match a title name (case-insensitive, sub-string match).
+  videoIds: string, Filter Orders that match any of the given `video_id`s. (repeated)
+  name: string, Filter that matches Orders with a `name`, `show`, `season` or `episode` that contains the given case-insensitive name.
 
 Returns:
   An object of the form:
 
     { # Response to the 'ListOrders' method.
     "nextPageToken": "A String", # See _List methods rules_ for info about this field.
+    "totalSize": 42, # See _List methods rules_ for more information about this field.
     "orders": [ # List of Orders that match the request criteria.
       { # An Order tracks the fulfillment of an Edit when delivered using the legacy, non-component-based delivery. Each Order is uniquely identified by an `order_id`, which is generated by Google. Externally, Orders can also be identified by partners using its `custom_id` (when provided).
         "status": "A String", # High-level status of the order.
diff --git a/docs/dyn/playmoviespartner_v1.accounts.storeInfos.html b/docs/dyn/playmoviespartner_v1.accounts.storeInfos.html
index c9d1a96..932843f 100644
--- a/docs/dyn/playmoviespartner_v1.accounts.storeInfos.html
+++ b/docs/dyn/playmoviespartner_v1.accounts.storeInfos.html
@@ -80,14 +80,14 @@
 <p class="firstline">Returns the country Resource.</p>
 
 <p class="toc_element">
-  <code><a href="#list">list(accountId, pphNames=None, pageSize=None, x__xgafv=None, studioNames=None, pageToken=None, videoId=None, videoIds=None, name=None, countries=None)</a></code></p>
+  <code><a href="#list">list(accountId, pphNames=None, pageSize=None, x__xgafv=None, seasonIds=None, studioNames=None, pageToken=None, videoId=None, videoIds=None, name=None, countries=None, mids=None)</a></code></p>
 <p class="firstline">List StoreInfos owned or managed by the partner. See _Authentication and Authorization rules_ and _List methods rules_ for more information about this method.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(accountId, pphNames=None, pageSize=None, x__xgafv=None, studioNames=None, pageToken=None, videoId=None, videoIds=None, name=None, countries=None)</code>
+    <code class="details" id="list">list(accountId, pphNames=None, pageSize=None, x__xgafv=None, seasonIds=None, studioNames=None, pageToken=None, videoId=None, videoIds=None, name=None, countries=None, mids=None)</code>
   <pre>List StoreInfos owned or managed by the partner. See _Authentication and Authorization rules_ and _List methods rules_ for more information about this method.
 
 Args:
@@ -95,12 +95,14 @@
   pphNames: string, See _List methods rules_ for info about this field. (repeated)
   pageSize: integer, See _List methods rules_ for info about this field.
   x__xgafv: string, V1 error format.
+  seasonIds: string, Filter StoreInfos that match any of the given `season_id`s. (repeated)
   studioNames: string, See _List methods rules_ for info about this field. (repeated)
   pageToken: string, See _List methods rules_ for info about this field.
   videoId: string, Filter StoreInfos that match a given `video_id`. NOTE: this field is deprecated and will be removed on V2; `video_ids` should be used instead.
   videoIds: string, Filter StoreInfos that match any of the given `video_id`s. (repeated)
-  name: string, Filter StoreInfos that match a case-insensitive substring of the default name.
+  name: string, Filter that matches StoreInfos with a `name` or `show_name` that contains the given case-insensitive name.
   countries: string, Filter StoreInfos that match (case-insensitive) any of the given country codes, using the "ISO 3166-1 alpha-2" format (examples: "US", "us", "Us"). (repeated)
+  mids: string, Filter StoreInfos that match any of the given `mid`s. (repeated)
 
 Returns:
   An object of the form:
@@ -142,6 +144,7 @@
       },
     ],
     "nextPageToken": "A String", # See 'List methods rules' for info about this field.
+    "totalSize": 42, # See _List methods rules_ for more information about this field.
   }</pre>
 </div>
 
diff --git a/docs/dyn/prediction_v1_6.hostedmodels.html b/docs/dyn/prediction_v1_6.hostedmodels.html
index 69e85d1..b4d79fb 100644
--- a/docs/dyn/prediction_v1_6.hostedmodels.html
+++ b/docs/dyn/prediction_v1_6.hostedmodels.html
@@ -110,7 +110,7 @@
         "label": "A String", # The class label.
       },
     ],
-    "outputValue": 3.14, # The estimated regression value (Regression models only).
+    "outputValue": "A String", # The estimated regression value (Regression models only).
     "selfLink": "A String", # A URL to re-request this resource.
   }</pre>
 </div>
diff --git a/docs/dyn/prediction_v1_6.trainedmodels.html b/docs/dyn/prediction_v1_6.trainedmodels.html
index c591ff3..a0de137 100644
--- a/docs/dyn/prediction_v1_6.trainedmodels.html
+++ b/docs/dyn/prediction_v1_6.trainedmodels.html
@@ -376,7 +376,7 @@
         "label": "A String", # The class label.
       },
     ],
-    "outputValue": 3.14, # The estimated regression value (Regression models only).
+    "outputValue": "A String", # The estimated regression value (Regression models only).
     "selfLink": "A String", # A URL to re-request this resource.
   }</pre>
 </div>
diff --git a/docs/dyn/proximitybeacon_v1beta1.beaconinfo.html b/docs/dyn/proximitybeacon_v1beta1.beaconinfo.html
index a518058..a84de44 100644
--- a/docs/dyn/proximitybeacon_v1beta1.beaconinfo.html
+++ b/docs/dyn/proximitybeacon_v1beta1.beaconinfo.html
@@ -76,11 +76,11 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#getforobserved">getforobserved(body, x__xgafv=None)</a></code></p>
-<p class="firstline">Given one or more beacon observations, returns any beacon information and attachments accessible to your application.</p>
+<p class="firstline">Given one or more beacon observations, returns any beacon information and attachments accessible to your application. Authorize by using the [API key](https://developers.google.com/beacons/proximity/how-tos/authorizing#APIKey) for the application.</p>
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="getforobserved">getforobserved(body, x__xgafv=None)</code>
-  <pre>Given one or more beacon observations, returns any beacon information and attachments accessible to your application.
+  <pre>Given one or more beacon observations, returns any beacon information and attachments accessible to your application. Authorize by using the [API key](https://developers.google.com/beacons/proximity/how-tos/authorizing#APIKey) for the application.
 
 Args:
   body: object, The request body. (required)
@@ -89,12 +89,12 @@
 { # Request for beacon and attachment information about beacons that a mobile client has encountered "in the wild".
     "observations": [ # The beacons that the client has encountered. At least one must be given.
       { # Represents one beacon observed once.
-        "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The ID advertised by the beacon the client has encountered. Required.
+        "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The ID advertised by the beacon the client has encountered. Clients may submit an Eddystone-EID `advertised_id`. If the client is not authorized to resolve the given Eddystone-EID, no data will be returned for that beacon. Required.
           "type": "A String", # Specifies the identifier type. Required.
           "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
         },
         "telemetry": "A String", # The array of telemetry bytes received from the beacon. The server is responsible for parsing it. This field may frequently be empty, as with a beacon that transmits telemetry only occasionally.
-        "timestampMs": "A String", # Time when the beacon was observed. Being sourced from a mobile device, this time may be suspect.
+        "timestampMs": "A String", # Time when the beacon was observed.
       },
     ],
     "namespacedTypes": [ # Specifies what kind of attachments to include in the response. When given, the response will include only attachments of the given types. When empty, no attachments will be returned. Must be in the format namespace/type. Accepts `*` to specify all types in all namespaces. Optional.
@@ -110,17 +110,16 @@
     { # Information about the requested beacons, optionally including attachment data.
     "beacons": [ # Public information about beacons. May be empty if the request matched no beacons.
       { # A subset of beacon information served via the `beaconinfo.getforobserved` method, which you call when users of your app encounter your beacons.
+        "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The ID advertised by the beacon.
+          "type": "A String", # Specifies the identifier type. Required.
+          "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
+        },
         "attachments": [ # Attachments matching the type(s) requested. May be empty if no attachment types were requested, or if none matched.
           { # A subset of attachment information served via the `beaconinfo.getforobserved` method, used when your users encounter your beacons.
             "data": "A String", # An opaque data container for client-provided data.
             "namespacedType": "A String", # Specifies what kind of attachment this is. Tells a client how to interpret the `data` field. Format is namespace/type, for example scrupulous-wombat-12345/welcome-message
           },
         ],
-        "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The ID advertised by the beacon.
-          "type": "A String", # Specifies the identifier type. Required.
-          "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
-        },
-        "description": "A String", # Free text used to identify or describe the beacon in a registered establishment. For example: "entrance", "room 101", etc. May be empty.
         "beaconName": "A String", # The name under which the beacon is registered.
       },
     ],
diff --git a/docs/dyn/proximitybeacon_v1beta1.beacons.attachments.html b/docs/dyn/proximitybeacon_v1beta1.beacons.attachments.html
index 84687a7..167c1f6 100644
--- a/docs/dyn/proximitybeacon_v1beta1.beacons.attachments.html
+++ b/docs/dyn/proximitybeacon_v1beta1.beacons.attachments.html
@@ -75,25 +75,26 @@
 <h1><a href="proximitybeacon_v1beta1.html">Google Proximity Beacon API</a> . <a href="proximitybeacon_v1beta1.beacons.html">beacons</a> . <a href="proximitybeacon_v1beta1.beacons.attachments.html">attachments</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#batchDelete">batchDelete(beaconName, namespacedType=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes multiple attachments on a given beacon. This operation is permanent and cannot be undone. You can optionally specify `namespacedType` to choose which attachments should be deleted. If you do not specify `namespacedType`, all your attachments on the given beacon will be deleted. You also may explicitly specify `*/*` to delete all.</p>
+  <code><a href="#batchDelete">batchDelete(beaconName, namespacedType=None, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes multiple attachments on a given beacon. This operation is permanent and cannot be undone. You can optionally specify `namespacedType` to choose which attachments should be deleted. If you do not specify `namespacedType`, all your attachments on the given beacon will be deleted. You also may explicitly specify `*/*` to delete all. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <p class="toc_element">
-  <code><a href="#create">create(beaconName, body, x__xgafv=None)</a></code></p>
+  <code><a href="#create">create(beaconName, body, projectId=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Associates the given data with the specified beacon. Attachment data must contain two parts:  </p>
 <p class="toc_element">
-  <code><a href="#delete">delete(attachmentName, x__xgafv=None)</a></code></p>
-<p class="firstline">Deletes the specified attachment for the given beacon. Each attachment has a unique attachment name (`attachmentName`) which is returned when you fetch the attachment data via this API. You specify this with the delete request to control which attachment is removed. This operation cannot be undone.</p>
+  <code><a href="#delete">delete(attachmentName, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes the specified attachment for the given beacon. Each attachment has a unique attachment name (`attachmentName`) which is returned when you fetch the attachment data via this API. You specify this with the delete request to control which attachment is removed. This operation cannot be undone. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <p class="toc_element">
-  <code><a href="#list">list(beaconName, namespacedType=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Returns the attachments for the specified beacon that match the specified namespaced-type pattern. To control which namespaced types are returned, you add the `namespacedType` query parameter to the request. You must either use `*/*`, to return all attachments, or the namespace must be one of the ones returned from the `namespaces` endpoint.</p>
+  <code><a href="#list">list(beaconName, namespacedType=None, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns the attachments for the specified beacon that match the specified namespaced-type pattern. To control which namespaced types are returned, you add the `namespacedType` query parameter to the request. You must either use `*/*`, to return all attachments, or the namespace must be one of the ones returned from the `namespaces` endpoint. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="batchDelete">batchDelete(beaconName, namespacedType=None, x__xgafv=None)</code>
-  <pre>Deletes multiple attachments on a given beacon. This operation is permanent and cannot be undone. You can optionally specify `namespacedType` to choose which attachments should be deleted. If you do not specify `namespacedType`, all your attachments on the given beacon will be deleted. You also may explicitly specify `*/*` to delete all.
+    <code class="details" id="batchDelete">batchDelete(beaconName, namespacedType=None, projectId=None, x__xgafv=None)</code>
+  <pre>Deletes multiple attachments on a given beacon. This operation is permanent and cannot be undone. You can optionally specify `namespacedType` to choose which attachments should be deleted. If you do not specify `namespacedType`, all your attachments on the given beacon will be deleted. You also may explicitly specify `*/*` to delete all. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
-  beaconName: string, The beacon whose attachments are to be deleted. Required. (required)
+  beaconName: string, The beacon whose attachments should be deleted. A beacon name has the format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID or the beacon's "stable" UID. Required. (required)
   namespacedType: string, Specifies the namespace and type of attachments to delete in `namespace/type` format. Accepts `*/*` to specify "all types in all namespaces". Optional.
+  projectId: string, The project id to delete beacon attachments under. This field can be used when "*" is specified to mean all attachment namespaces. Projects may have multiple attachments with multiple namespaces. If "*" is specified and the projectId string is empty, then the project making the request is used. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -105,13 +106,13 @@
 </div>
 
 <div class="method">
-    <code class="details" id="create">create(beaconName, body, x__xgafv=None)</code>
+    <code class="details" id="create">create(beaconName, body, projectId=None, x__xgafv=None)</code>
   <pre>Associates the given data with the specified beacon. Attachment data must contain two parts:  
 - A namespaced type. 
-- The actual attachment data itself.  The namespaced type consists of two parts, the namespace and the type. The namespace must be one of the values returned by the `namespaces` endpoint, while the type can be a string of any characters except for the forward slash (`/`) up to 100 characters in length. Attachment data can be up to 1024 bytes long.
+- The actual attachment data itself.  The namespaced type consists of two parts, the namespace and the type. The namespace must be one of the values returned by the `namespaces` endpoint, while the type can be a string of any characters except for the forward slash (`/`) up to 100 characters in length. Attachment data can be up to 1024 bytes long. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
-  beaconName: string, The beacon on which the attachment should be created. Required. (required)
+  beaconName: string, Beacon on which the attachment should be created. A beacon name has the format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID or the beacon's "stable" UID. Required. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
@@ -121,6 +122,7 @@
     "namespacedType": "A String", # Specifies what kind of attachment this is. Tells a client how to interpret the `data` field. Format is namespace/type. Namespace provides type separation between clients. Type describes the type of `data`, for use by the client when parsing the `data` field. Required.
   }
 
+  projectId: string, The project id of the project the attachment will belong to. If the project id is not specified then the project making the request is used. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -134,11 +136,12 @@
 </div>
 
 <div class="method">
-    <code class="details" id="delete">delete(attachmentName, x__xgafv=None)</code>
-  <pre>Deletes the specified attachment for the given beacon. Each attachment has a unique attachment name (`attachmentName`) which is returned when you fetch the attachment data via this API. You specify this with the delete request to control which attachment is removed. This operation cannot be undone.
+    <code class="details" id="delete">delete(attachmentName, projectId=None, x__xgafv=None)</code>
+  <pre>Deletes the specified attachment for the given beacon. Each attachment has a unique attachment name (`attachmentName`) which is returned when you fetch the attachment data via this API. You specify this with the delete request to control which attachment is removed. This operation cannot be undone. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
-  attachmentName: string, The attachment name (`attachmentName`) of the attachment to remove. For example: `beacons/3!893737abc9/attachments/c5e937-af0-494-959-ec49d12738` Required. (required)
+  attachmentName: string, The attachment name (`attachmentName`) of the attachment to remove. For example: `beacons/3!893737abc9/attachments/c5e937-af0-494-959-ec49d12738`. For Eddystone-EID beacons, the beacon ID portion (`3!893737abc9`) may be the beacon's current EID, or its "stable" Eddystone-UID. Required. (required)
+  projectId: string, The project id of the attachment to delete. If not provided, the project that is making the request is used. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -149,12 +152,13 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(beaconName, namespacedType=None, x__xgafv=None)</code>
-  <pre>Returns the attachments for the specified beacon that match the specified namespaced-type pattern. To control which namespaced types are returned, you add the `namespacedType` query parameter to the request. You must either use `*/*`, to return all attachments, or the namespace must be one of the ones returned from the `namespaces` endpoint.
+    <code class="details" id="list">list(beaconName, namespacedType=None, projectId=None, x__xgafv=None)</code>
+  <pre>Returns the attachments for the specified beacon that match the specified namespaced-type pattern. To control which namespaced types are returned, you add the `namespacedType` query parameter to the request. You must either use `*/*`, to return all attachments, or the namespace must be one of the ones returned from the `namespaces` endpoint. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
-  beaconName: string, The beacon whose attachments are to be fetched. Required. (required)
+  beaconName: string, Beacon whose attachments should be fetched. A beacon name has the format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID or the beacon's "stable" UID. Required. (required)
   namespacedType: string, Specifies the namespace and type of attachment to include in response in namespace/type format. Accepts `*/*` to specify "all types in all namespaces".
+  projectId: string, The project id to list beacon attachments under. This field can be used when "*" is specified to mean all attachment namespaces. Projects may have multiple attachments with multiple namespaces. If "*" is specified and the projectId string is empty, then the project making the request is used. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
diff --git a/docs/dyn/proximitybeacon_v1beta1.beacons.diagnostics.html b/docs/dyn/proximitybeacon_v1beta1.beacons.diagnostics.html
index d14e521..f886339 100644
--- a/docs/dyn/proximitybeacon_v1beta1.beacons.diagnostics.html
+++ b/docs/dyn/proximitybeacon_v1beta1.beacons.diagnostics.html
@@ -75,19 +75,20 @@
 <h1><a href="proximitybeacon_v1beta1.html">Google Proximity Beacon API</a> . <a href="proximitybeacon_v1beta1.beacons.html">beacons</a> . <a href="proximitybeacon_v1beta1.beacons.diagnostics.html">diagnostics</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#list">list(beaconName, pageSize=None, alertFilter=None, pageToken=None, x__xgafv=None)</a></code></p>
-<p class="firstline">List the diagnostics for a single beacon. You can also list diagnostics for all the beacons owned by your Google Developers Console project by using the beacon name `beacons/-`.</p>
+  <code><a href="#list">list(beaconName, pageSize=None, projectId=None, alertFilter=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">List the diagnostics for a single beacon. You can also list diagnostics for all the beacons owned by your Google Developers Console project by using the beacon name `beacons/-`. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(beaconName, pageSize=None, alertFilter=None, pageToken=None, x__xgafv=None)</code>
-  <pre>List the diagnostics for a single beacon. You can also list diagnostics for all the beacons owned by your Google Developers Console project by using the beacon name `beacons/-`.
+    <code class="details" id="list">list(beaconName, pageSize=None, projectId=None, alertFilter=None, pageToken=None, x__xgafv=None)</code>
+  <pre>List the diagnostics for a single beacon. You can also list diagnostics for all the beacons owned by your Google Developers Console project by using the beacon name `beacons/-`. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
   beaconName: string, Beacon that the diagnostics are for. (required)
   pageSize: integer, Specifies the maximum number of results to return. Defaults to 10. Maximum 1000. Optional.
+  projectId: string, Requests only diagnostic records for the given project id. If not set, then the project making the request will be used for looking up diagnostic records. Optional.
   alertFilter: string, Requests only beacons that have the given alert. For example, to find beacons that have low batteries use `alert_filter=LOW_BATTERY`.
   pageToken: string, Requests results that occur after the `page_token`, obtained from the response to a previous request. Optional.
   x__xgafv: string, V1 error format.
@@ -99,15 +100,15 @@
     "nextPageToken": "A String", # Token that can be used for pagination. Returned only if the request matches more beacons than can be returned in this response.
     "diagnostics": [ # The diagnostics matching the given request.
       { # Diagnostics for a single beacon.
-        "estimatedLowBatteryDate": { # Represents a whole calendar date, e.g. date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the Proleptic Gregorian Calendar. The day may be 0 to represent a year and month where the day is not significant, e.g. credit card expiration date. The year may be 0 to represent a month and day independent of year, e.g. anniversary date. Related types are [google.type.TimeOfDay][] and `google.protobuf.Timestamp`. # The date when the battery is expected to be low. If the value is missing then there is no estimate for when the battery will be low. This value is only an estimate, not an exact date.
-          "month": 42, # Month of year of date. Must be from 1 to 12.
-          "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a year/month where the day is not sigificant.
-          "year": 42, # Year of date. Must be from 1 to 9,999, or 0 if specifying a date without a year.
+        "estimatedLowBatteryDate": { # Represents a whole calendar date, e.g. date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the Proleptic Gregorian Calendar. The day may be 0 to represent a year and month where the day is not significant, e.g. credit card expiration date. The year may be 0 to represent a month and day independent of year, e.g. anniversary date. Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`. # The date when the battery is expected to be low. If the value is missing then there is no estimate for when the battery will be low. This value is only an estimate, not an exact date.
+          "month": 42, # Month of year. Must be from 1 to 12.
+          "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a year/month where the day is not significant.
+          "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without a year.
         },
         "alerts": [ # An unordered list of Alerts that the beacon has.
           "A String",
         ],
-        "beaconName": "A String", # Resource name of the beacon.
+        "beaconName": "A String", # Resource name of the beacon. For Eddystone-EID beacons, this may be the beacon's current EID, or the beacon's "stable" Eddystone-UID.
       },
     ],
   }</pre>
diff --git a/docs/dyn/proximitybeacon_v1beta1.beacons.html b/docs/dyn/proximitybeacon_v1beta1.beacons.html
index f3ffd82..afb1518 100644
--- a/docs/dyn/proximitybeacon_v1beta1.beacons.html
+++ b/docs/dyn/proximitybeacon_v1beta1.beacons.html
@@ -85,36 +85,37 @@
 <p class="firstline">Returns the diagnostics Resource.</p>
 
 <p class="toc_element">
-  <code><a href="#activate">activate(beaconName, x__xgafv=None)</a></code></p>
-<p class="firstline">(Re)activates a beacon. A beacon that is active will return information and attachment data when queried via `beaconinfo.getforobserved`. Calling this method on an already active beacon will do nothing (but will return a successful response code).</p>
+  <code><a href="#activate">activate(beaconName, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Activates a beacon. A beacon that is active will return information and attachment data when queried via `beaconinfo.getforobserved`. Calling this method on an already active beacon will do nothing (but will return a successful response code). Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <p class="toc_element">
-  <code><a href="#deactivate">deactivate(beaconName, x__xgafv=None)</a></code></p>
-<p class="firstline">Deactivates a beacon. Once deactivated, the API will not return information nor attachment data for the beacon when queried via `beaconinfo.getforobserved`. Calling this method on an already inactive beacon will do nothing (but will return a successful response code).</p>
+  <code><a href="#deactivate">deactivate(beaconName, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Deactivates a beacon. Once deactivated, the API will not return information nor attachment data for the beacon when queried via `beaconinfo.getforobserved`. Calling this method on an already inactive beacon will do nothing (but will return a successful response code). Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <p class="toc_element">
-  <code><a href="#decommission">decommission(beaconName, x__xgafv=None)</a></code></p>
-<p class="firstline">Decommissions the specified beacon in the service. This beacon will no longer be returned from `beaconinfo.getforobserved`. This operation is permanent -- you will not be able to re-register a beacon with this ID again.</p>
+  <code><a href="#decommission">decommission(beaconName, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Decommissions the specified beacon in the service. This beacon will no longer be returned from `beaconinfo.getforobserved`. This operation is permanent -- you will not be able to re-register a beacon with this ID again. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <p class="toc_element">
-  <code><a href="#get">get(beaconName, x__xgafv=None)</a></code></p>
-<p class="firstline">Returns detailed information about the specified beacon.</p>
+  <code><a href="#get">get(beaconName, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns detailed information about the specified beacon. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project. Requests may supply an Eddystone-EID beacon name in the form: `beacons/4!beaconId` where the `beaconId` is the base16 ephemeral ID broadcast by the beacon. The returned `Beacon` object will contain the beacon's stable Eddystone-UID. Clients not authorized to resolve the beacon's ephemeral Eddystone-EID broadcast will receive an error.</p>
 <p class="toc_element">
-  <code><a href="#list">list(pageSize=None, q=None, pageToken=None, x__xgafv=None)</a></code></p>
-<p class="firstline">Searches the beacon registry for beacons that match the given search criteria. Only those beacons that the client has permission to list will be returned.</p>
+  <code><a href="#list">list(pageSize=None, projectId=None, q=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Searches the beacon registry for beacons that match the given search criteria. Only those beacons that the client has permission to list will be returned. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <p class="toc_element">
-  <code><a href="#register">register(body, x__xgafv=None)</a></code></p>
-<p class="firstline">Registers a previously unregistered beacon given its `advertisedId`. These IDs are unique within the system. An ID can be registered only once.</p>
+  <code><a href="#register">register(body, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Registers a previously unregistered beacon given its `advertisedId`. These IDs are unique within the system. An ID can be registered only once. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <p class="toc_element">
-  <code><a href="#update">update(beaconName, body, x__xgafv=None)</a></code></p>
-<p class="firstline">Updates the information about the specified beacon. **Any field that you do not populate in the submitted beacon will be permanently erased**, so you should follow the "read, modify, write" pattern to avoid inadvertently destroying data. Changes to the beacon status via this method will be silently ignored. To update beacon status, use the separate methods on this API for (de)activation and decommissioning.</p>
+  <code><a href="#update">update(beaconName, body, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates the information about the specified beacon. **Any field that you do not populate in the submitted beacon will be permanently erased**, so you should follow the "read, modify, write" pattern to avoid inadvertently destroying data. Changes to the beacon status via this method will be silently ignored. To update beacon status, use the separate methods on this API for activation, deactivation, and decommissioning. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="activate">activate(beaconName, x__xgafv=None)</code>
-  <pre>(Re)activates a beacon. A beacon that is active will return information and attachment data when queried via `beaconinfo.getforobserved`. Calling this method on an already active beacon will do nothing (but will return a successful response code).
+    <code class="details" id="activate">activate(beaconName, projectId=None, x__xgafv=None)</code>
+  <pre>Activates a beacon. A beacon that is active will return information and attachment data when queried via `beaconinfo.getforobserved`. Calling this method on an already active beacon will do nothing (but will return a successful response code). Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
-  beaconName: string, The beacon to activate. Required. (required)
+  beaconName: string, Beacon that should be activated. A beacon name has the format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID or the beacon's "stable" UID. Required. (required)
+  projectId: string, The project id of the beacon to activate. If the project id is not specified then the project making the request is used. The project id must match the project that owns the beacon. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -125,11 +126,12 @@
 </div>
 
 <div class="method">
-    <code class="details" id="deactivate">deactivate(beaconName, x__xgafv=None)</code>
-  <pre>Deactivates a beacon. Once deactivated, the API will not return information nor attachment data for the beacon when queried via `beaconinfo.getforobserved`. Calling this method on an already inactive beacon will do nothing (but will return a successful response code).
+    <code class="details" id="deactivate">deactivate(beaconName, projectId=None, x__xgafv=None)</code>
+  <pre>Deactivates a beacon. Once deactivated, the API will not return information nor attachment data for the beacon when queried via `beaconinfo.getforobserved`. Calling this method on an already inactive beacon will do nothing (but will return a successful response code). Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
-  beaconName: string, The beacon name of this beacon. (required)
+  beaconName: string, Beacon that should be deactivated. A beacon name has the format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID or the beacon's "stable" UID. Required. (required)
+  projectId: string, The project id of the beacon to deactivate. If the project id is not specified then the project making the request is used. The project id must match the project that owns the beacon. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -140,11 +142,12 @@
 </div>
 
 <div class="method">
-    <code class="details" id="decommission">decommission(beaconName, x__xgafv=None)</code>
-  <pre>Decommissions the specified beacon in the service. This beacon will no longer be returned from `beaconinfo.getforobserved`. This operation is permanent -- you will not be able to re-register a beacon with this ID again.
+    <code class="details" id="decommission">decommission(beaconName, projectId=None, x__xgafv=None)</code>
+  <pre>Decommissions the specified beacon in the service. This beacon will no longer be returned from `beaconinfo.getforobserved`. This operation is permanent -- you will not be able to re-register a beacon with this ID again. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
-  beaconName: string, Beacon that should be decommissioned. Required. (required)
+  beaconName: string, Beacon that should be decommissioned. A beacon name has the format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID of the beacon's "stable" UID. Required. (required)
+  projectId: string, The project id of the beacon to decommission. If the project id is not specified then the project making the request is used. The project id must match the project that owns the beacon. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -155,11 +158,12 @@
 </div>
 
 <div class="method">
-    <code class="details" id="get">get(beaconName, x__xgafv=None)</code>
-  <pre>Returns detailed information about the specified beacon.
+    <code class="details" id="get">get(beaconName, projectId=None, x__xgafv=None)</code>
+  <pre>Returns detailed information about the specified beacon. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project. Requests may supply an Eddystone-EID beacon name in the form: `beacons/4!beaconId` where the `beaconId` is the base16 ephemeral ID broadcast by the beacon. The returned `Beacon` object will contain the beacon's stable Eddystone-UID. Clients not authorized to resolve the beacon's ephemeral Eddystone-EID broadcast will receive an error.
 
 Args:
-  beaconName: string, Beacon that is requested. (required)
+  beaconName: string, Resource name of this beacon. A beacon name has the format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5` for AltBeacon. For Eddystone-EID beacons, you may use either the current EID or the beacon's "stable" UID. Required. (required)
+  projectId: string, The project id of the beacon to request. If the project id is not specified then the project making the request is used. The project id must match the project that owns the beacon. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -171,12 +175,20 @@
     "indoorLevel": { # Indoor level, a human-readable string as returned by Google Maps APIs, useful to indicate which floor of a building a beacon is located on. # The indoor level information for this beacon, if known. As returned by the Google Maps API. Optional.
       "name": "A String", # The name of this level.
     },
-    "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wrapsdecimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-180.0, 180.0] and [-90.0, 90.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
+    "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wraps decimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-90.0, 90.0] and [-180.0, 180.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
       "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
       "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
     },
     "placeId": "A String", # The [Google Places API](/places/place-id) Place ID of the place where the beacon is deployed. This is given when the beacon is registered or updated, not automatically detected in any way. Optional.
-    "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates.
+    "ephemeralIdRegistration": { # Write-only registration parameters for beacons using Eddystone-EID format. Two ways of securely registering an Eddystone-EID beacon with the service are supported: 1. Perform an ECDH key exchange via this API, including a previous call to `GET /v1beta1/eidparams`. In this case the fields `beacon_ecdh_public_key` and `service_ecdh_public_key` should be populated and `beacon_identity_key` should not be populated. This method ensures that only the two parties in the ECDH key exchange can compute the identity key, which becomes a secret between them. 2. Derive or obtain the beacon's identity key via other secure means (perhaps an ECDH key exchange between the beacon and a mobile device or any other secure method), and then submit the resulting identity key to the service. In this case `beacon_identity_key` field should be populated, and neither of `beacon_ecdh_public_key` nor `service_ecdh_public_key` fields should be. The security of this method depends on how securely the parties involved (in particular the bluetooth client) handle the identity key, and obviously on how securely the identity key was generated. See [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub. # Write-only registration parameters for beacons using Eddystone-EID (remotely resolved ephemeral ID) format. This information will not be populated in API responses. When submitting this data, the `advertised_id` field must contain an ID of type Eddystone-UID. Any other ID type will result in an error.
+      "rotationPeriodExponent": 42, # Indicates the nominal period between each rotation of the beacon's ephemeral ID. "Nominal" because the beacon should randomize the actual interval. See [the spec at github](https://github.com/google/eddystone/tree/master/eddystone-eid) for details. This value corresponds to a power-of-two scaler on the beacon's clock: when the scaler value is K, the beacon will begin broadcasting a new ephemeral ID on average every 2^K seconds.
+      "initialClockValue": "A String", # The initial clock value of the beacon. The beacon's clock must have begun counting at this value immediately prior to transmitting this value to the resolving service. Significant delay in transmitting this value to the service risks registration or resolution failures. If a value is not provided, the default is zero.
+      "beaconEcdhPublicKey": "A String", # The beacon's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `service_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+      "initialEid": "A String", # An initial ephemeral ID calculated using the clock value submitted as `initial_clock_value`, and the secret key generated by the Diffie-Hellman key exchange using `service_ecdh_public_key` and `service_ecdh_public_key`. This initial EID value will be used by the service to confirm that the key exchange process was successful.
+      "serviceEcdhPublicKey": "A String", # The service's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `beacon_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+      "beaconIdentityKey": "A String", # The private key of the beacon. If this field is populated, `beacon_ecdh_public_key` and `service_ecdh_public_key` must not be populated.
+    },
+    "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates. When registering a beacon that broadcasts Eddystone-EID, this field should contain a "stable" Eddystone-UID that identifies the beacon and links it to its attachments. The stable Eddystone-UID is only used for administering the beacon.
       "type": "A String", # Specifies the identifier type. Required.
       "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
     },
@@ -185,16 +197,18 @@
     "properties": { # Properties of the beacon device, for example battery type or firmware version. Optional.
       "a_key": "A String",
     },
+    "provisioningKey": "A String", # Some beacons may require a user to provide an authorization key before changing any of its configuration (e.g. broadcast frames, transmit power). This field provides a place to store and control access to that key. This field is populated in responses to `GET /v1beta1/beacons/3!beaconId` from users with write access to the given beacon. That is to say: If the user is authorized to write the beacon's confidential data in the service, the service considers them authorized to configure the beacon. Note that this key grants nothing on the service, only on the beacon itself.
   }</pre>
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(pageSize=None, q=None, pageToken=None, x__xgafv=None)</code>
-  <pre>Searches the beacon registry for beacons that match the given search criteria. Only those beacons that the client has permission to list will be returned.
+    <code class="details" id="list">list(pageSize=None, projectId=None, q=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Searches the beacon registry for beacons that match the given search criteria. Only those beacons that the client has permission to list will be returned. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
   pageSize: integer, The maximum number of records to return for this request, up to a server-defined upper limit.
-  q: string, Filter query string that supports the following field filters: * `description:""` For example: `description:"Room 3"` Returns beacons whose description matches tokens in the string "Room 3" (not necessarily that exact string). The string must be double-quoted. * `status:` For example: `status:active` Returns beacons whose status matches the given value. Values must be one of the Beacon.Status enum values (case insensitive). Accepts multiple filters which will be combined with OR logic. * `stability:` For example: `stability:mobile` Returns beacons whose expected stability matches the given value. Values must be one of the Beacon.Stability enum values (case insensitive). Accepts multiple filters which will be combined with OR logic. * `place_id:""` For example: `place_id:"ChIJVSZzVR8FdkgRXGmmm6SslKw="` Returns beacons explicitly registered at the given place, expressed as a Place ID obtained from [Google Places API](/places/place-id). Does not match places inside the given place. Does not consider the beacon's actual location (which may be different from its registered place). Accepts multiple filters that will be combined with OR logic. The place ID must be double-quoted. * `registration_time[|=]` For example: `registration_time>=1433116800` Returns beacons whose registration time matches the given filter. Supports the operators: , =. Timestamp must be expressed as an integer number of seconds since midnight January 1, 1970 UTC. Accepts at most two filters that will be combined with AND logic, to support "between" semantics. If more than two are supplied, the latter ones are ignored. * `lat: lng: radius:` For example: `lat:51.1232343 lng:-1.093852 radius:1000` Returns beacons whose registered location is within the given circle. When any of these fields are given, all are required. Latitude and longitude must be decimal degrees between -90.0 and 90.0 and between -180.0 and 180.0 respectively. Radius must be an integer number of meters less than 1,000,000 (1000 km). * `property:"="` For example: `property:"battery-type=CR2032"` Returns beacons which have a property of the given name and value. Supports multiple filters which will be combined with OR logic. The entire name=value string must be double-quoted as one string. * `attachment_type:""` For example: `attachment_type:"my-namespace/my-type"` Returns beacons having at least one attachment of the given namespaced type. Supports "any within this namespace" via the partial wildcard syntax: "my-namespace/*". Supports multiple filters which will be combined with OR logic. The string must be double-quoted. Multiple filters on the same field are combined with OR logic (except registration_time which is combined with AND logic). Multiple filters on different fields are combined with AND logic. Filters should be separated by spaces. As with any HTTP query string parameter, the whole filter expression must be URL-encoded. Example REST request: `GET /v1beta1/beacons?q=status:active%20lat:51.123%20lng:-1.095%20radius:1000`
+  projectId: string, The project id to list beacons under. If not present then the project credential that made the request is used as the project. Optional.
+  q: string, Filter query string that supports the following field filters: * `description:""` For example: `description:"Room 3"` Returns beacons whose description matches tokens in the string "Room 3" (not necessarily that exact string). The string must be double-quoted. * `status:` For example: `status:active` Returns beacons whose status matches the given value. Values must be one of the Beacon.Status enum values (case insensitive). Accepts multiple filters which will be combined with OR logic. * `stability:` For example: `stability:mobile` Returns beacons whose expected stability matches the given value. Values must be one of the Beacon.Stability enum values (case insensitive). Accepts multiple filters which will be combined with OR logic. * `place_id:""` For example: `place_id:"ChIJVSZzVR8FdkgRXGmmm6SslKw="` Returns beacons explicitly registered at the given place, expressed as a Place ID obtained from [Google Places API](/places/place-id). Does not match places inside the given place. Does not consider the beacon's actual location (which may be different from its registered place). Accepts multiple filters that will be combined with OR logic. The place ID must be double-quoted. * `registration_time[|=]` For example: `registration_time>=1433116800` Returns beacons whose registration time matches the given filter. Supports the operators: , =. Timestamp must be expressed as an integer number of seconds since midnight January 1, 1970 UTC. Accepts at most two filters that will be combined with AND logic, to support "between" semantics. If more than two are supplied, the latter ones are ignored. * `lat: lng: radius:` For example: `lat:51.1232343 lng:-1.093852 radius:1000` Returns beacons whose registered location is within the given circle. When any of these fields are given, all are required. Latitude and longitude must be decimal degrees between -90.0 and 90.0 and between -180.0 and 180.0 respectively. Radius must be an integer number of meters between 10 and 1,000,000 (1000 km). * `property:"="` For example: `property:"battery-type=CR2032"` Returns beacons which have a property of the given name and value. Supports multiple filters which will be combined with OR logic. The entire name=value string must be double-quoted as one string. * `attachment_type:""` For example: `attachment_type:"my-namespace/my-type"` Returns beacons having at least one attachment of the given namespaced type. Supports "any within this namespace" via the partial wildcard syntax: "my-namespace/*". Supports multiple filters which will be combined with OR logic. The string must be double-quoted. Multiple filters on the same field are combined with OR logic (except registration_time which is combined with AND logic). Multiple filters on different fields are combined with AND logic. Filters should be separated by spaces. As with any HTTP query string parameter, the whole filter expression must be URL-encoded. Example REST request: `GET /v1beta1/beacons?q=status:active%20lat:51.123%20lng:-1.095%20radius:1000`
   pageToken: string, A pagination token obtained from a previous request to list beacons.
   x__xgafv: string, V1 error format.
 
@@ -209,12 +223,20 @@
         "indoorLevel": { # Indoor level, a human-readable string as returned by Google Maps APIs, useful to indicate which floor of a building a beacon is located on. # The indoor level information for this beacon, if known. As returned by the Google Maps API. Optional.
           "name": "A String", # The name of this level.
         },
-        "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wrapsdecimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-180.0, 180.0] and [-90.0, 90.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
+        "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wraps decimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-90.0, 90.0] and [-180.0, 180.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
           "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
           "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
         },
         "placeId": "A String", # The [Google Places API](/places/place-id) Place ID of the place where the beacon is deployed. This is given when the beacon is registered or updated, not automatically detected in any way. Optional.
-        "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates.
+        "ephemeralIdRegistration": { # Write-only registration parameters for beacons using Eddystone-EID format. Two ways of securely registering an Eddystone-EID beacon with the service are supported: 1. Perform an ECDH key exchange via this API, including a previous call to `GET /v1beta1/eidparams`. In this case the fields `beacon_ecdh_public_key` and `service_ecdh_public_key` should be populated and `beacon_identity_key` should not be populated. This method ensures that only the two parties in the ECDH key exchange can compute the identity key, which becomes a secret between them. 2. Derive or obtain the beacon's identity key via other secure means (perhaps an ECDH key exchange between the beacon and a mobile device or any other secure method), and then submit the resulting identity key to the service. In this case `beacon_identity_key` field should be populated, and neither of `beacon_ecdh_public_key` nor `service_ecdh_public_key` fields should be. The security of this method depends on how securely the parties involved (in particular the bluetooth client) handle the identity key, and obviously on how securely the identity key was generated. See [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub. # Write-only registration parameters for beacons using Eddystone-EID (remotely resolved ephemeral ID) format. This information will not be populated in API responses. When submitting this data, the `advertised_id` field must contain an ID of type Eddystone-UID. Any other ID type will result in an error.
+          "rotationPeriodExponent": 42, # Indicates the nominal period between each rotation of the beacon's ephemeral ID. "Nominal" because the beacon should randomize the actual interval. See [the spec at github](https://github.com/google/eddystone/tree/master/eddystone-eid) for details. This value corresponds to a power-of-two scaler on the beacon's clock: when the scaler value is K, the beacon will begin broadcasting a new ephemeral ID on average every 2^K seconds.
+          "initialClockValue": "A String", # The initial clock value of the beacon. The beacon's clock must have begun counting at this value immediately prior to transmitting this value to the resolving service. Significant delay in transmitting this value to the service risks registration or resolution failures. If a value is not provided, the default is zero.
+          "beaconEcdhPublicKey": "A String", # The beacon's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `service_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+          "initialEid": "A String", # An initial ephemeral ID calculated using the clock value submitted as `initial_clock_value`, and the secret key generated by the Diffie-Hellman key exchange using `service_ecdh_public_key` and `service_ecdh_public_key`. This initial EID value will be used by the service to confirm that the key exchange process was successful.
+          "serviceEcdhPublicKey": "A String", # The service's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `beacon_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+          "beaconIdentityKey": "A String", # The private key of the beacon. If this field is populated, `beacon_ecdh_public_key` and `service_ecdh_public_key` must not be populated.
+        },
+        "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates. When registering a beacon that broadcasts Eddystone-EID, this field should contain a "stable" Eddystone-UID that identifies the beacon and links it to its attachments. The stable Eddystone-UID is only used for administering the beacon.
           "type": "A String", # Specifies the identifier type. Required.
           "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
         },
@@ -223,6 +245,7 @@
         "properties": { # Properties of the beacon device, for example battery type or firmware version. Optional.
           "a_key": "A String",
         },
+        "provisioningKey": "A String", # Some beacons may require a user to provide an authorization key before changing any of its configuration (e.g. broadcast frames, transmit power). This field provides a place to store and control access to that key. This field is populated in responses to `GET /v1beta1/beacons/3!beaconId` from users with write access to the given beacon. That is to say: If the user is authorized to write the beacon's confidential data in the service, the service considers them authorized to configure the beacon. Note that this key grants nothing on the service, only on the beacon itself.
       },
     ],
     "nextPageToken": "A String", # An opaque pagination token that the client may provide in their next request to retrieve the next page of results.
@@ -245,8 +268,8 @@
 </div>
 
 <div class="method">
-    <code class="details" id="register">register(body, x__xgafv=None)</code>
-  <pre>Registers a previously unregistered beacon given its `advertisedId`. These IDs are unique within the system. An ID can be registered only once.
+    <code class="details" id="register">register(body, projectId=None, x__xgafv=None)</code>
+  <pre>Registers a previously unregistered beacon given its `advertisedId`. These IDs are unique within the system. An ID can be registered only once. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
   body: object, The request body. (required)
@@ -258,12 +281,20 @@
   "indoorLevel": { # Indoor level, a human-readable string as returned by Google Maps APIs, useful to indicate which floor of a building a beacon is located on. # The indoor level information for this beacon, if known. As returned by the Google Maps API. Optional.
     "name": "A String", # The name of this level.
   },
-  "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wrapsdecimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-180.0, 180.0] and [-90.0, 90.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
+  "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wraps decimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-90.0, 90.0] and [-180.0, 180.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
     "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
     "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
   },
   "placeId": "A String", # The [Google Places API](/places/place-id) Place ID of the place where the beacon is deployed. This is given when the beacon is registered or updated, not automatically detected in any way. Optional.
-  "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates.
+  "ephemeralIdRegistration": { # Write-only registration parameters for beacons using Eddystone-EID format. Two ways of securely registering an Eddystone-EID beacon with the service are supported: 1. Perform an ECDH key exchange via this API, including a previous call to `GET /v1beta1/eidparams`. In this case the fields `beacon_ecdh_public_key` and `service_ecdh_public_key` should be populated and `beacon_identity_key` should not be populated. This method ensures that only the two parties in the ECDH key exchange can compute the identity key, which becomes a secret between them. 2. Derive or obtain the beacon's identity key via other secure means (perhaps an ECDH key exchange between the beacon and a mobile device or any other secure method), and then submit the resulting identity key to the service. In this case `beacon_identity_key` field should be populated, and neither of `beacon_ecdh_public_key` nor `service_ecdh_public_key` fields should be. The security of this method depends on how securely the parties involved (in particular the bluetooth client) handle the identity key, and obviously on how securely the identity key was generated. See [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub. # Write-only registration parameters for beacons using Eddystone-EID (remotely resolved ephemeral ID) format. This information will not be populated in API responses. When submitting this data, the `advertised_id` field must contain an ID of type Eddystone-UID. Any other ID type will result in an error.
+    "rotationPeriodExponent": 42, # Indicates the nominal period between each rotation of the beacon's ephemeral ID. "Nominal" because the beacon should randomize the actual interval. See [the spec at github](https://github.com/google/eddystone/tree/master/eddystone-eid) for details. This value corresponds to a power-of-two scaler on the beacon's clock: when the scaler value is K, the beacon will begin broadcasting a new ephemeral ID on average every 2^K seconds.
+    "initialClockValue": "A String", # The initial clock value of the beacon. The beacon's clock must have begun counting at this value immediately prior to transmitting this value to the resolving service. Significant delay in transmitting this value to the service risks registration or resolution failures. If a value is not provided, the default is zero.
+    "beaconEcdhPublicKey": "A String", # The beacon's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `service_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+    "initialEid": "A String", # An initial ephemeral ID calculated using the clock value submitted as `initial_clock_value`, and the secret key generated by the Diffie-Hellman key exchange using `service_ecdh_public_key` and `service_ecdh_public_key`. This initial EID value will be used by the service to confirm that the key exchange process was successful.
+    "serviceEcdhPublicKey": "A String", # The service's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `beacon_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+    "beaconIdentityKey": "A String", # The private key of the beacon. If this field is populated, `beacon_ecdh_public_key` and `service_ecdh_public_key` must not be populated.
+  },
+  "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates. When registering a beacon that broadcasts Eddystone-EID, this field should contain a "stable" Eddystone-UID that identifies the beacon and links it to its attachments. The stable Eddystone-UID is only used for administering the beacon.
     "type": "A String", # Specifies the identifier type. Required.
     "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
   },
@@ -272,8 +303,10 @@
   "properties": { # Properties of the beacon device, for example battery type or firmware version. Optional.
     "a_key": "A String",
   },
+  "provisioningKey": "A String", # Some beacons may require a user to provide an authorization key before changing any of its configuration (e.g. broadcast frames, transmit power). This field provides a place to store and control access to that key. This field is populated in responses to `GET /v1beta1/beacons/3!beaconId` from users with write access to the given beacon. That is to say: If the user is authorized to write the beacon's confidential data in the service, the service considers them authorized to configure the beacon. Note that this key grants nothing on the service, only on the beacon itself.
 }
 
+  projectId: string, The project id of the project the beacon will be registered to. If the project id is not specified then the project making the request is used. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -285,12 +318,20 @@
     "indoorLevel": { # Indoor level, a human-readable string as returned by Google Maps APIs, useful to indicate which floor of a building a beacon is located on. # The indoor level information for this beacon, if known. As returned by the Google Maps API. Optional.
       "name": "A String", # The name of this level.
     },
-    "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wrapsdecimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-180.0, 180.0] and [-90.0, 90.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
+    "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wraps decimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-90.0, 90.0] and [-180.0, 180.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
       "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
       "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
     },
     "placeId": "A String", # The [Google Places API](/places/place-id) Place ID of the place where the beacon is deployed. This is given when the beacon is registered or updated, not automatically detected in any way. Optional.
-    "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates.
+    "ephemeralIdRegistration": { # Write-only registration parameters for beacons using Eddystone-EID format. Two ways of securely registering an Eddystone-EID beacon with the service are supported: 1. Perform an ECDH key exchange via this API, including a previous call to `GET /v1beta1/eidparams`. In this case the fields `beacon_ecdh_public_key` and `service_ecdh_public_key` should be populated and `beacon_identity_key` should not be populated. This method ensures that only the two parties in the ECDH key exchange can compute the identity key, which becomes a secret between them. 2. Derive or obtain the beacon's identity key via other secure means (perhaps an ECDH key exchange between the beacon and a mobile device or any other secure method), and then submit the resulting identity key to the service. In this case `beacon_identity_key` field should be populated, and neither of `beacon_ecdh_public_key` nor `service_ecdh_public_key` fields should be. The security of this method depends on how securely the parties involved (in particular the bluetooth client) handle the identity key, and obviously on how securely the identity key was generated. See [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub. # Write-only registration parameters for beacons using Eddystone-EID (remotely resolved ephemeral ID) format. This information will not be populated in API responses. When submitting this data, the `advertised_id` field must contain an ID of type Eddystone-UID. Any other ID type will result in an error.
+      "rotationPeriodExponent": 42, # Indicates the nominal period between each rotation of the beacon's ephemeral ID. "Nominal" because the beacon should randomize the actual interval. See [the spec at github](https://github.com/google/eddystone/tree/master/eddystone-eid) for details. This value corresponds to a power-of-two scaler on the beacon's clock: when the scaler value is K, the beacon will begin broadcasting a new ephemeral ID on average every 2^K seconds.
+      "initialClockValue": "A String", # The initial clock value of the beacon. The beacon's clock must have begun counting at this value immediately prior to transmitting this value to the resolving service. Significant delay in transmitting this value to the service risks registration or resolution failures. If a value is not provided, the default is zero.
+      "beaconEcdhPublicKey": "A String", # The beacon's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `service_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+      "initialEid": "A String", # An initial ephemeral ID calculated using the clock value submitted as `initial_clock_value`, and the secret key generated by the Diffie-Hellman key exchange using `service_ecdh_public_key` and `service_ecdh_public_key`. This initial EID value will be used by the service to confirm that the key exchange process was successful.
+      "serviceEcdhPublicKey": "A String", # The service's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `beacon_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+      "beaconIdentityKey": "A String", # The private key of the beacon. If this field is populated, `beacon_ecdh_public_key` and `service_ecdh_public_key` must not be populated.
+    },
+    "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates. When registering a beacon that broadcasts Eddystone-EID, this field should contain a "stable" Eddystone-UID that identifies the beacon and links it to its attachments. The stable Eddystone-UID is only used for administering the beacon.
       "type": "A String", # Specifies the identifier type. Required.
       "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
     },
@@ -299,12 +340,13 @@
     "properties": { # Properties of the beacon device, for example battery type or firmware version. Optional.
       "a_key": "A String",
     },
+    "provisioningKey": "A String", # Some beacons may require a user to provide an authorization key before changing any of its configuration (e.g. broadcast frames, transmit power). This field provides a place to store and control access to that key. This field is populated in responses to `GET /v1beta1/beacons/3!beaconId` from users with write access to the given beacon. That is to say: If the user is authorized to write the beacon's confidential data in the service, the service considers them authorized to configure the beacon. Note that this key grants nothing on the service, only on the beacon itself.
   }</pre>
 </div>
 
 <div class="method">
-    <code class="details" id="update">update(beaconName, body, x__xgafv=None)</code>
-  <pre>Updates the information about the specified beacon. **Any field that you do not populate in the submitted beacon will be permanently erased**, so you should follow the "read, modify, write" pattern to avoid inadvertently destroying data. Changes to the beacon status via this method will be silently ignored. To update beacon status, use the separate methods on this API for (de)activation and decommissioning.
+    <code class="details" id="update">update(beaconName, body, projectId=None, x__xgafv=None)</code>
+  <pre>Updates the information about the specified beacon. **Any field that you do not populate in the submitted beacon will be permanently erased**, so you should follow the "read, modify, write" pattern to avoid inadvertently destroying data. Changes to the beacon status via this method will be silently ignored. To update beacon status, use the separate methods on this API for activation, deactivation, and decommissioning. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
   beaconName: string, Resource name of this beacon. A beacon name has the format "beacons/N!beaconId" where the beaconId is the base16 ID broadcast by the beacon and N is a code for the beacon's type. Possible values are `3` for Eddystone, `1` for iBeacon, or `5` for AltBeacon. This field must be left empty when registering. After reading a beacon, clients can use the name for future operations. (required)
@@ -317,12 +359,20 @@
   "indoorLevel": { # Indoor level, a human-readable string as returned by Google Maps APIs, useful to indicate which floor of a building a beacon is located on. # The indoor level information for this beacon, if known. As returned by the Google Maps API. Optional.
     "name": "A String", # The name of this level.
   },
-  "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wrapsdecimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-180.0, 180.0] and [-90.0, 90.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
+  "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wraps decimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-90.0, 90.0] and [-180.0, 180.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
     "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
     "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
   },
   "placeId": "A String", # The [Google Places API](/places/place-id) Place ID of the place where the beacon is deployed. This is given when the beacon is registered or updated, not automatically detected in any way. Optional.
-  "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates.
+  "ephemeralIdRegistration": { # Write-only registration parameters for beacons using Eddystone-EID format. Two ways of securely registering an Eddystone-EID beacon with the service are supported: 1. Perform an ECDH key exchange via this API, including a previous call to `GET /v1beta1/eidparams`. In this case the fields `beacon_ecdh_public_key` and `service_ecdh_public_key` should be populated and `beacon_identity_key` should not be populated. This method ensures that only the two parties in the ECDH key exchange can compute the identity key, which becomes a secret between them. 2. Derive or obtain the beacon's identity key via other secure means (perhaps an ECDH key exchange between the beacon and a mobile device or any other secure method), and then submit the resulting identity key to the service. In this case `beacon_identity_key` field should be populated, and neither of `beacon_ecdh_public_key` nor `service_ecdh_public_key` fields should be. The security of this method depends on how securely the parties involved (in particular the bluetooth client) handle the identity key, and obviously on how securely the identity key was generated. See [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub. # Write-only registration parameters for beacons using Eddystone-EID (remotely resolved ephemeral ID) format. This information will not be populated in API responses. When submitting this data, the `advertised_id` field must contain an ID of type Eddystone-UID. Any other ID type will result in an error.
+    "rotationPeriodExponent": 42, # Indicates the nominal period between each rotation of the beacon's ephemeral ID. "Nominal" because the beacon should randomize the actual interval. See [the spec at github](https://github.com/google/eddystone/tree/master/eddystone-eid) for details. This value corresponds to a power-of-two scaler on the beacon's clock: when the scaler value is K, the beacon will begin broadcasting a new ephemeral ID on average every 2^K seconds.
+    "initialClockValue": "A String", # The initial clock value of the beacon. The beacon's clock must have begun counting at this value immediately prior to transmitting this value to the resolving service. Significant delay in transmitting this value to the service risks registration or resolution failures. If a value is not provided, the default is zero.
+    "beaconEcdhPublicKey": "A String", # The beacon's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `service_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+    "initialEid": "A String", # An initial ephemeral ID calculated using the clock value submitted as `initial_clock_value`, and the secret key generated by the Diffie-Hellman key exchange using `service_ecdh_public_key` and `service_ecdh_public_key`. This initial EID value will be used by the service to confirm that the key exchange process was successful.
+    "serviceEcdhPublicKey": "A String", # The service's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `beacon_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+    "beaconIdentityKey": "A String", # The private key of the beacon. If this field is populated, `beacon_ecdh_public_key` and `service_ecdh_public_key` must not be populated.
+  },
+  "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates. When registering a beacon that broadcasts Eddystone-EID, this field should contain a "stable" Eddystone-UID that identifies the beacon and links it to its attachments. The stable Eddystone-UID is only used for administering the beacon.
     "type": "A String", # Specifies the identifier type. Required.
     "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
   },
@@ -331,8 +381,10 @@
   "properties": { # Properties of the beacon device, for example battery type or firmware version. Optional.
     "a_key": "A String",
   },
+  "provisioningKey": "A String", # Some beacons may require a user to provide an authorization key before changing any of its configuration (e.g. broadcast frames, transmit power). This field provides a place to store and control access to that key. This field is populated in responses to `GET /v1beta1/beacons/3!beaconId` from users with write access to the given beacon. That is to say: If the user is authorized to write the beacon's confidential data in the service, the service considers them authorized to configure the beacon. Note that this key grants nothing on the service, only on the beacon itself.
 }
 
+  projectId: string, The project id of the beacon to update. If the project id is not specified then the project making the request is used. The project id must match the project that owns the beacon. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -344,12 +396,20 @@
     "indoorLevel": { # Indoor level, a human-readable string as returned by Google Maps APIs, useful to indicate which floor of a building a beacon is located on. # The indoor level information for this beacon, if known. As returned by the Google Maps API. Optional.
       "name": "A String", # The name of this level.
     },
-    "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wrapsdecimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-180.0, 180.0] and [-90.0, 90.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
+    "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair of doubles representing degrees latitude and degrees longitude. Unless specified otherwise, this must conform to the WGS84 standard. Values must be within normalized ranges. Example of normalization code in Python: def NormalizeLongitude(longitude): """Wraps decimal degrees longitude to [-180.0, 180.0].""" q, r = divmod(longitude, 360.0) if r > 180.0 or (r == 180.0 and q <= -1.0): return r - 360.0 return r def NormalizeLatLng(latitude, longitude): """Wraps decimal degrees latitude and longitude to [-90.0, 90.0] and [-180.0, 180.0], respectively.""" r = latitude % 360.0 if r = 270.0: return r - 360, NormalizeLongitude(longitude) else: return 180 - r, NormalizeLongitude(longitude + 180.0) assert 180.0 == NormalizeLongitude(180.0) assert -180.0 == NormalizeLongitude(-180.0) assert -179.0 == NormalizeLongitude(181.0) assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0) assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0) assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0) assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0) assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0) assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0) assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0) assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0) assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0) # The location of the beacon, expressed as a latitude and longitude pair. This location is given when the beacon is registered or updated. It does not necessarily indicate the actual current location of the beacon. Optional.
       "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
       "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
     },
     "placeId": "A String", # The [Google Places API](/places/place-id) Place ID of the place where the beacon is deployed. This is given when the beacon is registered or updated, not automatically detected in any way. Optional.
-    "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates.
+    "ephemeralIdRegistration": { # Write-only registration parameters for beacons using Eddystone-EID format. Two ways of securely registering an Eddystone-EID beacon with the service are supported: 1. Perform an ECDH key exchange via this API, including a previous call to `GET /v1beta1/eidparams`. In this case the fields `beacon_ecdh_public_key` and `service_ecdh_public_key` should be populated and `beacon_identity_key` should not be populated. This method ensures that only the two parties in the ECDH key exchange can compute the identity key, which becomes a secret between them. 2. Derive or obtain the beacon's identity key via other secure means (perhaps an ECDH key exchange between the beacon and a mobile device or any other secure method), and then submit the resulting identity key to the service. In this case `beacon_identity_key` field should be populated, and neither of `beacon_ecdh_public_key` nor `service_ecdh_public_key` fields should be. The security of this method depends on how securely the parties involved (in particular the bluetooth client) handle the identity key, and obviously on how securely the identity key was generated. See [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub. # Write-only registration parameters for beacons using Eddystone-EID (remotely resolved ephemeral ID) format. This information will not be populated in API responses. When submitting this data, the `advertised_id` field must contain an ID of type Eddystone-UID. Any other ID type will result in an error.
+      "rotationPeriodExponent": 42, # Indicates the nominal period between each rotation of the beacon's ephemeral ID. "Nominal" because the beacon should randomize the actual interval. See [the spec at github](https://github.com/google/eddystone/tree/master/eddystone-eid) for details. This value corresponds to a power-of-two scaler on the beacon's clock: when the scaler value is K, the beacon will begin broadcasting a new ephemeral ID on average every 2^K seconds.
+      "initialClockValue": "A String", # The initial clock value of the beacon. The beacon's clock must have begun counting at this value immediately prior to transmitting this value to the resolving service. Significant delay in transmitting this value to the service risks registration or resolution failures. If a value is not provided, the default is zero.
+      "beaconEcdhPublicKey": "A String", # The beacon's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `service_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+      "initialEid": "A String", # An initial ephemeral ID calculated using the clock value submitted as `initial_clock_value`, and the secret key generated by the Diffie-Hellman key exchange using `service_ecdh_public_key` and `service_ecdh_public_key`. This initial EID value will be used by the service to confirm that the key exchange process was successful.
+      "serviceEcdhPublicKey": "A String", # The service's public key used for the Elliptic curve Diffie-Hellman key exchange. When this field is populated, `beacon_ecdh_public_key` must also be populated, and `beacon_identity_key` must not be.
+      "beaconIdentityKey": "A String", # The private key of the beacon. If this field is populated, `beacon_ecdh_public_key` and `service_ecdh_public_key` must not be populated.
+    },
+    "advertisedId": { # Defines a unique identifier of a beacon as broadcast by the device. # The identifier of a beacon as advertised by it. This field must be populated when registering. It may be empty when updating a beacon record because it is ignored in updates. When registering a beacon that broadcasts Eddystone-EID, this field should contain a "stable" Eddystone-UID that identifies the beacon and links it to its attachments. The stable Eddystone-UID is only used for administering the beacon.
       "type": "A String", # Specifies the identifier type. Required.
       "id": "A String", # The actual beacon identifier, as broadcast by the beacon hardware. Must be [base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP requests, and will be so encoded (with padding) in responses. The base64 encoding should be of the binary byte-stream and not any textual (such as hex) representation thereof. Required.
     },
@@ -358,6 +418,7 @@
     "properties": { # Properties of the beacon device, for example battery type or firmware version. Optional.
       "a_key": "A String",
     },
+    "provisioningKey": "A String", # Some beacons may require a user to provide an authorization key before changing any of its configuration (e.g. broadcast frames, transmit power). This field provides a place to store and control access to that key. This field is populated in responses to `GET /v1beta1/beacons/3!beaconId` from users with write access to the given beacon. That is to say: If the user is authorized to write the beacon's confidential data in the service, the service considers them authorized to configure the beacon. Note that this key grants nothing on the service, only on the beacon itself.
   }</pre>
 </div>
 
diff --git a/docs/dyn/proximitybeacon_v1beta1.html b/docs/dyn/proximitybeacon_v1beta1.html
index e874838..539176c 100644
--- a/docs/dyn/proximitybeacon_v1beta1.html
+++ b/docs/dyn/proximitybeacon_v1beta1.html
@@ -90,6 +90,11 @@
 <p class="firstline">Returns the namespaces Resource.</p>
 
 <p class="toc_element">
+  <code><a href="proximitybeacon_v1beta1.v1beta1.html">v1beta1()</a></code>
+</p>
+<p class="firstline">Returns the v1beta1 Resource.</p>
+
+<p class="toc_element">
   <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
 <p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
 <h3>Method Details</h3>
diff --git a/docs/dyn/proximitybeacon_v1beta1.namespaces.html b/docs/dyn/proximitybeacon_v1beta1.namespaces.html
index cdde87b..50ef262 100644
--- a/docs/dyn/proximitybeacon_v1beta1.namespaces.html
+++ b/docs/dyn/proximitybeacon_v1beta1.namespaces.html
@@ -75,14 +75,18 @@
 <h1><a href="proximitybeacon_v1beta1.html">Google Proximity Beacon API</a> . <a href="proximitybeacon_v1beta1.namespaces.html">namespaces</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#list">list(x__xgafv=None)</a></code></p>
-<p class="firstline">Lists all attachment namespaces owned by your Google Developers Console project. Attachment data associated with a beacon must include a namespaced type, and the namespace must be owned by your project.</p>
+  <code><a href="#list">list(projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists all attachment namespaces owned by your Google Developers Console project. Attachment data associated with a beacon must include a namespaced type, and the namespace must be owned by your project. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project.</p>
+<p class="toc_element">
+  <code><a href="#update">update(namespaceName, body, projectId=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates the information about the specified namespace. Only the namespace visibility can be updated.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(x__xgafv=None)</code>
-  <pre>Lists all attachment namespaces owned by your Google Developers Console project. Attachment data associated with a beacon must include a namespaced type, and the namespace must be owned by your project.
+    <code class="details" id="list">list(projectId=None, x__xgafv=None)</code>
+  <pre>Lists all attachment namespaces owned by your Google Developers Console project. Attachment data associated with a beacon must include a namespaced type, and the namespace must be owned by your project. Authenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2) from a signed-in user with **viewer**, **Is owner** or **Can edit** permissions in the Google Developers Console project.
 
 Args:
+  projectId: string, The project id to list namespaces under. Optional.
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -98,4 +102,30 @@
   }</pre>
 </div>
 
+<div class="method">
+    <code class="details" id="update">update(namespaceName, body, projectId=None, x__xgafv=None)</code>
+  <pre>Updates the information about the specified namespace. Only the namespace visibility can be updated.
+
+Args:
+  namespaceName: string, Resource name of this namespace. Namespaces names have the format: namespaces/namespace. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # An attachment namespace defines read and write access for all the attachments created under it. Each namespace is globally unique, and owned by one project which is the only project that can create attachments under it.
+  "namespaceName": "A String", # Resource name of this namespace. Namespaces names have the format: namespaces/namespace.
+  "servingVisibility": "A String", # Specifies what clients may receive attachments under this namespace via `beaconinfo.getforobserved`.
+}
+
+  projectId: string, The project id of the namespace to update. If the project id is not specified then the project making the request is used. The project id must match the project that owns the beacon. Optional.
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # An attachment namespace defines read and write access for all the attachments created under it. Each namespace is globally unique, and owned by one project which is the only project that can create attachments under it.
+    "namespaceName": "A String", # Resource name of this namespace. Namespaces names have the format: namespaces/namespace.
+    "servingVisibility": "A String", # Specifies what clients may receive attachments under this namespace via `beaconinfo.getforobserved`.
+  }</pre>
+</div>
+
 </body></html>
\ No newline at end of file
diff --git a/docs/dyn/proximitybeacon_v1beta1.v1beta1.html b/docs/dyn/proximitybeacon_v1beta1.v1beta1.html
new file mode 100644
index 0000000..68e8c30
--- /dev/null
+++ b/docs/dyn/proximitybeacon_v1beta1.v1beta1.html
@@ -0,0 +1,98 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="proximitybeacon_v1beta1.html">Google Proximity Beacon API</a> . <a href="proximitybeacon_v1beta1.v1beta1.html">v1beta1</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#getEidparams">getEidparams(x__xgafv=None)</a></code></p>
+<p class="firstline">Gets the Proximity Beacon API's current public key and associated parameters used to initiate the Diffie-Hellman key exchange required to register a beacon that broadcasts the Eddystone-EID format. This key changes periodically; clients may cache it and re-use the same public key to provision and register multiple beacons. However, clients should be prepared to refresh this key when they encounter an error registering an Eddystone-EID beacon.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="getEidparams">getEidparams(x__xgafv=None)</code>
+  <pre>Gets the Proximity Beacon API's current public key and associated parameters used to initiate the Diffie-Hellman key exchange required to register a beacon that broadcasts the Eddystone-EID format. This key changes periodically; clients may cache it and re-use the same public key to provision and register multiple beacons. However, clients should be prepared to refresh this key when they encounter an error registering an Eddystone-EID beacon.
+
+Args:
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    { # Information a client needs to provision and register beacons that broadcast Eddystone-EID format beacon IDs, using Elliptic curve Diffie-Hellman key exchange. See [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub.
+    "minRotationPeriodExponent": 42, # Indicates the minimum rotation period supported by the service. See EddystoneEidRegistration.rotation_period_exponent
+    "maxRotationPeriodExponent": 42, # Indicates the maximum rotation period supported by the service. See EddystoneEidRegistration.rotation_period_exponent
+    "serviceEcdhPublicKey": "A String", # The beacon service's public key for use by a beacon to derive its Identity Key using Elliptic Curve Diffie-Hellman key exchange.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/pubsub_v1.projects.subscriptions.html b/docs/dyn/pubsub_v1.projects.subscriptions.html
index 1aa540b..40efcff 100644
--- a/docs/dyn/pubsub_v1.projects.subscriptions.html
+++ b/docs/dyn/pubsub_v1.projects.subscriptions.html
@@ -79,7 +79,7 @@
 <p class="firstline">Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages from the subscription. Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error.</p>
 <p class="toc_element">
   <code><a href="#create">create(name, body, x__xgafv=None)</a></code></p>
-<p class="firstline">Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.</p>
+<p class="firstline">Creates a subscription to a given topic. If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(subscription, x__xgafv=None)</a></code></p>
 <p class="firstline">Deletes an existing subscription. All pending messages in the subscription are immediately dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription, or its topic unless the same topic is specified.</p>
@@ -88,7 +88,7 @@
 <p class="firstline">Gets the configuration details of a subscription.</p>
 <p class="toc_element">
   <code><a href="#getIamPolicy">getIamPolicy(resource, x__xgafv=None)</a></code></p>
-<p class="firstline">Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.</p>
+<p class="firstline">Gets the access control policy for a `resource`. Returns an empty policy if the resource exists and does not have a policy set.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists matching subscriptions.</p>
@@ -137,7 +137,7 @@
 
 <div class="method">
     <code class="details" id="create">create(name, body, x__xgafv=None)</code>
-  <pre>Creates a subscription to a given topic for a given subscriber. If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.
+  <pre>Creates a subscription to a given topic. If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`. If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic.
 
 Args:
   name: string, The name of the subscription. It must have the format `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3 and 255 characters in length, and it must not start with `"goog"`. (required)
@@ -146,7 +146,7 @@
 
 { # A subscription resource.
   "topic": "A String", # The name of the topic from which this subscription is receiving messages. The value of this field will be `_deleted-topic_` if the topic has been deleted.
-  "ackDeadlineSeconds": 42, # This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull delivery this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id`. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.
+  "ackDeadlineSeconds": 42, # This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull subscriptions, this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id` if using pull. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.
   "pushConfig": { # Configuration for a push delivery endpoint. # If push delivery is used with this subscription, this field is used to configure it. An empty `pushConfig` signifies that the subscriber will pull and ack messages using API methods.
     "attributes": { # Endpoint configuration attributes. Every endpoint has a set of API supported attributes that can be used to control different aspects of the message delivery. The currently supported attribute is `x-goog-version`, which you can use to change the format of the push message. This attribute indicates the version of the data expected by the endpoint. This controls the shape of the envelope (i.e. its fields and metadata). The endpoint version is based on the version of the Pub/Sub API. If not present during the `CreateSubscription` call, it will default to the version of the API used to make such call. If not present during a `ModifyPushConfig` call, its value will not be changed. `GetSubscription` calls will always return a valid version, even if the subscription was created without this attribute. The possible values for this attribute are: * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
       "a_key": "A String",
@@ -163,7 +163,7 @@
 
     { # A subscription resource.
     "topic": "A String", # The name of the topic from which this subscription is receiving messages. The value of this field will be `_deleted-topic_` if the topic has been deleted.
-    "ackDeadlineSeconds": 42, # This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull delivery this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id`. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.
+    "ackDeadlineSeconds": 42, # This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull subscriptions, this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id` if using pull. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.
     "pushConfig": { # Configuration for a push delivery endpoint. # If push delivery is used with this subscription, this field is used to configure it. An empty `pushConfig` signifies that the subscriber will pull and ack messages using API methods.
       "attributes": { # Endpoint configuration attributes. Every endpoint has a set of API supported attributes that can be used to control different aspects of the message delivery. The currently supported attribute is `x-goog-version`, which you can use to change the format of the push message. This attribute indicates the version of the data expected by the endpoint. This controls the shape of the envelope (i.e. its fields and metadata). The endpoint version is based on the version of the Pub/Sub API. If not present during the `CreateSubscription` call, it will default to the version of the API used to make such call. If not present during a `ModifyPushConfig` call, its value will not be changed. `GetSubscription` calls will always return a valid version, even if the subscription was created without this attribute. The possible values for this attribute are: * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
         "a_key": "A String",
@@ -202,7 +202,7 @@
 
     { # A subscription resource.
     "topic": "A String", # The name of the topic from which this subscription is receiving messages. The value of this field will be `_deleted-topic_` if the topic has been deleted.
-    "ackDeadlineSeconds": 42, # This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull delivery this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id`. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.
+    "ackDeadlineSeconds": 42, # This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull subscriptions, this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id` if using pull. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.
     "pushConfig": { # Configuration for a push delivery endpoint. # If push delivery is used with this subscription, this field is used to configure it. An empty `pushConfig` signifies that the subscriber will pull and ack messages using API methods.
       "attributes": { # Endpoint configuration attributes. Every endpoint has a set of API supported attributes that can be used to control different aspects of the message delivery. The currently supported attribute is `x-goog-version`, which you can use to change the format of the push message. This attribute indicates the version of the data expected by the endpoint. This controls the shape of the envelope (i.e. its fields and metadata). The endpoint version is based on the version of the Pub/Sub API. If not present during the `CreateSubscription` call, it will default to the version of the API used to make such call. If not present during a `ModifyPushConfig` call, its value will not be changed. `GetSubscription` calls will always return a valid version, even if the subscription was created without this attribute. The possible values for this attribute are: * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
         "a_key": "A String",
@@ -215,26 +215,26 @@
 
 <div class="method">
     <code class="details" id="getIamPolicy">getIamPolicy(resource, x__xgafv=None)</code>
-  <pre>Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.
+  <pre>Gets the access control policy for a `resource`. Returns an empty policy if the resource exists and does not have a policy set.
 
 Args:
-  resource: string, REQUIRED: The resource for which policy is being requested. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`. The format for the path specified in this value is resource specific and is specified in the documentation for the respective GetIamPolicy rpc. (required)
+  resource: string, REQUIRED: The resource for which the policy is being requested. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `getIamPolicy` documentation. (required)
   x__xgafv: string, V1 error format.
 
 Returns:
   An object of the form:
 
-    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
+    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
     "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
-        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
           "A String",
         ],
       },
     ],
     "version": 42, # Version of the `Policy`. The default version is 0.
-    "etag": "A String", # Can be used to perform a read-modify-write.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
   }</pre>
 </div>
 
@@ -256,7 +256,7 @@
     "subscriptions": [ # The subscriptions that match the request.
       { # A subscription resource.
         "topic": "A String", # The name of the topic from which this subscription is receiving messages. The value of this field will be `_deleted-topic_` if the topic has been deleted.
-        "ackDeadlineSeconds": 42, # This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull delivery this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id`. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.
+        "ackDeadlineSeconds": 42, # This value is the maximum time after a subscriber receives a message before the subscriber should acknowledge the message. After message delivery but before the ack deadline expires and before the message is acknowledged, it is an outstanding message and will not be delivered again during that time (on a best-effort basis). For pull subscriptions, this value is used as the initial value for the ack deadline. To override this value for a given message, call `ModifyAckDeadline` with the corresponding `ack_id` if using pull. For push delivery, this value is also used to set the request timeout for the call to the push endpoint. If the subscriber never acknowledges the message, the Pub/Sub system will eventually redeliver the message. If this parameter is not set, the default value of 10 seconds is used.
         "pushConfig": { # Configuration for a push delivery endpoint. # If push delivery is used with this subscription, this field is used to configure it. An empty `pushConfig` signifies that the subscriber will pull and ack messages using API methods.
           "attributes": { # Endpoint configuration attributes. Every endpoint has a set of API supported attributes that can be used to control different aspects of the message delivery. The currently supported attribute is `x-goog-version`, which you can use to change the format of the push message. This attribute indicates the version of the data expected by the endpoint. This controls the shape of the envelope (i.e. its fields and metadata). The endpoint version is based on the version of the Pub/Sub API. If not present during the `CreateSubscription` call, it will default to the version of the API used to make such call. If not present during a `ModifyPushConfig` call, its value will not be changed. `GetSubscription` calls will always return a valid version, even if the subscription was created without this attribute. The possible values for this attribute are: * `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API. * `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.
             "a_key": "A String",
@@ -376,22 +376,22 @@
   <pre>Sets the access control policy on the specified resource. Replaces any existing policy.
 
 Args:
-  resource: string, REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`. The format for the path specified in this value is resource specific and is specified in the documentation for the respective SetIamPolicy rpc. (required)
+  resource: string, REQUIRED: The resource for which the policy is being specified. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `setIamPolicy` documentation. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
 { # Request message for `SetIamPolicy` method.
-    "policy": { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.
+    "policy": { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.
       "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
         { # Associates `members` with a `role`.
           "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
-          "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
+          "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
             "A String",
           ],
         },
       ],
       "version": 42, # Version of the `Policy`. The default version is 0.
-      "etag": "A String", # Can be used to perform a read-modify-write.
+      "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
     },
   }
 
@@ -400,17 +400,17 @@
 Returns:
   An object of the form:
 
-    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
+    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
     "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
-        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
           "A String",
         ],
       },
     ],
     "version": 42, # Version of the `Policy`. The default version is 0.
-    "etag": "A String", # Can be used to perform a read-modify-write.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
   }</pre>
 </div>
 
@@ -419,12 +419,12 @@
   <pre>Returns permissions that a caller has on the specified resource.
 
 Args:
-  resource: string, REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`. The format for the path specified in this value is resource specific and is specified in the documentation for the respective TestIamPermissions rpc. (required)
+  resource: string, REQUIRED: The resource for which the policy detail is being requested. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `testIamPermissions` documentation. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
 { # Request message for `TestIamPermissions` method.
-    "permissions": [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed.
+    "permissions": [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see IAM Overview.
       "A String",
     ],
   }
diff --git a/docs/dyn/pubsub_v1.projects.topics.html b/docs/dyn/pubsub_v1.projects.topics.html
index 828c898..a199f91 100644
--- a/docs/dyn/pubsub_v1.projects.topics.html
+++ b/docs/dyn/pubsub_v1.projects.topics.html
@@ -90,7 +90,7 @@
 <p class="firstline">Gets the configuration of a topic.</p>
 <p class="toc_element">
   <code><a href="#getIamPolicy">getIamPolicy(resource, x__xgafv=None)</a></code></p>
-<p class="firstline">Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.</p>
+<p class="firstline">Gets the access control policy for a `resource`. Returns an empty policy if the resource exists and does not have a policy set.</p>
 <p class="toc_element">
   <code><a href="#list">list(project, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Lists matching topics.</p>
@@ -163,26 +163,26 @@
 
 <div class="method">
     <code class="details" id="getIamPolicy">getIamPolicy(resource, x__xgafv=None)</code>
-  <pre>Gets the access control policy for a `resource`. Is empty if the policy or the resource does not exist.
+  <pre>Gets the access control policy for a `resource`. Returns an empty policy if the resource exists and does not have a policy set.
 
 Args:
-  resource: string, REQUIRED: The resource for which policy is being requested. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`. The format for the path specified in this value is resource specific and is specified in the documentation for the respective GetIamPolicy rpc. (required)
+  resource: string, REQUIRED: The resource for which the policy is being requested. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `getIamPolicy` documentation. (required)
   x__xgafv: string, V1 error format.
 
 Returns:
   An object of the form:
 
-    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
+    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
     "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
-        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
           "A String",
         ],
       },
     ],
     "version": 42, # Version of the `Policy`. The default version is 0.
-    "etag": "A String", # Can be used to perform a read-modify-write.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
   }</pre>
 </div>
 
@@ -262,22 +262,22 @@
   <pre>Sets the access control policy on the specified resource. Replaces any existing policy.
 
 Args:
-  resource: string, REQUIRED: The resource for which policy is being specified. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`. The format for the path specified in this value is resource specific and is specified in the documentation for the respective SetIamPolicy rpc. (required)
+  resource: string, REQUIRED: The resource for which the policy is being specified. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `setIamPolicy` documentation. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
 { # Request message for `SetIamPolicy` method.
-    "policy": { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.
+    "policy": { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam). # REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects) might reject them.
       "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
         { # Associates `members` with a `role`.
           "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
-          "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
+          "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
             "A String",
           ],
         },
       ],
       "version": 42, # Version of the `Policy`. The default version is 0.
-      "etag": "A String", # Can be used to perform a read-modify-write.
+      "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
     },
   }
 
@@ -286,17 +286,17 @@
 Returns:
   An object of the form:
 
-    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com"] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
+    { # Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies for Cloud Platform resources. A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of permissions defined by IAM. **Example** { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer", "members": ["user:sean@example.com"] } ] } For a description of IAM and its features, see the [IAM developer's guide](https://cloud.google.com/iam).
     "bindings": [ # Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same `role`. `bindings` with no members will result in an error.
       { # Associates `members` with a `role`.
         "role": "A String", # Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`. Required
-        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following formats: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
+        "members": [ # Specifies the identities requesting access for a Cloud Platform resource. `members` can have the following values: * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google account. * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google account or a service account. * `user:{emailid}`: An email address that represents a specific Google account. For example, `alice@gmail.com` or `joe@example.com`. * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-app@appspot.gserviceaccount.com`. * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`. * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example, `google.com` or `example.com`.
           "A String",
         ],
       },
     ],
     "version": 42, # Version of the `Policy`. The default version is 0.
-    "etag": "A String", # Can be used to perform a read-modify-write.
+    "etag": "A String", # `etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned in the response to `getIamPolicy`, and systems are expected to put that etag in the request to `setIamPolicy` to ensure that their change will be applied to the same version of the policy. If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten blindly.
   }</pre>
 </div>
 
@@ -305,12 +305,12 @@
   <pre>Returns permissions that a caller has on the specified resource.
 
 Args:
-  resource: string, REQUIRED: The resource for which policy detail is being requested. `resource` is usually specified as a path, such as, `projects/{project}/zones/{zone}/disks/{disk}`. The format for the path specified in this value is resource specific and is specified in the documentation for the respective TestIamPermissions rpc. (required)
+  resource: string, REQUIRED: The resource for which the policy detail is being requested. `resource` is usually specified as a path, such as `projects/*project*/zones/*zone*/disks/*disk*`. The format for the path specified in this value is resource specific and is specified in the `testIamPermissions` documentation. (required)
   body: object, The request body. (required)
     The object takes the form of:
 
 { # Request message for `TestIamPermissions` method.
-    "permissions": [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed.
+    "permissions": [ # The set of permissions to check for the `resource`. Permissions with wildcards (such as '*' or 'storage.*') are not allowed. For more information see IAM Overview.
       "A String",
     ],
   }
diff --git a/docs/dyn/reseller_v1.subscriptions.html b/docs/dyn/reseller_v1.subscriptions.html
index a1b4003..c95ca0a 100644
--- a/docs/dyn/reseller_v1.subscriptions.html
+++ b/docs/dyn/reseller_v1.subscriptions.html
@@ -124,20 +124,13 @@
         "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
         "renewalType": "A String", # Subscription renewal type.
       },
-      "skuId": "A String", # Name of the sku for which this subscription is purchased.
-      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+      "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+      "customerDomain": "A String", # Primary domain name of the customer
       "trialSettings": { # Trial Settings of the subscription.
         "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
         "isInTrial": True or False, # Whether the subscription is in trial.
       },
-      "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-          # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-          # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-          # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-          # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-          # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-        "A String",
-      ],
+      "skuId": "A String", # Name of the sku for which this subscription is purchased.
       "resourceUiUrl": "A String", # Ui url for subscription resource.
       "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
         "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -146,6 +139,7 @@
         "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
       },
       "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
       "transferInfo": { # Transfer related information for the subscription.
         "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
         "minimumTransferableSeats": 42,
@@ -160,6 +154,14 @@
         "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
       },
       "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+      "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+          # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+          # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+          # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+          # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+          # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+        "A String",
+      ],
       "subscriptionId": "A String", # The id of the subscription.
       "billingMethod": "A String", # Billing method of this subscription.
       "customerId": "A String", # The id of the customer to whom the subscription belongs.
@@ -178,6 +180,7 @@
 
 { # JSON template for the ChangePlan rpc request.
     "planName": "A String", # Name of the plan to change to.
+    "dealCode": "A String", # External name of the deal code applicable for the subscription. This field is optional. If missing, the deal price plan won't be used.
     "kind": "subscriptions#changePlanRequest", # Identifies the resource as a subscription change plan request.
     "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
       "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -197,20 +200,13 @@
         "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
         "renewalType": "A String", # Subscription renewal type.
       },
-      "skuId": "A String", # Name of the sku for which this subscription is purchased.
-      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+      "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+      "customerDomain": "A String", # Primary domain name of the customer
       "trialSettings": { # Trial Settings of the subscription.
         "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
         "isInTrial": True or False, # Whether the subscription is in trial.
       },
-      "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-          # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-          # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-          # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-          # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-          # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-        "A String",
-      ],
+      "skuId": "A String", # Name of the sku for which this subscription is purchased.
       "resourceUiUrl": "A String", # Ui url for subscription resource.
       "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
         "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -219,6 +215,7 @@
         "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
       },
       "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
       "transferInfo": { # Transfer related information for the subscription.
         "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
         "minimumTransferableSeats": 42,
@@ -233,6 +230,14 @@
         "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
       },
       "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+      "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+          # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+          # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+          # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+          # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+          # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+        "A String",
+      ],
       "subscriptionId": "A String", # The id of the subscription.
       "billingMethod": "A String", # Billing method of this subscription.
       "customerId": "A String", # The id of the customer to whom the subscription belongs.
@@ -263,20 +268,13 @@
         "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
         "renewalType": "A String", # Subscription renewal type.
       },
-      "skuId": "A String", # Name of the sku for which this subscription is purchased.
-      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+      "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+      "customerDomain": "A String", # Primary domain name of the customer
       "trialSettings": { # Trial Settings of the subscription.
         "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
         "isInTrial": True or False, # Whether the subscription is in trial.
       },
-      "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-          # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-          # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-          # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-          # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-          # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-        "A String",
-      ],
+      "skuId": "A String", # Name of the sku for which this subscription is purchased.
       "resourceUiUrl": "A String", # Ui url for subscription resource.
       "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
         "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -285,6 +283,7 @@
         "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
       },
       "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
       "transferInfo": { # Transfer related information for the subscription.
         "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
         "minimumTransferableSeats": 42,
@@ -299,6 +298,14 @@
         "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
       },
       "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+      "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+          # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+          # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+          # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+          # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+          # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+        "A String",
+      ],
       "subscriptionId": "A String", # The id of the subscription.
       "billingMethod": "A String", # Billing method of this subscription.
       "customerId": "A String", # The id of the customer to whom the subscription belongs.
@@ -331,20 +338,13 @@
         "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
         "renewalType": "A String", # Subscription renewal type.
       },
-      "skuId": "A String", # Name of the sku for which this subscription is purchased.
-      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+      "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+      "customerDomain": "A String", # Primary domain name of the customer
       "trialSettings": { # Trial Settings of the subscription.
         "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
         "isInTrial": True or False, # Whether the subscription is in trial.
       },
-      "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-          # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-          # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-          # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-          # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-          # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-        "A String",
-      ],
+      "skuId": "A String", # Name of the sku for which this subscription is purchased.
       "resourceUiUrl": "A String", # Ui url for subscription resource.
       "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
         "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -353,6 +353,7 @@
         "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
       },
       "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
       "transferInfo": { # Transfer related information for the subscription.
         "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
         "minimumTransferableSeats": 42,
@@ -367,6 +368,14 @@
         "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
       },
       "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+      "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+          # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+          # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+          # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+          # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+          # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+        "A String",
+      ],
       "subscriptionId": "A String", # The id of the subscription.
       "billingMethod": "A String", # Billing method of this subscription.
       "customerId": "A String", # The id of the customer to whom the subscription belongs.
@@ -405,20 +414,13 @@
         "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
         "renewalType": "A String", # Subscription renewal type.
       },
-      "skuId": "A String", # Name of the sku for which this subscription is purchased.
-      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+      "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+      "customerDomain": "A String", # Primary domain name of the customer
       "trialSettings": { # Trial Settings of the subscription.
         "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
         "isInTrial": True or False, # Whether the subscription is in trial.
       },
-      "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-          # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-          # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-          # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-          # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-          # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-        "A String",
-      ],
+      "skuId": "A String", # Name of the sku for which this subscription is purchased.
       "resourceUiUrl": "A String", # Ui url for subscription resource.
       "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
         "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -427,6 +429,7 @@
         "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
       },
       "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
       "transferInfo": { # Transfer related information for the subscription.
         "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
         "minimumTransferableSeats": 42,
@@ -441,6 +444,14 @@
         "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
       },
       "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+      "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+          # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+          # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+          # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+          # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+          # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+        "A String",
+      ],
       "subscriptionId": "A String", # The id of the subscription.
       "billingMethod": "A String", # Billing method of this subscription.
       "customerId": "A String", # The id of the customer to whom the subscription belongs.
@@ -461,20 +472,13 @@
       "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
       "renewalType": "A String", # Subscription renewal type.
     },
-    "skuId": "A String", # Name of the sku for which this subscription is purchased.
-    "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+    "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+    "customerDomain": "A String", # Primary domain name of the customer
     "trialSettings": { # Trial Settings of the subscription.
       "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
       "isInTrial": True or False, # Whether the subscription is in trial.
     },
-    "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-        # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-        # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-        # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-        # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-        # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-      "A String",
-    ],
+    "skuId": "A String", # Name of the sku for which this subscription is purchased.
     "resourceUiUrl": "A String", # Ui url for subscription resource.
     "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
       "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -483,6 +487,7 @@
       "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
     },
     "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+    "kind": "reseller#subscription", # Identifies the resource as a Subscription.
     "transferInfo": { # Transfer related information for the subscription.
       "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
       "minimumTransferableSeats": 42,
@@ -497,6 +502,14 @@
       "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
     },
     "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+    "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+        # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+        # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+        # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+        # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+        # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+      "A String",
+    ],
     "subscriptionId": "A String", # The id of the subscription.
     "billingMethod": "A String", # Billing method of this subscription.
     "customerId": "A String", # The id of the customer to whom the subscription belongs.
@@ -512,20 +525,13 @@
         "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
         "renewalType": "A String", # Subscription renewal type.
       },
-      "skuId": "A String", # Name of the sku for which this subscription is purchased.
-      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+      "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+      "customerDomain": "A String", # Primary domain name of the customer
       "trialSettings": { # Trial Settings of the subscription.
         "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
         "isInTrial": True or False, # Whether the subscription is in trial.
       },
-      "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-          # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-          # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-          # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-          # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-          # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-        "A String",
-      ],
+      "skuId": "A String", # Name of the sku for which this subscription is purchased.
       "resourceUiUrl": "A String", # Ui url for subscription resource.
       "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
         "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -534,6 +540,7 @@
         "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
       },
       "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
       "transferInfo": { # Transfer related information for the subscription.
         "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
         "minimumTransferableSeats": 42,
@@ -548,6 +555,14 @@
         "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
       },
       "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+      "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+          # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+          # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+          # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+          # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+          # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+        "A String",
+      ],
       "subscriptionId": "A String", # The id of the subscription.
       "billingMethod": "A String", # Billing method of this subscription.
       "customerId": "A String", # The id of the customer to whom the subscription belongs.
@@ -577,20 +592,13 @@
             "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
             "renewalType": "A String", # Subscription renewal type.
           },
-          "skuId": "A String", # Name of the sku for which this subscription is purchased.
-          "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+          "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+          "customerDomain": "A String", # Primary domain name of the customer
           "trialSettings": { # Trial Settings of the subscription.
             "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
             "isInTrial": True or False, # Whether the subscription is in trial.
           },
-          "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-              # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-              # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-              # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-              # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-              # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-            "A String",
-          ],
+          "skuId": "A String", # Name of the sku for which this subscription is purchased.
           "resourceUiUrl": "A String", # Ui url for subscription resource.
           "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
             "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -599,6 +607,7 @@
             "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
           },
           "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+          "kind": "reseller#subscription", # Identifies the resource as a Subscription.
           "transferInfo": { # Transfer related information for the subscription.
             "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
             "minimumTransferableSeats": 42,
@@ -613,6 +622,14 @@
             "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
           },
           "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+          "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+              # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+              # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+              # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+              # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+              # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+            "A String",
+          ],
           "subscriptionId": "A String", # The id of the subscription.
           "billingMethod": "A String", # Billing method of this subscription.
           "customerId": "A String", # The id of the customer to whom the subscription belongs.
@@ -651,20 +668,13 @@
         "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
         "renewalType": "A String", # Subscription renewal type.
       },
-      "skuId": "A String", # Name of the sku for which this subscription is purchased.
-      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+      "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+      "customerDomain": "A String", # Primary domain name of the customer
       "trialSettings": { # Trial Settings of the subscription.
         "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
         "isInTrial": True or False, # Whether the subscription is in trial.
       },
-      "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-          # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-          # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-          # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-          # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-          # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-        "A String",
-      ],
+      "skuId": "A String", # Name of the sku for which this subscription is purchased.
       "resourceUiUrl": "A String", # Ui url for subscription resource.
       "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
         "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -673,6 +683,7 @@
         "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
       },
       "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
       "transferInfo": { # Transfer related information for the subscription.
         "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
         "minimumTransferableSeats": 42,
@@ -687,6 +698,14 @@
         "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
       },
       "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+      "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+          # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+          # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+          # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+          # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+          # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+        "A String",
+      ],
       "subscriptionId": "A String", # The id of the subscription.
       "billingMethod": "A String", # Billing method of this subscription.
       "customerId": "A String", # The id of the customer to whom the subscription belongs.
@@ -709,20 +728,13 @@
         "kind": "subscriptions#renewalSettings", # Identifies the resource as a subscription renewal setting.
         "renewalType": "A String", # Subscription renewal type.
       },
-      "skuId": "A String", # Name of the sku for which this subscription is purchased.
-      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
+      "dealCode": "A String", # External name of the deal, if this subscription was provisioned under one. Otherwise this field will be empty.
+      "customerDomain": "A String", # Primary domain name of the customer
       "trialSettings": { # Trial Settings of the subscription.
         "trialEndTime": "A String", # End time of the trial in milliseconds since Unix epoch.
         "isInTrial": True or False, # Whether the subscription is in trial.
       },
-      "suspensionReasons": [ # field listing all current reasons the subscription is suspended. It is possible for a subscription to have multiple suspension reasons. A subscription's status is SUSPENDED until all pending suspensions are removed. Possible options include:
-          # - PENDING_TOS_ACCEPTANCE — The customer has not logged in and accepted the Google Apps Resold Terms of Services.
-          # - RENEWAL_WITH_TYPE_CANCEL — The customer's commitment ended and their service was cancelled at the end of their term.
-          # - RESELLER_INITIATED — A manual suspension invoked by a Reseller.
-          # - TRIAL_ENDED — The customer's trial expired without a plan selected.
-          # - OTHER — The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
-        "A String",
-      ],
+      "skuId": "A String", # Name of the sku for which this subscription is purchased.
       "resourceUiUrl": "A String", # Ui url for subscription resource.
       "seats": { # JSON template for subscription seats. # Number/Limit of seats in the new plan.
         "kind": "subscriptions#seats", # Identifies the resource as a subscription change plan request.
@@ -731,6 +743,7 @@
         "licensedNumberOfSeats": 42, # Read-only field containing the current number of licensed seats for FLEXIBLE Google-Apps subscriptions and secondary subscriptions such as Google-Vault and Drive-storage.
       },
       "creationTime": "A String", # Creation time of this subscription in milliseconds since Unix epoch.
+      "kind": "reseller#subscription", # Identifies the resource as a Subscription.
       "transferInfo": { # Transfer related information for the subscription.
         "transferabilityExpirationTime": "A String", # Time when transfer token or intent to transfer will expire.
         "minimumTransferableSeats": 42,
@@ -745,6 +758,14 @@
         "isCommitmentPlan": True or False, # Whether the plan is a commitment plan or not.
       },
       "purchaseOrderId": "A String", # Purchase order id for your order tracking purposes.
+      "suspensionReasons": [ # Read-only field containing an enumerable of all the current suspension reasons for a subscription. It is possible for a subscription to have many concurrent, overlapping suspension reasons. A subscription's STATUS is SUSPENDED until all pending suspensions are removed. Possible options include:
+          # - PENDING_TOS_ACCEPTANCE - The customer has not logged in and accepted the Google Apps Resold Terms of Services.
+          # - RENEWAL_WITH_TYPE_CANCEL - The customer's commitment ended and their service was cancelled at the end of their term.
+          # - RESELLER_INITIATED - A manual suspension invoked by a Reseller.
+          # - TRIAL_ENDED - The customer's trial expired without a plan selected.
+          # - OTHER - The customer is suspended for an internal Google reason (e.g. abuse or otherwise).
+        "A String",
+      ],
       "subscriptionId": "A String", # The id of the subscription.
       "billingMethod": "A String", # Billing method of this subscription.
       "customerId": "A String", # The id of the customer to whom the subscription belongs.
diff --git a/docs/dyn/runtimeconfig_v1beta1.html b/docs/dyn/runtimeconfig_v1beta1.html
new file mode 100644
index 0000000..df2bbe0
--- /dev/null
+++ b/docs/dyn/runtimeconfig_v1beta1.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="runtimeconfig_v1beta1.html">Google Cloud RuntimeConfig API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="runtimeconfig_v1beta1.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/runtimeconfig_v1beta1.projects.configs.html b/docs/dyn/runtimeconfig_v1beta1.projects.configs.html
new file mode 100644
index 0000000..94154d8
--- /dev/null
+++ b/docs/dyn/runtimeconfig_v1beta1.projects.configs.html
@@ -0,0 +1,316 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="runtimeconfig_v1beta1.html">Google Cloud RuntimeConfig API</a> . <a href="runtimeconfig_v1beta1.projects.html">projects</a> . <a href="runtimeconfig_v1beta1.projects.configs.html">configs</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="runtimeconfig_v1beta1.projects.configs.operations.html">operations()</a></code>
+</p>
+<p class="firstline">Returns the operations Resource.</p>
+
+<p class="toc_element">
+  <code><a href="runtimeconfig_v1beta1.projects.configs.variables.html">variables()</a></code>
+</p>
+<p class="firstline">Returns the variables Resource.</p>
+
+<p class="toc_element">
+  <code><a href="runtimeconfig_v1beta1.projects.configs.waiters.html">waiters()</a></code>
+</p>
+<p class="firstline">Returns the waiters Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#create">create(parent=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">CreateConfig creates a new config resource object.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes the config object.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets the config resource object.</p>
+<p class="toc_element">
+  <code><a href="#list">list(parent=None, pageToken=None, x__xgafv=None, pageSize=None)</a></code></p>
+<p class="firstline">Lists all the config objects within project.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#update">update(name=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates the config resource object.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(parent=None, body, x__xgafv=None)</code>
+  <pre>CreateConfig creates a new config resource object.
+The configuration name must be unique within project.
+
+Args:
+  parent: string, The cloud project to which configuration belongs.
+Required. Must be a valid GCP project. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # RuntimeConfig is the primary resource in the Configuration service.
+      # It consists of metadata and a hierarchy of variables.
+    "description": "A String", # Description of the configuration object.
+        # `len(description)` must be less than 256.
+    "name": "A String", # The resource name of a runtime config.
+        # It has the format of "projects/{project_id}/configs/{config_id}",
+        # where `project_id` is a valid Google cloud project ID, and the
+        # `config_id` must match RFC 1035 segment specification, and
+        # `len(config_id)` must be less than 64 bytes.
+        # The name is assigned by the client, but will be validated on the server
+        # side to adhere to the format.
+        # Name is immutable and cannot be changed.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # RuntimeConfig is the primary resource in the Configuration service.
+        # It consists of metadata and a hierarchy of variables.
+      "description": "A String", # Description of the configuration object.
+          # `len(description)` must be less than 256.
+      "name": "A String", # The resource name of a runtime config.
+          # It has the format of "projects/{project_id}/configs/{config_id}",
+          # where `project_id` is a valid Google cloud project ID, and the
+          # `config_id` must match RFC 1035 segment specification, and
+          # `len(config_id)` must be less than 64 bytes.
+          # The name is assigned by the client, but will be validated on the server
+          # side to adhere to the format.
+          # Name is immutable and cannot be changed.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name=None, x__xgafv=None)</code>
+  <pre>Deletes the config object.
+
+Args:
+  name: string, The configuration resource object to delete.
+Required. Must be a valid GCP project. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated
+      # empty messages in your APIs. A typical example is to use it as the request
+      # or the response type of an API method. For instance:
+      #
+      #     service Foo {
+      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+      #     }
+      #
+      # The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets the config resource object.
+
+Args:
+  name: string, The name of the RuntimeConfig resource object to retrieve. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # RuntimeConfig is the primary resource in the Configuration service.
+        # It consists of metadata and a hierarchy of variables.
+      "description": "A String", # Description of the configuration object.
+          # `len(description)` must be less than 256.
+      "name": "A String", # The resource name of a runtime config.
+          # It has the format of "projects/{project_id}/configs/{config_id}",
+          # where `project_id` is a valid Google cloud project ID, and the
+          # `config_id` must match RFC 1035 segment specification, and
+          # `len(config_id)` must be less than 64 bytes.
+          # The name is assigned by the client, but will be validated on the server
+          # side to adhere to the format.
+          # Name is immutable and cannot be changed.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(parent=None, pageToken=None, x__xgafv=None, pageSize=None)</code>
+  <pre>Lists all the config objects within project.
+
+Args:
+  parent: string, The cloud project, whose configuration resources we want to list.
+Required. Must be a valid GCP project. (required)
+  pageToken: string, The token for pagination.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+  pageSize: integer, List pagination support.
+The size of the page to return. We may return fewer elements.
+
+Returns:
+  An object of the form:
+
+    { # Response for the `ListConfigs()` method.
+      # Order of returned configuration objects is arbitrary.
+    "nextPageToken": "A String", # Pagination support.
+    "configs": [ # Found configurations in the project.
+      { # RuntimeConfig is the primary resource in the Configuration service.
+            # It consists of metadata and a hierarchy of variables.
+          "description": "A String", # Description of the configuration object.
+              # `len(description)` must be less than 256.
+          "name": "A String", # The resource name of a runtime config.
+              # It has the format of "projects/{project_id}/configs/{config_id}",
+              # where `project_id` is a valid Google cloud project ID, and the
+              # `config_id` must match RFC 1035 segment specification, and
+              # `len(config_id)` must be less than 64 bytes.
+              # The name is assigned by the client, but will be validated on the server
+              # side to adhere to the format.
+              # Name is immutable and cannot be changed.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(name=None, body, x__xgafv=None)</code>
+  <pre>Updates the config resource object.
+RuntimeConfig object must already exist.
+
+Args:
+  name: string, The name of the config resource to update.
+Required. Must be a valid config resource. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # RuntimeConfig is the primary resource in the Configuration service.
+      # It consists of metadata and a hierarchy of variables.
+    "description": "A String", # Description of the configuration object.
+        # `len(description)` must be less than 256.
+    "name": "A String", # The resource name of a runtime config.
+        # It has the format of "projects/{project_id}/configs/{config_id}",
+        # where `project_id` is a valid Google cloud project ID, and the
+        # `config_id` must match RFC 1035 segment specification, and
+        # `len(config_id)` must be less than 64 bytes.
+        # The name is assigned by the client, but will be validated on the server
+        # side to adhere to the format.
+        # Name is immutable and cannot be changed.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # RuntimeConfig is the primary resource in the Configuration service.
+        # It consists of metadata and a hierarchy of variables.
+      "description": "A String", # Description of the configuration object.
+          # `len(description)` must be less than 256.
+      "name": "A String", # The resource name of a runtime config.
+          # It has the format of "projects/{project_id}/configs/{config_id}",
+          # where `project_id` is a valid Google cloud project ID, and the
+          # `config_id` must match RFC 1035 segment specification, and
+          # `len(config_id)` must be less than 64 bytes.
+          # The name is assigned by the client, but will be validated on the server
+          # side to adhere to the format.
+          # Name is immutable and cannot be changed.
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/runtimeconfig_v1beta1.projects.configs.operations.html b/docs/dyn/runtimeconfig_v1beta1.projects.configs.operations.html
new file mode 100644
index 0000000..b73aa26
--- /dev/null
+++ b/docs/dyn/runtimeconfig_v1beta1.projects.configs.operations.html
@@ -0,0 +1,187 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="runtimeconfig_v1beta1.html">Google Cloud RuntimeConfig API</a> . <a href="runtimeconfig_v1beta1.projects.html">projects</a> . <a href="runtimeconfig_v1beta1.projects.configs.html">configs</a> . <a href="runtimeconfig_v1beta1.projects.configs.operations.html">operations</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets the latest state of a long-running operation.  Clients can use this</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets the latest state of a long-running operation.  Clients can use this
+method to poll the operation result at intervals as recommended by the API
+service.
+
+Args:
+  name: string, The name of the operation resource. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a
+      # network API call.
+    "metadata": { # Service-specific metadata associated with the operation.  It typically
+        # contains progress information and common metadata such as create time.
+        # Some services might not provide such metadata.  Any method that returns a
+        # long-running operation should document the metadata type, if any.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+    "done": True or False, # If the value is `false`, it means the operation is still in progress.
+        # If true, the operation is completed, and either `error` or `response` is
+        # available.
+    "response": { # The normal response of the operation in case of success.  If the original
+        # method returns no data on success, such as `Delete`, the response is
+        # `google.protobuf.Empty`.  If the original method is standard
+        # `Get`/`Create`/`Update`, the response should be the resource.  For other
+        # methods, the response should have the type `XxxResponse`, where `Xxx`
+        # is the original method name.  For example, if the original method name
+        # is `TakeSnapshot()`, the inferred response type is
+        # `TakeSnapshotResponse`.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+    "name": "A String", # The server-assigned name, which is only unique within the same service that
+        # originally returns it. If you use the default HTTP mapping, the
+        # `name` should have the format of `operations/some/unique/name`.
+    "error": { # The `Status` type defines a logical error model that is suitable for different # The error result of the operation in case of failure.
+        # programming environments, including REST APIs and RPC APIs. It is used by
+        # [gRPC](https://github.com/grpc). The error model is designed to be:
+        #
+        # - Simple to use and understand for most users
+        # - Flexible enough to meet unexpected needs
+        #
+        # # Overview
+        #
+        # The `Status` message contains three pieces of data: error code, error message,
+        # and error details. The error code should be an enum value of
+        # google.rpc.Code, but it may accept additional error codes if needed.  The
+        # error message should be a developer-facing English message that helps
+        # developers *understand* and *resolve* the error. If a localized user-facing
+        # error message is needed, put the localized message in the error details or
+        # localize it in the client. The optional error details may contain arbitrary
+        # information about the error. There is a predefined set of error detail types
+        # in the package `google.rpc` which can be used for common error conditions.
+        #
+        # # Language mapping
+        #
+        # The `Status` message is the logical representation of the error model, but it
+        # is not necessarily the actual wire format. When the `Status` message is
+        # exposed in different client libraries and different wire protocols, it can be
+        # mapped differently. For example, it will likely be mapped to some exceptions
+        # in Java, but more likely mapped to some error codes in C.
+        #
+        # # Other uses
+        #
+        # The error model and the `Status` message can be used in a variety of
+        # environments, either with or without APIs, to provide a
+        # consistent developer experience across different environments.
+        #
+        # Example uses of this error model include:
+        #
+        # - Partial errors. If a service needs to return partial errors to the client,
+        #     it may embed the `Status` in the normal response to indicate the partial
+        #     errors.
+        #
+        # - Workflow errors. A typical workflow has multiple steps. Each step may
+        #     have a `Status` message for error reporting purpose.
+        #
+        # - Batch operations. If a client uses batch request and batch response, the
+        #     `Status` message should be used directly inside batch response, one for
+        #     each error sub-response.
+        #
+        # - Asynchronous operations. If an API call embeds asynchronous operation
+        #     results in its response, the status of those operations should be
+        #     represented directly using the `Status` message.
+        #
+        # - Logging. If some API errors are stored in logs, the message `Status` could
+        #     be used directly after any stripping needed for security/privacy reasons.
+      "message": "A String", # A developer-facing error message, which should be in English. Any
+          # user-facing error message should be localized and sent in the
+          # google.rpc.Status.details field, or localized by the client.
+      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+      "details": [ # A list of messages that carry the error details.  There will be a
+          # common set of message types for APIs to use.
+        {
+          "a_key": "", # Properties of the object. Contains field @ype with type URL.
+        },
+      ],
+    },
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/runtimeconfig_v1beta1.projects.configs.variables.html b/docs/dyn/runtimeconfig_v1beta1.projects.configs.variables.html
new file mode 100644
index 0000000..de2490b
--- /dev/null
+++ b/docs/dyn/runtimeconfig_v1beta1.projects.configs.variables.html
@@ -0,0 +1,450 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="runtimeconfig_v1beta1.html">Google Cloud RuntimeConfig API</a> . <a href="runtimeconfig_v1beta1.projects.html">projects</a> . <a href="runtimeconfig_v1beta1.projects.configs.html">configs</a> . <a href="runtimeconfig_v1beta1.projects.configs.variables.html">variables</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(parent=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a variable within the given configuration.</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, recursive=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes variable or variables.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets the variable resource object.</p>
+<p class="toc_element">
+  <code><a href="#list">list(parent, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Lists variables within given RuntimeConfig object, matching optionally</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#update">update(name=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Updates an existing variable with a new value.</p>
+<p class="toc_element">
+  <code><a href="#watch">watch(name, body, x__xgafv=None)</a></code></p>
+<p class="firstline">WatchVariable watches for a variable to change and then returns the new</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(parent=None, body, x__xgafv=None)</code>
+  <pre>Creates a variable within the given configuration.
+Create variable will create all required intermediate path elements.
+It is a FAILED_PRECONDITION error to create a variable with a name that is
+a prefix of an existing variable name, or that has an existing variable
+name as a prefix.
+
+Args:
+  parent: string, The configuration parent, that will own the variable.
+Required, must a valid configuration name within project_id. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Variable message describes a single variable within a Configuration object.
+    # name denotes the hierarchical variable name, e.g.
+    # ports/serving_port within flags configuration object.
+    # Value is an opaque string and only leaf variables can have values.
+  "updateTime": "A String", # [Output Only] The time of the last variable update.
+  "state": "A String", # [Ouput only] The current state of the variable.
+      # State denotes the outcome of the Watch call and is unset by the Get/List
+      # calls.
+  "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
+      # value must be Base64 encoded.
+  "name": "A String", # Name of the variable resource.
+      # It has format of
+      # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
+      # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+      # must be a valid RuntimeConfig object and `variable_id` follows Unix
+      # file system file path naming.
+      # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
+      # Slashes are used as path element separators and are not part of the
+      # `variable_id` itself, so `variable_id` must contain at least one non-slash
+      # character. Multiple slashes are coalesced into single slash character.
+      # Each path segment should follow RFC 1035 segment specification.
+      # `len(variable_id)` must be less than 256 bytes.
+      # The name is assigned by the client, but will be validated on the server
+      # side to adhere to the format.
+      # Name is immutable and cannot be changed.
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Variable message describes a single variable within a Configuration object.
+      # name denotes the hierarchical variable name, e.g.
+      # ports/serving_port within flags configuration object.
+      # Value is an opaque string and only leaf variables can have values.
+    "updateTime": "A String", # [Output Only] The time of the last variable update.
+    "state": "A String", # [Ouput only] The current state of the variable.
+        # State denotes the outcome of the Watch call and is unset by the Get/List
+        # calls.
+    "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
+        # value must be Base64 encoded.
+    "name": "A String", # Name of the variable resource.
+        # It has format of
+        # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
+        # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+        # must be a valid RuntimeConfig object and `variable_id` follows Unix
+        # file system file path naming.
+        # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
+        # Slashes are used as path element separators and are not part of the
+        # `variable_id` itself, so `variable_id` must contain at least one non-slash
+        # character. Multiple slashes are coalesced into single slash character.
+        # Each path segment should follow RFC 1035 segment specification.
+        # `len(variable_id)` must be less than 256 bytes.
+        # The name is assigned by the client, but will be validated on the server
+        # side to adhere to the format.
+        # Name is immutable and cannot be changed.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, recursive=None, x__xgafv=None)</code>
+  <pre>Deletes variable or variables.
+If name denotes a variable, that variable is deleted. If name is a prefix
+and recursive is true, then all variables with that prefix are deleted,
+it's a FAILED_PRECONDITION to delete a prefix without recursive being true.
+
+Args:
+  name: string, The name of the variable to delete. (required)
+  recursive: boolean, If recursive is false and name is a prefix of other variables, then
+the request will fail.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated
+      # empty messages in your APIs. A typical example is to use it as the request
+      # or the response type of an API method. For instance:
+      #
+      #     service Foo {
+      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+      #     }
+      #
+      # The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets the variable resource object.
+
+Args:
+  name: string, What variable to return. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Variable message describes a single variable within a Configuration object.
+      # name denotes the hierarchical variable name, e.g.
+      # ports/serving_port within flags configuration object.
+      # Value is an opaque string and only leaf variables can have values.
+    "updateTime": "A String", # [Output Only] The time of the last variable update.
+    "state": "A String", # [Ouput only] The current state of the variable.
+        # State denotes the outcome of the Watch call and is unset by the Get/List
+        # calls.
+    "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
+        # value must be Base64 encoded.
+    "name": "A String", # Name of the variable resource.
+        # It has format of
+        # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
+        # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+        # must be a valid RuntimeConfig object and `variable_id` follows Unix
+        # file system file path naming.
+        # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
+        # Slashes are used as path element separators and are not part of the
+        # `variable_id` itself, so `variable_id` must contain at least one non-slash
+        # character. Multiple slashes are coalesced into single slash character.
+        # Each path segment should follow RFC 1035 segment specification.
+        # `len(variable_id)` must be less than 256 bytes.
+        # The name is assigned by the client, but will be validated on the server
+        # side to adhere to the format.
+        # Name is immutable and cannot be changed.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(parent, pageSize=None, filter=None, pageToken=None, x__xgafv=None)</code>
+  <pre>Lists variables within given RuntimeConfig object, matching optionally
+provided filter.
+List contains only variable metadata, but not values.
+
+Args:
+  parent: string, Which RuntimeConfig object to list for variables. (required)
+  pageSize: integer, List pagination support.
+The size of the page to return. We may return fewer elements.
+  filter: string, List only variables matching filter prefix exactly.
+e.g. `projects/{project_id}/config/{config_id}/variables/{variable/id}`.
+  pageToken: string, The token for pagination.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Response for the `ListVariables()` method.
+      # Order of returned variable objects is arbitrary.
+    "nextPageToken": "A String", # Pagination support.
+    "variables": [ # Matched variables and their values.
+      { # Variable message describes a single variable within a Configuration object.
+          # name denotes the hierarchical variable name, e.g.
+          # ports/serving_port within flags configuration object.
+          # Value is an opaque string and only leaf variables can have values.
+        "updateTime": "A String", # [Output Only] The time of the last variable update.
+        "state": "A String", # [Ouput only] The current state of the variable.
+            # State denotes the outcome of the Watch call and is unset by the Get/List
+            # calls.
+        "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
+            # value must be Base64 encoded.
+        "name": "A String", # Name of the variable resource.
+            # It has format of
+            # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
+            # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+            # must be a valid RuntimeConfig object and `variable_id` follows Unix
+            # file system file path naming.
+            # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
+            # Slashes are used as path element separators and are not part of the
+            # `variable_id` itself, so `variable_id` must contain at least one non-slash
+            # character. Multiple slashes are coalesced into single slash character.
+            # Each path segment should follow RFC 1035 segment specification.
+            # `len(variable_id)` must be less than 256 bytes.
+            # The name is assigned by the client, but will be validated on the server
+            # side to adhere to the format.
+            # Name is immutable and cannot be changed.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(name=None, body, x__xgafv=None)</code>
+  <pre>Updates an existing variable with a new value.
+
+Args:
+  name: string, The name of the variable to update.
+In the format of:
+"projects/{project_id}/configs/{config_id}/variables/{variable_id}" (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Variable message describes a single variable within a Configuration object.
+    # name denotes the hierarchical variable name, e.g.
+    # ports/serving_port within flags configuration object.
+    # Value is an opaque string and only leaf variables can have values.
+  "updateTime": "A String", # [Output Only] The time of the last variable update.
+  "state": "A String", # [Ouput only] The current state of the variable.
+      # State denotes the outcome of the Watch call and is unset by the Get/List
+      # calls.
+  "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
+      # value must be Base64 encoded.
+  "name": "A String", # Name of the variable resource.
+      # It has format of
+      # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
+      # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+      # must be a valid RuntimeConfig object and `variable_id` follows Unix
+      # file system file path naming.
+      # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
+      # Slashes are used as path element separators and are not part of the
+      # `variable_id` itself, so `variable_id` must contain at least one non-slash
+      # character. Multiple slashes are coalesced into single slash character.
+      # Each path segment should follow RFC 1035 segment specification.
+      # `len(variable_id)` must be less than 256 bytes.
+      # The name is assigned by the client, but will be validated on the server
+      # side to adhere to the format.
+      # Name is immutable and cannot be changed.
+}
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Variable message describes a single variable within a Configuration object.
+      # name denotes the hierarchical variable name, e.g.
+      # ports/serving_port within flags configuration object.
+      # Value is an opaque string and only leaf variables can have values.
+    "updateTime": "A String", # [Output Only] The time of the last variable update.
+    "state": "A String", # [Ouput only] The current state of the variable.
+        # State denotes the outcome of the Watch call and is unset by the Get/List
+        # calls.
+    "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
+        # value must be Base64 encoded.
+    "name": "A String", # Name of the variable resource.
+        # It has format of
+        # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
+        # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+        # must be a valid RuntimeConfig object and `variable_id` follows Unix
+        # file system file path naming.
+        # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
+        # Slashes are used as path element separators and are not part of the
+        # `variable_id` itself, so `variable_id` must contain at least one non-slash
+        # character. Multiple slashes are coalesced into single slash character.
+        # Each path segment should follow RFC 1035 segment specification.
+        # `len(variable_id)` must be less than 256 bytes.
+        # The name is assigned by the client, but will be validated on the server
+        # side to adhere to the format.
+        # Name is immutable and cannot be changed.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="watch">watch(name, body, x__xgafv=None)</code>
+  <pre>WatchVariable watches for a variable to change and then returns the new
+value or times out.
+If variable is deleted while being watched, VariableState will be DELETED
+and the Value will contain the last known value.
+If the operation deadline is set to a larger value than internal timeout
+existing, current variable value will be returned and Variable state will
+be VARIABLE_STATE_UNSPECIFIED.
+
+Args:
+  name: string, The name of the variable to retrieve. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request for the `WatchVariable()` method.
+    "newerThan": "A String", # If backend has a variable that has a newer value than this timestamp, then
+        # request will return immediately with current value.
+        # If not specified or variable has an older timestamp, will wait for the new
+        # value.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Variable message describes a single variable within a Configuration object.
+      # name denotes the hierarchical variable name, e.g.
+      # ports/serving_port within flags configuration object.
+      # Value is an opaque string and only leaf variables can have values.
+    "updateTime": "A String", # [Output Only] The time of the last variable update.
+    "state": "A String", # [Ouput only] The current state of the variable.
+        # State denotes the outcome of the Watch call and is unset by the Get/List
+        # calls.
+    "value": "A String", # `len(value)` must be less than 4096 bytes. Empty values are also accepted.
+        # value must be Base64 encoded.
+    "name": "A String", # Name of the variable resource.
+        # It has format of
+        # "projects/{project_id}/configs/{config_id}/variables/{variable_id}",
+        # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+        # must be a valid RuntimeConfig object and `variable_id` follows Unix
+        # file system file path naming.
+        # `variable_id` can contain ASCII letters, numbers, slashes and dashes.
+        # Slashes are used as path element separators and are not part of the
+        # `variable_id` itself, so `variable_id` must contain at least one non-slash
+        # character. Multiple slashes are coalesced into single slash character.
+        # Each path segment should follow RFC 1035 segment specification.
+        # `len(variable_id)` must be less than 256 bytes.
+        # The name is assigned by the client, but will be validated on the server
+        # side to adhere to the format.
+        # Name is immutable and cannot be changed.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/runtimeconfig_v1beta1.projects.configs.waiters.html b/docs/dyn/runtimeconfig_v1beta1.projects.configs.waiters.html
new file mode 100644
index 0000000..0ad5d1f
--- /dev/null
+++ b/docs/dyn/runtimeconfig_v1beta1.projects.configs.waiters.html
@@ -0,0 +1,685 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="runtimeconfig_v1beta1.html">Google Cloud RuntimeConfig API</a> . <a href="runtimeconfig_v1beta1.projects.html">projects</a> . <a href="runtimeconfig_v1beta1.projects.configs.html">configs</a> . <a href="runtimeconfig_v1beta1.projects.configs.waiters.html">waiters</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#create">create(parent=None, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a Waiter resource. This operation returns a long-running Operation</p>
+<p class="toc_element">
+  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Deletes the Waiter with the specified name.</p>
+<p class="toc_element">
+  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
+<p class="firstline">Gets the Waiter resource with the specified name.</p>
+<p class="toc_element">
+  <code><a href="#list">list(parent=None, pageToken=None, x__xgafv=None, pageSize=None)</a></code></p>
+<p class="firstline">List Waiters within the given RuntimeConfig resource.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(parent=None, body, x__xgafv=None)</code>
+  <pre>Creates a Waiter resource. This operation returns a long-running Operation
+resource which can be polled for completion. However, a Waiter with the
+given name will exist (and can be retrieved) prior to the resultant
+Operation completing. If the resultant Operation indicates a failure, the
+failed Waiter resource will still exist and must be deleted prior to
+subsequent creation attempts.
+
+Args:
+  parent: string, The fully-qualified name of the configuration that will own the waiter.
+Required. Must be a valid configuration name. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A Waiter resource waits for some condition within a RuntimeConfig resource
+      # to be met. For example: each node in a distributed system startup process
+      # writes a value to a Variable resource indicating its readiness. A Waiter
+      # configured with the proper `success` condition can be used to wait until
+      # some number of nodes have checked in.
+      # Once created, a Waiter resource is immutable.
+    "name": "A String", # Name of the variable resource.
+        # It has format of
+        # "projects/{project_id}/configs/{config_id}/waiters/{waiter_id}",
+        # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+        # must be a valid RuntimeConfig object and the `waiter_id` must match
+        # RFC 1035 segment specification, and `len(waiter_id)` must be less than
+        # 64 bytes.
+        # The name is assigned by the client, but will be validated on the server
+        # side to adhere to the format.
+        # Name is immutable and cannot be changed. Required.
+    "success": { # A condition that a Waiter resource is waiting for. The set of possible # The success condition. If this condition is met, `done` will be set to
+        # `true` and the `error` value will remain unset. The failure condition
+        # takes precedence over the success condition. If both conditions are met, a
+        # failure will be indicated. Required.
+        # conditions may expand over time.
+      "cardinality": { # The Cardinality condition is met when the count of `Variable` resources # The Cardinality condition type configuration.
+          # under the specified path prefix reaches the specified number.
+          # For example, take the following variables in a RuntimeConfig object:
+          #   /foo/variable1 = "value1"
+          #   /foo/variable2 = "value2"
+          #   /bar/variable3 = "value3"
+          #
+          # These variables would satisfy a Cardinality condition with `path` set to
+          # "/foo" and `number` set to 2, but would not satisify the same condition
+          # with `number` set to 3.
+        "path": "A String", # The root of the variable subtree to monitor. Required.
+        "number": 42, # The number of decendents of `path` that must exist before this condition
+            # is met. Optional; defaults to 1 if not specified.
+      },
+    },
+    "failure": { # A condition that a Waiter resource is waiting for. The set of possible # The failure condition. If this condition is met, `done` will be set to
+        # `true` and the `error` code will be set to ABORTED. The failure condition
+        # takes precedence over the success condition. If both conditions are met, a
+        # failure will be indicated. This value is optional; if no failure condition
+        # is set, the only failure scenario will be a timeout. Optional.
+        # conditions may expand over time.
+      "cardinality": { # The Cardinality condition is met when the count of `Variable` resources # The Cardinality condition type configuration.
+          # under the specified path prefix reaches the specified number.
+          # For example, take the following variables in a RuntimeConfig object:
+          #   /foo/variable1 = "value1"
+          #   /foo/variable2 = "value2"
+          #   /bar/variable3 = "value3"
+          #
+          # These variables would satisfy a Cardinality condition with `path` set to
+          # "/foo" and `number` set to 2, but would not satisify the same condition
+          # with `number` set to 3.
+        "path": "A String", # The root of the variable subtree to monitor. Required.
+        "number": 42, # The number of decendents of `path` that must exist before this condition
+            # is met. Optional; defaults to 1 if not specified.
+      },
+    },
+    "done": True or False, # If the value is `false`, it means the Waiter is still waiting for one of
+        # its conditions to be met.
+        # If true, the Waiter has finished. If the Waiter finished due to a timeout
+        # or failure, `error` will be set. Output only.
+    "timeout": "A String", # The timeout, beginning from the instant that CreateWaiter is called. If
+        # this timeout elapses prior to the success or failure conditions being met,
+        # the Waiter will fail and the `error` code will be set to DEADLINE_EXCEEDED.
+        # Required.
+    "error": { # The `Status` type defines a logical error model that is suitable for different # If the Waiter ended due to a failure or timeout, this value will be set.
+        # Output only.
+        # programming environments, including REST APIs and RPC APIs. It is used by
+        # [gRPC](https://github.com/grpc). The error model is designed to be:
+        #
+        # - Simple to use and understand for most users
+        # - Flexible enough to meet unexpected needs
+        #
+        # # Overview
+        #
+        # The `Status` message contains three pieces of data: error code, error message,
+        # and error details. The error code should be an enum value of
+        # google.rpc.Code, but it may accept additional error codes if needed.  The
+        # error message should be a developer-facing English message that helps
+        # developers *understand* and *resolve* the error. If a localized user-facing
+        # error message is needed, put the localized message in the error details or
+        # localize it in the client. The optional error details may contain arbitrary
+        # information about the error. There is a predefined set of error detail types
+        # in the package `google.rpc` which can be used for common error conditions.
+        #
+        # # Language mapping
+        #
+        # The `Status` message is the logical representation of the error model, but it
+        # is not necessarily the actual wire format. When the `Status` message is
+        # exposed in different client libraries and different wire protocols, it can be
+        # mapped differently. For example, it will likely be mapped to some exceptions
+        # in Java, but more likely mapped to some error codes in C.
+        #
+        # # Other uses
+        #
+        # The error model and the `Status` message can be used in a variety of
+        # environments, either with or without APIs, to provide a
+        # consistent developer experience across different environments.
+        #
+        # Example uses of this error model include:
+        #
+        # - Partial errors. If a service needs to return partial errors to the client,
+        #     it may embed the `Status` in the normal response to indicate the partial
+        #     errors.
+        #
+        # - Workflow errors. A typical workflow has multiple steps. Each step may
+        #     have a `Status` message for error reporting purpose.
+        #
+        # - Batch operations. If a client uses batch request and batch response, the
+        #     `Status` message should be used directly inside batch response, one for
+        #     each error sub-response.
+        #
+        # - Asynchronous operations. If an API call embeds asynchronous operation
+        #     results in its response, the status of those operations should be
+        #     represented directly using the `Status` message.
+        #
+        # - Logging. If some API errors are stored in logs, the message `Status` could
+        #     be used directly after any stripping needed for security/privacy reasons.
+      "message": "A String", # A developer-facing error message, which should be in English. Any
+          # user-facing error message should be localized and sent in the
+          # google.rpc.Status.details field, or localized by the client.
+      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+      "details": [ # A list of messages that carry the error details.  There will be a
+          # common set of message types for APIs to use.
+        {
+          "a_key": "", # Properties of the object. Contains field @ype with type URL.
+        },
+      ],
+    },
+    "createTime": "A String", # The instant at which this Waiter was created. Adding the value of `timeout`
+        # to this instant yields the timeout deadline for this Waiter. Output only.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # This resource represents a long-running operation that is the result of a
+      # network API call.
+    "metadata": { # Service-specific metadata associated with the operation.  It typically
+        # contains progress information and common metadata such as create time.
+        # Some services might not provide such metadata.  Any method that returns a
+        # long-running operation should document the metadata type, if any.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+    "done": True or False, # If the value is `false`, it means the operation is still in progress.
+        # If true, the operation is completed, and either `error` or `response` is
+        # available.
+    "response": { # The normal response of the operation in case of success.  If the original
+        # method returns no data on success, such as `Delete`, the response is
+        # `google.protobuf.Empty`.  If the original method is standard
+        # `Get`/`Create`/`Update`, the response should be the resource.  For other
+        # methods, the response should have the type `XxxResponse`, where `Xxx`
+        # is the original method name.  For example, if the original method name
+        # is `TakeSnapshot()`, the inferred response type is
+        # `TakeSnapshotResponse`.
+      "a_key": "", # Properties of the object. Contains field @ype with type URL.
+    },
+    "name": "A String", # The server-assigned name, which is only unique within the same service that
+        # originally returns it. If you use the default HTTP mapping, the
+        # `name` should have the format of `operations/some/unique/name`.
+    "error": { # The `Status` type defines a logical error model that is suitable for different # The error result of the operation in case of failure.
+        # programming environments, including REST APIs and RPC APIs. It is used by
+        # [gRPC](https://github.com/grpc). The error model is designed to be:
+        #
+        # - Simple to use and understand for most users
+        # - Flexible enough to meet unexpected needs
+        #
+        # # Overview
+        #
+        # The `Status` message contains three pieces of data: error code, error message,
+        # and error details. The error code should be an enum value of
+        # google.rpc.Code, but it may accept additional error codes if needed.  The
+        # error message should be a developer-facing English message that helps
+        # developers *understand* and *resolve* the error. If a localized user-facing
+        # error message is needed, put the localized message in the error details or
+        # localize it in the client. The optional error details may contain arbitrary
+        # information about the error. There is a predefined set of error detail types
+        # in the package `google.rpc` which can be used for common error conditions.
+        #
+        # # Language mapping
+        #
+        # The `Status` message is the logical representation of the error model, but it
+        # is not necessarily the actual wire format. When the `Status` message is
+        # exposed in different client libraries and different wire protocols, it can be
+        # mapped differently. For example, it will likely be mapped to some exceptions
+        # in Java, but more likely mapped to some error codes in C.
+        #
+        # # Other uses
+        #
+        # The error model and the `Status` message can be used in a variety of
+        # environments, either with or without APIs, to provide a
+        # consistent developer experience across different environments.
+        #
+        # Example uses of this error model include:
+        #
+        # - Partial errors. If a service needs to return partial errors to the client,
+        #     it may embed the `Status` in the normal response to indicate the partial
+        #     errors.
+        #
+        # - Workflow errors. A typical workflow has multiple steps. Each step may
+        #     have a `Status` message for error reporting purpose.
+        #
+        # - Batch operations. If a client uses batch request and batch response, the
+        #     `Status` message should be used directly inside batch response, one for
+        #     each error sub-response.
+        #
+        # - Asynchronous operations. If an API call embeds asynchronous operation
+        #     results in its response, the status of those operations should be
+        #     represented directly using the `Status` message.
+        #
+        # - Logging. If some API errors are stored in logs, the message `Status` could
+        #     be used directly after any stripping needed for security/privacy reasons.
+      "message": "A String", # A developer-facing error message, which should be in English. Any
+          # user-facing error message should be localized and sent in the
+          # google.rpc.Status.details field, or localized by the client.
+      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+      "details": [ # A list of messages that carry the error details.  There will be a
+          # common set of message types for APIs to use.
+        {
+          "a_key": "", # Properties of the object. Contains field @ype with type URL.
+        },
+      ],
+    },
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
+  <pre>Deletes the Waiter with the specified name.
+
+Args:
+  name: string, The Waiter resource to delete. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A generic empty message that you can re-use to avoid defining duplicated
+      # empty messages in your APIs. A typical example is to use it as the request
+      # or the response type of an API method. For instance:
+      #
+      #     service Foo {
+      #       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
+      #     }
+      #
+      # The JSON representation for `Empty` is empty JSON object `{}`.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(name, x__xgafv=None)</code>
+  <pre>Gets the Waiter resource with the specified name.
+
+Args:
+  name: string, The fully-qualified name of the Waiter resource object to retrieve. (required)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # A Waiter resource waits for some condition within a RuntimeConfig resource
+        # to be met. For example: each node in a distributed system startup process
+        # writes a value to a Variable resource indicating its readiness. A Waiter
+        # configured with the proper `success` condition can be used to wait until
+        # some number of nodes have checked in.
+        # Once created, a Waiter resource is immutable.
+      "name": "A String", # Name of the variable resource.
+          # It has format of
+          # "projects/{project_id}/configs/{config_id}/waiters/{waiter_id}",
+          # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+          # must be a valid RuntimeConfig object and the `waiter_id` must match
+          # RFC 1035 segment specification, and `len(waiter_id)` must be less than
+          # 64 bytes.
+          # The name is assigned by the client, but will be validated on the server
+          # side to adhere to the format.
+          # Name is immutable and cannot be changed. Required.
+      "success": { # A condition that a Waiter resource is waiting for. The set of possible # The success condition. If this condition is met, `done` will be set to
+          # `true` and the `error` value will remain unset. The failure condition
+          # takes precedence over the success condition. If both conditions are met, a
+          # failure will be indicated. Required.
+          # conditions may expand over time.
+        "cardinality": { # The Cardinality condition is met when the count of `Variable` resources # The Cardinality condition type configuration.
+            # under the specified path prefix reaches the specified number.
+            # For example, take the following variables in a RuntimeConfig object:
+            #   /foo/variable1 = "value1"
+            #   /foo/variable2 = "value2"
+            #   /bar/variable3 = "value3"
+            #
+            # These variables would satisfy a Cardinality condition with `path` set to
+            # "/foo" and `number` set to 2, but would not satisify the same condition
+            # with `number` set to 3.
+          "path": "A String", # The root of the variable subtree to monitor. Required.
+          "number": 42, # The number of decendents of `path` that must exist before this condition
+              # is met. Optional; defaults to 1 if not specified.
+        },
+      },
+      "failure": { # A condition that a Waiter resource is waiting for. The set of possible # The failure condition. If this condition is met, `done` will be set to
+          # `true` and the `error` code will be set to ABORTED. The failure condition
+          # takes precedence over the success condition. If both conditions are met, a
+          # failure will be indicated. This value is optional; if no failure condition
+          # is set, the only failure scenario will be a timeout. Optional.
+          # conditions may expand over time.
+        "cardinality": { # The Cardinality condition is met when the count of `Variable` resources # The Cardinality condition type configuration.
+            # under the specified path prefix reaches the specified number.
+            # For example, take the following variables in a RuntimeConfig object:
+            #   /foo/variable1 = "value1"
+            #   /foo/variable2 = "value2"
+            #   /bar/variable3 = "value3"
+            #
+            # These variables would satisfy a Cardinality condition with `path` set to
+            # "/foo" and `number` set to 2, but would not satisify the same condition
+            # with `number` set to 3.
+          "path": "A String", # The root of the variable subtree to monitor. Required.
+          "number": 42, # The number of decendents of `path` that must exist before this condition
+              # is met. Optional; defaults to 1 if not specified.
+        },
+      },
+      "done": True or False, # If the value is `false`, it means the Waiter is still waiting for one of
+          # its conditions to be met.
+          # If true, the Waiter has finished. If the Waiter finished due to a timeout
+          # or failure, `error` will be set. Output only.
+      "timeout": "A String", # The timeout, beginning from the instant that CreateWaiter is called. If
+          # this timeout elapses prior to the success or failure conditions being met,
+          # the Waiter will fail and the `error` code will be set to DEADLINE_EXCEEDED.
+          # Required.
+      "error": { # The `Status` type defines a logical error model that is suitable for different # If the Waiter ended due to a failure or timeout, this value will be set.
+          # Output only.
+          # programming environments, including REST APIs and RPC APIs. It is used by
+          # [gRPC](https://github.com/grpc). The error model is designed to be:
+          #
+          # - Simple to use and understand for most users
+          # - Flexible enough to meet unexpected needs
+          #
+          # # Overview
+          #
+          # The `Status` message contains three pieces of data: error code, error message,
+          # and error details. The error code should be an enum value of
+          # google.rpc.Code, but it may accept additional error codes if needed.  The
+          # error message should be a developer-facing English message that helps
+          # developers *understand* and *resolve* the error. If a localized user-facing
+          # error message is needed, put the localized message in the error details or
+          # localize it in the client. The optional error details may contain arbitrary
+          # information about the error. There is a predefined set of error detail types
+          # in the package `google.rpc` which can be used for common error conditions.
+          #
+          # # Language mapping
+          #
+          # The `Status` message is the logical representation of the error model, but it
+          # is not necessarily the actual wire format. When the `Status` message is
+          # exposed in different client libraries and different wire protocols, it can be
+          # mapped differently. For example, it will likely be mapped to some exceptions
+          # in Java, but more likely mapped to some error codes in C.
+          #
+          # # Other uses
+          #
+          # The error model and the `Status` message can be used in a variety of
+          # environments, either with or without APIs, to provide a
+          # consistent developer experience across different environments.
+          #
+          # Example uses of this error model include:
+          #
+          # - Partial errors. If a service needs to return partial errors to the client,
+          #     it may embed the `Status` in the normal response to indicate the partial
+          #     errors.
+          #
+          # - Workflow errors. A typical workflow has multiple steps. Each step may
+          #     have a `Status` message for error reporting purpose.
+          #
+          # - Batch operations. If a client uses batch request and batch response, the
+          #     `Status` message should be used directly inside batch response, one for
+          #     each error sub-response.
+          #
+          # - Asynchronous operations. If an API call embeds asynchronous operation
+          #     results in its response, the status of those operations should be
+          #     represented directly using the `Status` message.
+          #
+          # - Logging. If some API errors are stored in logs, the message `Status` could
+          #     be used directly after any stripping needed for security/privacy reasons.
+        "message": "A String", # A developer-facing error message, which should be in English. Any
+            # user-facing error message should be localized and sent in the
+            # google.rpc.Status.details field, or localized by the client.
+        "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+        "details": [ # A list of messages that carry the error details.  There will be a
+            # common set of message types for APIs to use.
+          {
+            "a_key": "", # Properties of the object. Contains field @ype with type URL.
+          },
+        ],
+      },
+      "createTime": "A String", # The instant at which this Waiter was created. Adding the value of `timeout`
+          # to this instant yields the timeout deadline for this Waiter. Output only.
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(parent=None, pageToken=None, x__xgafv=None, pageSize=None)</code>
+  <pre>List Waiters within the given RuntimeConfig resource.
+
+Args:
+  parent: string, The fully-qualified name of the configuration to list.
+Required. Must be a valid configuration name. (required)
+  pageToken: string, The token for pagination.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+  pageSize: integer, List pagination support.
+The size of the page to return. We may return fewer elements.
+
+Returns:
+  An object of the form:
+
+    { # Response for the `ListWaiters()` method.
+      # Order of returned waiter objects is arbitrary.
+    "nextPageToken": "A String", # Pagination support.
+    "waiters": [ # Found waiters in the project.
+      { # A Waiter resource waits for some condition within a RuntimeConfig resource
+            # to be met. For example: each node in a distributed system startup process
+            # writes a value to a Variable resource indicating its readiness. A Waiter
+            # configured with the proper `success` condition can be used to wait until
+            # some number of nodes have checked in.
+            # Once created, a Waiter resource is immutable.
+          "name": "A String", # Name of the variable resource.
+              # It has format of
+              # "projects/{project_id}/configs/{config_id}/waiters/{waiter_id}",
+              # Where `project_id` must be a valid Google Cloud project ID, `config_id`
+              # must be a valid RuntimeConfig object and the `waiter_id` must match
+              # RFC 1035 segment specification, and `len(waiter_id)` must be less than
+              # 64 bytes.
+              # The name is assigned by the client, but will be validated on the server
+              # side to adhere to the format.
+              # Name is immutable and cannot be changed. Required.
+          "success": { # A condition that a Waiter resource is waiting for. The set of possible # The success condition. If this condition is met, `done` will be set to
+              # `true` and the `error` value will remain unset. The failure condition
+              # takes precedence over the success condition. If both conditions are met, a
+              # failure will be indicated. Required.
+              # conditions may expand over time.
+            "cardinality": { # The Cardinality condition is met when the count of `Variable` resources # The Cardinality condition type configuration.
+                # under the specified path prefix reaches the specified number.
+                # For example, take the following variables in a RuntimeConfig object:
+                #   /foo/variable1 = "value1"
+                #   /foo/variable2 = "value2"
+                #   /bar/variable3 = "value3"
+                #
+                # These variables would satisfy a Cardinality condition with `path` set to
+                # "/foo" and `number` set to 2, but would not satisify the same condition
+                # with `number` set to 3.
+              "path": "A String", # The root of the variable subtree to monitor. Required.
+              "number": 42, # The number of decendents of `path` that must exist before this condition
+                  # is met. Optional; defaults to 1 if not specified.
+            },
+          },
+          "failure": { # A condition that a Waiter resource is waiting for. The set of possible # The failure condition. If this condition is met, `done` will be set to
+              # `true` and the `error` code will be set to ABORTED. The failure condition
+              # takes precedence over the success condition. If both conditions are met, a
+              # failure will be indicated. This value is optional; if no failure condition
+              # is set, the only failure scenario will be a timeout. Optional.
+              # conditions may expand over time.
+            "cardinality": { # The Cardinality condition is met when the count of `Variable` resources # The Cardinality condition type configuration.
+                # under the specified path prefix reaches the specified number.
+                # For example, take the following variables in a RuntimeConfig object:
+                #   /foo/variable1 = "value1"
+                #   /foo/variable2 = "value2"
+                #   /bar/variable3 = "value3"
+                #
+                # These variables would satisfy a Cardinality condition with `path` set to
+                # "/foo" and `number` set to 2, but would not satisify the same condition
+                # with `number` set to 3.
+              "path": "A String", # The root of the variable subtree to monitor. Required.
+              "number": 42, # The number of decendents of `path` that must exist before this condition
+                  # is met. Optional; defaults to 1 if not specified.
+            },
+          },
+          "done": True or False, # If the value is `false`, it means the Waiter is still waiting for one of
+              # its conditions to be met.
+              # If true, the Waiter has finished. If the Waiter finished due to a timeout
+              # or failure, `error` will be set. Output only.
+          "timeout": "A String", # The timeout, beginning from the instant that CreateWaiter is called. If
+              # this timeout elapses prior to the success or failure conditions being met,
+              # the Waiter will fail and the `error` code will be set to DEADLINE_EXCEEDED.
+              # Required.
+          "error": { # The `Status` type defines a logical error model that is suitable for different # If the Waiter ended due to a failure or timeout, this value will be set.
+              # Output only.
+              # programming environments, including REST APIs and RPC APIs. It is used by
+              # [gRPC](https://github.com/grpc). The error model is designed to be:
+              #
+              # - Simple to use and understand for most users
+              # - Flexible enough to meet unexpected needs
+              #
+              # # Overview
+              #
+              # The `Status` message contains three pieces of data: error code, error message,
+              # and error details. The error code should be an enum value of
+              # google.rpc.Code, but it may accept additional error codes if needed.  The
+              # error message should be a developer-facing English message that helps
+              # developers *understand* and *resolve* the error. If a localized user-facing
+              # error message is needed, put the localized message in the error details or
+              # localize it in the client. The optional error details may contain arbitrary
+              # information about the error. There is a predefined set of error detail types
+              # in the package `google.rpc` which can be used for common error conditions.
+              #
+              # # Language mapping
+              #
+              # The `Status` message is the logical representation of the error model, but it
+              # is not necessarily the actual wire format. When the `Status` message is
+              # exposed in different client libraries and different wire protocols, it can be
+              # mapped differently. For example, it will likely be mapped to some exceptions
+              # in Java, but more likely mapped to some error codes in C.
+              #
+              # # Other uses
+              #
+              # The error model and the `Status` message can be used in a variety of
+              # environments, either with or without APIs, to provide a
+              # consistent developer experience across different environments.
+              #
+              # Example uses of this error model include:
+              #
+              # - Partial errors. If a service needs to return partial errors to the client,
+              #     it may embed the `Status` in the normal response to indicate the partial
+              #     errors.
+              #
+              # - Workflow errors. A typical workflow has multiple steps. Each step may
+              #     have a `Status` message for error reporting purpose.
+              #
+              # - Batch operations. If a client uses batch request and batch response, the
+              #     `Status` message should be used directly inside batch response, one for
+              #     each error sub-response.
+              #
+              # - Asynchronous operations. If an API call embeds asynchronous operation
+              #     results in its response, the status of those operations should be
+              #     represented directly using the `Status` message.
+              #
+              # - Logging. If some API errors are stored in logs, the message `Status` could
+              #     be used directly after any stripping needed for security/privacy reasons.
+            "message": "A String", # A developer-facing error message, which should be in English. Any
+                # user-facing error message should be localized and sent in the
+                # google.rpc.Status.details field, or localized by the client.
+            "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+            "details": [ # A list of messages that carry the error details.  There will be a
+                # common set of message types for APIs to use.
+              {
+                "a_key": "", # Properties of the object. Contains field @ype with type URL.
+              },
+            ],
+          },
+          "createTime": "A String", # The instant at which this Waiter was created. Adding the value of `timeout`
+              # to this instant yields the timeout deadline for this Waiter. Output only.
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/runtimeconfig_v1beta1.projects.html b/docs/dyn/runtimeconfig_v1beta1.projects.html
new file mode 100644
index 0000000..a56a2cf
--- /dev/null
+++ b/docs/dyn/runtimeconfig_v1beta1.projects.html
@@ -0,0 +1,82 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="runtimeconfig_v1beta1.html">Google Cloud RuntimeConfig API</a> . <a href="runtimeconfig_v1beta1.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="runtimeconfig_v1beta1.projects.configs.html">configs()</a></code>
+</p>
+<p class="firstline">Returns the configs Resource.</p>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/safebrowsing_v4.fullHashes.html b/docs/dyn/safebrowsing_v4.fullHashes.html
new file mode 100644
index 0000000..0bc7d84
--- /dev/null
+++ b/docs/dyn/safebrowsing_v4.fullHashes.html
@@ -0,0 +1,149 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="safebrowsing_v4.html">Safe Browsing APIs</a> . <a href="safebrowsing_v4.fullHashes.html">fullHashes</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#find">find(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Finds the full hashes that match the requested hash prefixes.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="find">find(body, x__xgafv=None)</code>
+  <pre>Finds the full hashes that match the requested hash prefixes.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request to return full hashes matched by the provided hash prefixes.
+    "client": { # The client metadata associated with Safe Browsing API requests. # The client metadata.
+      "clientVersion": "A String", # The version of the client implementation.
+      "clientId": "A String", # A client ID that (hopefully) uniquely identifies the client implementation of the Safe Browsing API.
+    },
+    "threatInfo": { # The information regarding one or more threats that a client submits when checking for matches in threat lists. # The lists and hashes to be checked.
+      "threatTypes": [ # The threat types to be checked.
+        "A String",
+      ],
+      "threatEntries": [ # The threat entries to be checked.
+        { # An individual threat; for example, a malicious URL or its hash representation. Only one of these fields should be set.
+          "url": "A String", # A URL.
+          "hash": "A String", # A hash prefix, consisting of the most significant 4-32 bytes of a SHA256 hash. This field is in binary format.
+          "digest": "A String", # The digest of an executable in SHA256 format. The API supports both binary and hex digests.
+        },
+      ],
+      "platformTypes": [ # The platform types to be checked.
+        "A String",
+      ],
+      "threatEntryTypes": [ # The entry types to be checked.
+        "A String",
+      ],
+    },
+    "clientStates": [ # The current client states for each of the client's local threat lists.
+      "A String",
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    {
+    "matches": [ # The full hashes that matched the requested prefixes.
+      { # A match when checking a threat entry in the Safe Browsing threat lists.
+        "threatType": "A String", # The threat type matching this threat.
+        "threatEntryMetadata": { # The metadata associated with a specific threat entry. The client is expected to know the metadata key/value pairs associated with each threat type. # Optional metadata associated with this threat.
+          "entries": [ # The metadata entries.
+            { # A single metadata entry.
+              "value": "A String", # The metadata entry value.
+              "key": "A String", # The metadata entry key.
+            },
+          ],
+        },
+        "threatEntryType": "A String", # The threat entry type matching this threat.
+        "cacheDuration": "A String", # The cache lifetime for the returned match. Clients must not cache this response for more than this duration to avoid false positives.
+        "threat": { # An individual threat; for example, a malicious URL or its hash representation. Only one of these fields should be set. # The threat matching this threat.
+          "url": "A String", # A URL.
+          "hash": "A String", # A hash prefix, consisting of the most significant 4-32 bytes of a SHA256 hash. This field is in binary format.
+          "digest": "A String", # The digest of an executable in SHA256 format. The API supports both binary and hex digests.
+        },
+        "platformType": "A String", # The platform type matching this threat.
+      },
+    ],
+    "negativeCacheDuration": "A String", # For requested entities that did not match the threat list, how long to cache the response.
+    "minimumWaitDuration": "A String", # The minimum duration the client must wait before issuing any find hashes request. If this field is not set, clients can issue a request as soon as they want.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/safebrowsing_v4.html b/docs/dyn/safebrowsing_v4.html
new file mode 100644
index 0000000..7d39ea7
--- /dev/null
+++ b/docs/dyn/safebrowsing_v4.html
@@ -0,0 +1,118 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="safebrowsing_v4.html">Safe Browsing APIs</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="safebrowsing_v4.fullHashes.html">fullHashes()</a></code>
+</p>
+<p class="firstline">Returns the fullHashes Resource.</p>
+
+<p class="toc_element">
+  <code><a href="safebrowsing_v4.threatListUpdates.html">threatListUpdates()</a></code>
+</p>
+<p class="firstline">Returns the threatListUpdates Resource.</p>
+
+<p class="toc_element">
+  <code><a href="safebrowsing_v4.threatLists.html">threatLists()</a></code>
+</p>
+<p class="firstline">Returns the threatLists Resource.</p>
+
+<p class="toc_element">
+  <code><a href="safebrowsing_v4.threatMatches.html">threatMatches()</a></code>
+</p>
+<p class="firstline">Returns the threatMatches Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/safebrowsing_v4.threatListUpdates.html b/docs/dyn/safebrowsing_v4.threatListUpdates.html
new file mode 100644
index 0000000..3a4c14a
--- /dev/null
+++ b/docs/dyn/safebrowsing_v4.threatListUpdates.html
@@ -0,0 +1,186 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="safebrowsing_v4.html">Safe Browsing APIs</a> . <a href="safebrowsing_v4.threatListUpdates.html">threatListUpdates</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#fetch">fetch(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Fetches the most recent threat list updates. A client can request updates for multiple lists at once.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="fetch">fetch(body, x__xgafv=None)</code>
+  <pre>Fetches the most recent threat list updates. A client can request updates for multiple lists at once.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Describes a Safe Browsing API update request. Clients can request updates for multiple lists in a single request. NOTE: Field index 2 is unused. NEXT: 4
+    "client": { # The client metadata associated with Safe Browsing API requests. # The client metadata.
+      "clientVersion": "A String", # The version of the client implementation.
+      "clientId": "A String", # A client ID that (hopefully) uniquely identifies the client implementation of the Safe Browsing API.
+    },
+    "listUpdateRequests": [ # The requested threat list updates.
+      { # A single list update request.
+        "threatType": "A String", # The type of threat posed by entries present in the list.
+        "threatEntryType": "A String", # The types of entries present in the list.
+        "platformType": "A String", # The type of platform at risk by entries present in the list.
+        "constraints": { # The constraints for this update. # The constraints associated with this request.
+          "maxDatabaseEntries": 42, # Sets the maximum number of entries that the client is willing to have in the local database. This should be a power of 2 between 2**10 and 2**20. If zero, no database size limit is set.
+          "region": "A String", # Requests the list for a specific geographic location. If not set the server may pick that value based on the user's IP address. Expects ISO 3166-1 alpha-2 format.
+          "supportedCompressions": [ # The compression types supported by the client.
+            "A String",
+          ],
+          "maxUpdateEntries": 42, # The maximum size in number of entries. The update will not contain more entries than this value. This should be a power of 2 between 2**10 and 2**20. If zero, no update size limit is set.
+        },
+        "state": "A String", # The current state of the client for the requested list (the encrypted client state that was received from the last successful list update).
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    {
+    "listUpdateResponses": [ # The list updates requested by the clients.
+      { # An update to an individual list.
+        "responseType": "A String", # The type of response. This may indicate that an action is required by the client when the response is received.
+        "threatType": "A String", # The threat type for which data is returned.
+        "removals": [ # A set of entries to remove from a local threat type's list. Repeated for the same reason as above.
+          { # A set of threats that should be added or removed from a client's local database.
+            "compressionType": "A String", # The compression type for the entries in this set.
+            "riceIndices": { # The Rice-Golomb encoded data. Used for sending compressed 4-byte hashes or compressed removal indices. # The encoded local, lexicographically-sorted list indices, using a Golomb-Rice encoding. Used for sending compressed removal indices.
+              "encodedData": "A String", # The encoded deltas that are encoded using the Golomb-Rice coder.
+              "numEntries": 42, # The number of entries that are delta encoded in the encoded data. If only a single integer was encoded, this will be zero and the single value will be stored in `first_value`.
+              "riceParameter": 42, # The Golomb-Rice parameter, which is a number between 2 and 28. This field is missing (that is, zero) if `num_entries` is zero.
+              "firstValue": "A String", # The offset of the first entry in the encoded data, or, if only a single integer was encoded, that single integer's value.
+            },
+            "rawIndices": { # A set of raw indices to remove from a local list. # The raw removal indices for a local list.
+              "indices": [ # The indices to remove from a lexicographically-sorted local list.
+                42,
+              ],
+            },
+            "riceHashes": { # The Rice-Golomb encoded data. Used for sending compressed 4-byte hashes or compressed removal indices. # The encoded 4-byte prefixes of SHA256-formatted entries, using a Golomb-Rice encoding.
+              "encodedData": "A String", # The encoded deltas that are encoded using the Golomb-Rice coder.
+              "numEntries": 42, # The number of entries that are delta encoded in the encoded data. If only a single integer was encoded, this will be zero and the single value will be stored in `first_value`.
+              "riceParameter": 42, # The Golomb-Rice parameter, which is a number between 2 and 28. This field is missing (that is, zero) if `num_entries` is zero.
+              "firstValue": "A String", # The offset of the first entry in the encoded data, or, if only a single integer was encoded, that single integer's value.
+            },
+            "rawHashes": { # The uncompressed threat entries in hash format of a particular prefix length. Hashes can be anywhere from 4 to 32 bytes in size. A large majority are 4 bytes, but some hashes are lengthened if they collide with the hash of a popular URL. Used for sending ThreatEntrySet to clients that do not support compression, or when sending non-4-byte hashes to clients that do support compression. # The raw SHA256-formatted entries.
+              "prefixSize": 42, # The number of bytes for each prefix encoded below. This field can be anywhere from 4 (shortest prefix) to 32 (full SHA256 hash).
+              "rawHashes": "A String", # The hashes, all concatenated into one long string. Each hash has a prefix size of |prefix_size| above. Hashes are sorted in lexicographic order.
+            },
+          },
+        ],
+        "newClientState": "A String", # The new client state, in encrypted format. Opaque to clients.
+        "checksum": { # The expected state of a client's local database. # The expected SHA256 hash of the client state; that is, of the sorted list of all hashes present in the database after applying the provided update. If the client state doesn't match the expected state, the client must disregard this update and retry later.
+          "sha256": "A String", # The SHA256 hash of the client state; that is, of the sorted list of all hashes present in the database.
+        },
+        "threatEntryType": "A String", # The format of the threats.
+        "additions": [ # A set of entries to add to a local threat type's list. Repeated to allow for a combination of compressed and raw data to be sent in a single response.
+          { # A set of threats that should be added or removed from a client's local database.
+            "compressionType": "A String", # The compression type for the entries in this set.
+            "riceIndices": { # The Rice-Golomb encoded data. Used for sending compressed 4-byte hashes or compressed removal indices. # The encoded local, lexicographically-sorted list indices, using a Golomb-Rice encoding. Used for sending compressed removal indices.
+              "encodedData": "A String", # The encoded deltas that are encoded using the Golomb-Rice coder.
+              "numEntries": 42, # The number of entries that are delta encoded in the encoded data. If only a single integer was encoded, this will be zero and the single value will be stored in `first_value`.
+              "riceParameter": 42, # The Golomb-Rice parameter, which is a number between 2 and 28. This field is missing (that is, zero) if `num_entries` is zero.
+              "firstValue": "A String", # The offset of the first entry in the encoded data, or, if only a single integer was encoded, that single integer's value.
+            },
+            "rawIndices": { # A set of raw indices to remove from a local list. # The raw removal indices for a local list.
+              "indices": [ # The indices to remove from a lexicographically-sorted local list.
+                42,
+              ],
+            },
+            "riceHashes": { # The Rice-Golomb encoded data. Used for sending compressed 4-byte hashes or compressed removal indices. # The encoded 4-byte prefixes of SHA256-formatted entries, using a Golomb-Rice encoding.
+              "encodedData": "A String", # The encoded deltas that are encoded using the Golomb-Rice coder.
+              "numEntries": 42, # The number of entries that are delta encoded in the encoded data. If only a single integer was encoded, this will be zero and the single value will be stored in `first_value`.
+              "riceParameter": 42, # The Golomb-Rice parameter, which is a number between 2 and 28. This field is missing (that is, zero) if `num_entries` is zero.
+              "firstValue": "A String", # The offset of the first entry in the encoded data, or, if only a single integer was encoded, that single integer's value.
+            },
+            "rawHashes": { # The uncompressed threat entries in hash format of a particular prefix length. Hashes can be anywhere from 4 to 32 bytes in size. A large majority are 4 bytes, but some hashes are lengthened if they collide with the hash of a popular URL. Used for sending ThreatEntrySet to clients that do not support compression, or when sending non-4-byte hashes to clients that do support compression. # The raw SHA256-formatted entries.
+              "prefixSize": 42, # The number of bytes for each prefix encoded below. This field can be anywhere from 4 (shortest prefix) to 32 (full SHA256 hash).
+              "rawHashes": "A String", # The hashes, all concatenated into one long string. Each hash has a prefix size of |prefix_size| above. Hashes are sorted in lexicographic order.
+            },
+          },
+        ],
+        "platformType": "A String", # The platform type for which data is returned.
+      },
+    ],
+    "minimumWaitDuration": "A String", # The minimum duration the client must wait before issuing any update request. If this field is not set clients may update as soon as they want.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/safebrowsing_v4.threatLists.html b/docs/dyn/safebrowsing_v4.threatLists.html
new file mode 100644
index 0000000..89e7c35
--- /dev/null
+++ b/docs/dyn/safebrowsing_v4.threatLists.html
@@ -0,0 +1,102 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="safebrowsing_v4.html">Safe Browsing APIs</a> . <a href="safebrowsing_v4.threatLists.html">threatLists</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(x__xgafv=None)</a></code></p>
+<p class="firstline">Lists the Safe Browsing threat lists available for download.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(x__xgafv=None)</code>
+  <pre>Lists the Safe Browsing threat lists available for download.
+
+Args:
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    {
+    "threatLists": [ # The lists available for download by the client.
+      { # Describes an individual threat list. A list is defined by three parameters: the type of threat posed, the type of platform targeted by the threat, and the type of entries in the list.
+        "threatType": "A String", # The threat type posed by the list's entries.
+        "threatEntryType": "A String", # The entry types contained in the list.
+        "platformType": "A String", # The platform type targeted by the list's entries.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/safebrowsing_v4.threatMatches.html b/docs/dyn/safebrowsing_v4.threatMatches.html
new file mode 100644
index 0000000..2294a6a
--- /dev/null
+++ b/docs/dyn/safebrowsing_v4.threatMatches.html
@@ -0,0 +1,144 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="safebrowsing_v4.html">Safe Browsing APIs</a> . <a href="safebrowsing_v4.threatMatches.html">threatMatches</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#find">find(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Finds the threat entries that match the Safe Browsing lists.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="find">find(body, x__xgafv=None)</code>
+  <pre>Finds the threat entries that match the Safe Browsing lists.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request to check entries against lists.
+    "client": { # The client metadata associated with Safe Browsing API requests. # The client metadata.
+      "clientVersion": "A String", # The version of the client implementation.
+      "clientId": "A String", # A client ID that (hopefully) uniquely identifies the client implementation of the Safe Browsing API.
+    },
+    "threatInfo": { # The information regarding one or more threats that a client submits when checking for matches in threat lists. # The lists and entries to be checked for matches.
+      "threatTypes": [ # The threat types to be checked.
+        "A String",
+      ],
+      "threatEntries": [ # The threat entries to be checked.
+        { # An individual threat; for example, a malicious URL or its hash representation. Only one of these fields should be set.
+          "url": "A String", # A URL.
+          "hash": "A String", # A hash prefix, consisting of the most significant 4-32 bytes of a SHA256 hash. This field is in binary format.
+          "digest": "A String", # The digest of an executable in SHA256 format. The API supports both binary and hex digests.
+        },
+      ],
+      "platformTypes": [ # The platform types to be checked.
+        "A String",
+      ],
+      "threatEntryTypes": [ # The entry types to be checked.
+        "A String",
+      ],
+    },
+  }
+
+  x__xgafv: string, V1 error format.
+
+Returns:
+  An object of the form:
+
+    {
+    "matches": [ # The threat list matches.
+      { # A match when checking a threat entry in the Safe Browsing threat lists.
+        "threatType": "A String", # The threat type matching this threat.
+        "threatEntryMetadata": { # The metadata associated with a specific threat entry. The client is expected to know the metadata key/value pairs associated with each threat type. # Optional metadata associated with this threat.
+          "entries": [ # The metadata entries.
+            { # A single metadata entry.
+              "value": "A String", # The metadata entry value.
+              "key": "A String", # The metadata entry key.
+            },
+          ],
+        },
+        "threatEntryType": "A String", # The threat entry type matching this threat.
+        "cacheDuration": "A String", # The cache lifetime for the returned match. Clients must not cache this response for more than this duration to avoid false positives.
+        "threat": { # An individual threat; for example, a malicious URL or its hash representation. Only one of these fields should be set. # The threat matching this threat.
+          "url": "A String", # A URL.
+          "hash": "A String", # A hash prefix, consisting of the most significant 4-32 bytes of a SHA256 hash. This field is in binary format.
+          "digest": "A String", # The digest of an executable in SHA256 format. The API supports both binary and hex digests.
+        },
+        "platformType": "A String", # The platform type matching this threat.
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/serviceregistry_alpha.endpoints.html b/docs/dyn/serviceregistry_alpha.endpoints.html
index 9d06ca7..fb47c39 100644
--- a/docs/dyn/serviceregistry_alpha.endpoints.html
+++ b/docs/dyn/serviceregistry_alpha.endpoints.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="serviceregistry_alpha.html">Google Cloud Service Registry API V1</a> . <a href="serviceregistry_alpha.endpoints.html">endpoints</a></h1>
+<h1><a href="serviceregistry_alpha.html">Google Cloud Service Registry API</a> . <a href="serviceregistry_alpha.endpoints.html">endpoints</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#delete">delete(project, endpoint)</a></code></p>
@@ -109,12 +109,12 @@
 
     { # An Operation resource, used to manage asynchronous API requests.
     "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
-    "clientOperationId": "A String", # [Output Only] A unique client ID generated by the server.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
     "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
-    "operationType": "A String", # [Output Only] The type of operation, which can be insert, update, or delete.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
     "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
     "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
@@ -129,7 +129,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -138,19 +138,19 @@
     "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "serviceregistry#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only available when performing regional operations.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
     "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] The URL of the resource that the operation is modifying.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -165,16 +165,14 @@
 Returns:
   An object of the form:
 
-    {
+    { # Next available tag: 13
       "description": "A String", # An optional user-provided description of the endpoint.
       "address": "A String", # A user-provided address of the service represented by this endpoint. This can be an IPv4 or IPv6 address, or a hostname.
-      "visibility": { # The visibility of this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
+      "visibility": { # The DNS Integration configuration for this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
         "networks": [ # Google Compute Engine networks for which the name of this endpoint should be resolvable through DNS.
           "A String",
         ],
-        "projects": [ # Google Cloud projects for which the name of this endpoint should be resolvable through DNS.
-          "A String",
-        ],
+        "internalDnsName": "A String", # [Output Only] Fully qualified domain name for the endpoint; used when addressing the endpoint from within Compute Networks specified in the networks field.
       },
       "port": 42, # An optional user-provided port of the service represented by this endpoint.
       "state": "A String", # [Output Only] The current state of the endpoint, as determined by the system.
@@ -195,16 +193,14 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{
+{ # Next available tag: 13
     "description": "A String", # An optional user-provided description of the endpoint.
     "address": "A String", # A user-provided address of the service represented by this endpoint. This can be an IPv4 or IPv6 address, or a hostname.
-    "visibility": { # The visibility of this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
+    "visibility": { # The DNS Integration configuration for this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
       "networks": [ # Google Compute Engine networks for which the name of this endpoint should be resolvable through DNS.
         "A String",
       ],
-      "projects": [ # Google Cloud projects for which the name of this endpoint should be resolvable through DNS.
-        "A String",
-      ],
+      "internalDnsName": "A String", # [Output Only] Fully qualified domain name for the endpoint; used when addressing the endpoint from within Compute Networks specified in the networks field.
     },
     "port": 42, # An optional user-provided port of the service represented by this endpoint.
     "state": "A String", # [Output Only] The current state of the endpoint, as determined by the system.
@@ -221,12 +217,12 @@
 
     { # An Operation resource, used to manage asynchronous API requests.
     "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
-    "clientOperationId": "A String", # [Output Only] A unique client ID generated by the server.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
     "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
-    "operationType": "A String", # [Output Only] The type of operation, which can be insert, update, or delete.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
     "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
     "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
@@ -241,7 +237,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -250,19 +246,19 @@
     "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "serviceregistry#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only available when performing regional operations.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
     "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] The URL of the resource that the operation is modifying.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -277,34 +273,32 @@
 You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.
 
 Currently, only sorting by name or creationTimestamp desc is supported.
-  maxResults: integer, The maximum number of results per page that Compute Engine should return. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
+  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
   pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
   filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
 
-    { # A response containing a partial list of Endpoints and a page token used to build the next request if the request has been truncated. Next available tag: 5
+    { # A response containing a partial list of Endpoints and a page token used to build the next request if the request has been truncated. Next available tag: 6
     "nextPageToken": "A String", # [Output Only] This token allows you to get the next page of results for list requests. If the number of results is larger than maxResults, use the nextPageToken as a value for the query parameter pageToken in the next list request. Subsequent list requests will have their own nextPageToken to continue paging through the results.
     "endpoints": [ # The endpoints contained in this response.
-      {
+      { # Next available tag: 13
           "description": "A String", # An optional user-provided description of the endpoint.
           "address": "A String", # A user-provided address of the service represented by this endpoint. This can be an IPv4 or IPv6 address, or a hostname.
-          "visibility": { # The visibility of this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
+          "visibility": { # The DNS Integration configuration for this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
             "networks": [ # Google Compute Engine networks for which the name of this endpoint should be resolvable through DNS.
               "A String",
             ],
-            "projects": [ # Google Cloud projects for which the name of this endpoint should be resolvable through DNS.
-              "A String",
-            ],
+            "internalDnsName": "A String", # [Output Only] Fully qualified domain name for the endpoint; used when addressing the endpoint from within Compute Networks specified in the networks field.
           },
           "port": 42, # An optional user-provided port of the service represented by this endpoint.
           "state": "A String", # [Output Only] The current state of the endpoint, as determined by the system.
@@ -342,16 +336,14 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{
+{ # Next available tag: 13
     "description": "A String", # An optional user-provided description of the endpoint.
     "address": "A String", # A user-provided address of the service represented by this endpoint. This can be an IPv4 or IPv6 address, or a hostname.
-    "visibility": { # The visibility of this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
+    "visibility": { # The DNS Integration configuration for this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
       "networks": [ # Google Compute Engine networks for which the name of this endpoint should be resolvable through DNS.
         "A String",
       ],
-      "projects": [ # Google Cloud projects for which the name of this endpoint should be resolvable through DNS.
-        "A String",
-      ],
+      "internalDnsName": "A String", # [Output Only] Fully qualified domain name for the endpoint; used when addressing the endpoint from within Compute Networks specified in the networks field.
     },
     "port": 42, # An optional user-provided port of the service represented by this endpoint.
     "state": "A String", # [Output Only] The current state of the endpoint, as determined by the system.
@@ -368,12 +360,12 @@
 
     { # An Operation resource, used to manage asynchronous API requests.
     "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
-    "clientOperationId": "A String", # [Output Only] A unique client ID generated by the server.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
     "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
-    "operationType": "A String", # [Output Only] The type of operation, which can be insert, update, or delete.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
     "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
     "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
@@ -388,7 +380,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -397,19 +389,19 @@
     "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "serviceregistry#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only available when performing regional operations.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
     "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] The URL of the resource that the operation is modifying.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -423,16 +415,14 @@
   body: object, The request body. (required)
     The object takes the form of:
 
-{
+{ # Next available tag: 13
     "description": "A String", # An optional user-provided description of the endpoint.
     "address": "A String", # A user-provided address of the service represented by this endpoint. This can be an IPv4 or IPv6 address, or a hostname.
-    "visibility": { # The visibility of this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
+    "visibility": { # The DNS Integration configuration for this endpoint. This must be a list of fully-qualified URLs to Compute Engine networks.
       "networks": [ # Google Compute Engine networks for which the name of this endpoint should be resolvable through DNS.
         "A String",
       ],
-      "projects": [ # Google Cloud projects for which the name of this endpoint should be resolvable through DNS.
-        "A String",
-      ],
+      "internalDnsName": "A String", # [Output Only] Fully qualified domain name for the endpoint; used when addressing the endpoint from within Compute Networks specified in the networks field.
     },
     "port": 42, # An optional user-provided port of the service represented by this endpoint.
     "state": "A String", # [Output Only] The current state of the endpoint, as determined by the system.
@@ -449,12 +439,12 @@
 
     { # An Operation resource, used to manage asynchronous API requests.
     "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
-    "clientOperationId": "A String", # [Output Only] A unique client ID generated by the server.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
     "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
-    "operationType": "A String", # [Output Only] The type of operation, which can be insert, update, or delete.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
     "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
     "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
@@ -469,7 +459,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -478,19 +468,19 @@
     "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "serviceregistry#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only available when performing regional operations.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
     "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] The URL of the resource that the operation is modifying.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
diff --git a/docs/dyn/serviceregistry_alpha.html b/docs/dyn/serviceregistry_alpha.html
index 3e1e0ec..fe160ea 100644
--- a/docs/dyn/serviceregistry_alpha.html
+++ b/docs/dyn/serviceregistry_alpha.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="serviceregistry_alpha.html">Google Cloud Service Registry API V1</a></h1>
+<h1><a href="serviceregistry_alpha.html">Google Cloud Service Registry API</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="serviceregistry_alpha.endpoints.html">endpoints()</a></code>
diff --git a/docs/dyn/serviceregistry_alpha.operations.html b/docs/dyn/serviceregistry_alpha.operations.html
index 9a5de23..eec2283 100644
--- a/docs/dyn/serviceregistry_alpha.operations.html
+++ b/docs/dyn/serviceregistry_alpha.operations.html
@@ -72,7 +72,7 @@
 
 </style>
 
-<h1><a href="serviceregistry_alpha.html">Google Cloud Service Registry API V1</a> . <a href="serviceregistry_alpha.operations.html">operations</a></h1>
+<h1><a href="serviceregistry_alpha.html">Google Cloud Service Registry API</a> . <a href="serviceregistry_alpha.operations.html">operations</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#get">get(project, operation)</a></code></p>
@@ -97,12 +97,12 @@
 
     { # An Operation resource, used to manage asynchronous API requests.
     "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
-    "clientOperationId": "A String", # [Output Only] A unique client ID generated by the server.
+    "clientOperationId": "A String", # [Output Only] Reserved for future use.
     "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
     "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
-    "zone": "A String", # [Output Only] URL of the zone where the operation resides. Only available when performing per-zone operations.
+    "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
     "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
-    "operationType": "A String", # [Output Only] The type of operation, which can be insert, update, or delete.
+    "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
     "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
     "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
     "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
@@ -117,7 +117,7 @@
             # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
           {
             "value": "A String", # [Output Only] A warning data value corresponding to the key.
-            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+            "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
           },
         ],
       },
@@ -126,19 +126,19 @@
     "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
     "kind": "serviceregistry#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
     "name": "A String", # [Output Only] Name of the resource.
-    "region": "A String", # [Output Only] URL of the region where the operation resides. Only available when performing regional operations.
+    "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
     "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
       "errors": [ # [Output Only] The array of errors encountered while processing this operation.
         {
           "message": "A String", # [Output Only] An optional, human-readable error message.
           "code": "A String", # [Output Only] The error type identifier for this error.
-          "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+          "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
         },
       ],
     },
     "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
     "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-    "targetLink": "A String", # [Output Only] The URL of the resource that the operation is modifying.
+    "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
   }</pre>
 </div>
 
@@ -153,17 +153,17 @@
 You can also sort results in descending order based on the creation timestamp using orderBy="creationTimestamp desc". This sorts results based on the creationTimestamp field in reverse chronological order (newest result first). Use this to sort resources like operations so that the newest operation is returned first.
 
 Currently, only sorting by name or creationTimestamp desc is supported.
-  maxResults: integer, The maximum number of results per page that Compute Engine should return. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
+  maxResults: integer, The maximum number of results per page that should be returned. If the number of available results is larger than maxResults, Compute Engine returns a nextPageToken that can be used to get the next page of results in subsequent list requests.
   pageToken: string, Specifies a page token to use. Set pageToken to the nextPageToken returned by a previous list request to get the next page of results.
   filter: string, Sets a filter expression for filtering listed resources, in the form filter={expression}. Your {expression} must be in the format: field_name comparison_string literal_string.
 
 The field_name is the name of the field you want to compare. Only atomic field types are supported (string, number, boolean). The comparison_string must be either eq (equals) or ne (not equals). The literal_string is the string value to filter to. The literal value must be valid for the type of field you are filtering by (string, number, boolean). For string fields, the literal value is interpreted as a regular expression using RE2 syntax. The literal value must match the entire field.
 
-For example, filter=name ne example-instance.
+For example, to filter for instances that do not have a name of example-instance, you would use filter=name ne example-instance.
 
-Compute Engine Beta API Only: If you use filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. In particular, use filtering on nested fields to take advantage of instance labels to organize and filter results based on label values.
+Compute Engine Beta API Only: When filtering in the Beta API, you can also filter on nested fields. For example, you could filter on instances that have set the scheduling.automaticRestart field to true. Use filtering on nested fields to take advantage of labels to organize and search for results based on label values.
 
-The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions meaning that resources must match all expressions to pass the filters.
+The Beta API also supports filtering on multiple expressions by providing each separate expression within parentheses. For example, (scheduling.automaticRestart eq true) (zone eq us-central1-f). Multiple expressions are treated as AND expressions, meaning that resources must match all expressions to pass the filters.
 
 Returns:
   An object of the form:
@@ -173,12 +173,12 @@
     "operations": [ # [Output Only] Operations contained in this list response.
       { # An Operation resource, used to manage asynchronous API requests.
         "targetId": "A String", # [Output Only] The unique target ID, which identifies a specific incarnation of the target resource.
-        "clientOperationId": "A String", # [Output Only] A unique client ID generated by the server.
+        "clientOperationId": "A String", # [Output Only] Reserved for future use.
         "creationTimestamp": "A String", # [Output Only] Creation timestamp in RFC3339 text format.
         "id": "A String", # [Output Only] The unique identifier for the resource. This identifier is defined by the server.
-        "zone": "A String", # [Output Only] URL of the zone where the operation resides. Only available when performing per-zone operations.
+        "zone": "A String", # [Output Only] The URL of the zone where the operation resides. Only available when performing per-zone operations.
         "insertTime": "A String", # [Output Only] The time that this operation was requested. This value is in RFC3339 text format.
-        "operationType": "A String", # [Output Only] The type of operation, which can be insert, update, or delete.
+        "operationType": "A String", # [Output Only] The type of operation, such as insert, update, or delete, and so on.
         "httpErrorMessage": "A String", # [Output Only] If the operation fails, this field contains the HTTP error message that was returned, such as NOT FOUND.
         "progress": 42, # [Output Only] An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess when the operation will be complete. This number should monotonically increase as the operation progresses.
         "httpErrorStatusCode": 42, # [Output Only] If the operation fails, this field contains the HTTP error status code that was returned. For example, a 404 means the resource was not found.
@@ -193,7 +193,7 @@
                 # "data": [ { "key": "scope", "value": "zones/us-east1-d" }
               {
                 "value": "A String", # [Output Only] A warning data value corresponding to the key.
-                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource, and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
+                "key": "A String", # [Output Only] A key that provides more detail on the warning being returned. For example, for warnings where there are no results in a list request for a particular zone, this key might be scope and the key value might be the zone name. Other examples might be a key indicating a deprecated resource and a suggested replacement, or a warning about invalid network settings (for example, if an instance attempts to perform IP forwarding but is not enabled for IP forwarding).
               },
             ],
           },
@@ -202,19 +202,19 @@
         "startTime": "A String", # [Output Only] The time that this operation was started by the server. This value is in RFC3339 text format.
         "kind": "serviceregistry#operation", # [Output Only] Type of the resource. Always compute#operation for Operation resources.
         "name": "A String", # [Output Only] Name of the resource.
-        "region": "A String", # [Output Only] URL of the region where the operation resides. Only available when performing regional operations.
+        "region": "A String", # [Output Only] The URL of the region where the operation resides. Only available when performing regional operations.
         "error": { # [Output Only] If errors are generated during processing of the operation, this field will be populated.
           "errors": [ # [Output Only] The array of errors encountered while processing this operation.
             {
               "message": "A String", # [Output Only] An optional, human-readable error message.
               "code": "A String", # [Output Only] The error type identifier for this error.
-              "location": "A String", # [Output Only] Indicates the field in the request which caused the error. This property is optional.
+              "location": "A String", # [Output Only] Indicates the field in the request that caused the error. This property is optional.
             },
           ],
         },
         "endTime": "A String", # [Output Only] The time that this operation was completed. This value is in RFC3339 text format.
         "selfLink": "A String", # [Output Only] Server-defined URL for the resource.
-        "targetLink": "A String", # [Output Only] The URL of the resource that the operation is modifying.
+        "targetLink": "A String", # [Output Only] The URL of the resource that the operation modifies.
       },
     ],
   }</pre>
diff --git a/docs/dyn/sheets_v4.html b/docs/dyn/sheets_v4.html
new file mode 100644
index 0000000..28b555f
--- /dev/null
+++ b/docs/dyn/sheets_v4.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="sheets_v4.html">Google Sheets API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="sheets_v4.spreadsheets.html">spreadsheets()</a></code>
+</p>
+<p class="firstline">Returns the spreadsheets Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/sheets_v4.spreadsheets.html b/docs/dyn/sheets_v4.spreadsheets.html
new file mode 100644
index 0000000..9aee20a
--- /dev/null
+++ b/docs/dyn/sheets_v4.spreadsheets.html
@@ -0,0 +1,34290 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="sheets_v4.html">Google Sheets API</a> . <a href="sheets_v4.spreadsheets.html">spreadsheets</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="sheets_v4.spreadsheets.sheets.html">sheets()</a></code>
+</p>
+<p class="firstline">Returns the sheets Resource.</p>
+
+<p class="toc_element">
+  <code><a href="sheets_v4.spreadsheets.values.html">values()</a></code>
+</p>
+<p class="firstline">Returns the values Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Applies one or more updates to the spreadsheet.</p>
+<p class="toc_element">
+  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Creates a spreadsheet, returning the newly created spreadsheet.</p>
+<p class="toc_element">
+  <code><a href="#get">get(spreadsheetId, ranges=None, x__xgafv=None, includeGridData=None)</a></code></p>
+<p class="firstline">Returns the spreadsheet at the given id.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</code>
+  <pre>Applies one or more updates to the spreadsheet.
+
+Each request is validated before
+being applied. If any request is not valid then the entire request will
+fail and nothing will be applied.
+
+Some requests have replies to
+give you some information about how
+they applied. The replies will mirror the requests.  For example,
+if you applied 4 updates and the 3rd one had a reply, then the
+response will have 2 empty replies, the actual reply, and another empty
+reply, in that order.
+
+Due to the collaborative nature of spreadsheets, it is not guaranteed that
+the spreadsheet will reflect exactly your changes after this completes,
+however it is guaranteed that all the updates in the request will be
+applied atomically. Your changes may be altered with respect to
+collaborator changes. If there are no collaborators, the spreadsheet
+should reflect your changes.
+
+Args:
+  spreadsheetId: string, The spreadsheet to apply the updates to. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for updating any aspect of a spreadsheet.
+    "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.
+          "filterId": 42, # The ID of the filter being duplicated.
+        },
+        "sortRange": { # Sorts data in rows based on a sort order per column. # Sorts data in a range.
+          "range": { # A range on a sheet. # The range to sort.
+              # 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 grid 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.
+            },
+          ],
+        },
+        "updateEmbeddedObjectPosition": { # Update an embedded object's position (such as a moving or resizing a # Updates an embedded object's (e.g. chart, image) position.
+            # chart or image).
+          "newPosition": { # The position of an embedded object such as a chart. # An explicit position to move the embedded object to.
+              # If newPosition.sheetId is set,
+              # a new sheet with that ID will be created.
+              # If newPosition.newSheet is set to true,
+              # a new sheet will be created with an ID that will be chosen for you.
+            "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 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.
+            },
+          },
+          "fields": "A String", # The fields of OverlayPosition that should be updated when
+              # setting a new position. Used only if
+              # newPosition.overlayPosition
+              # is set, in which case at least one field must
+              # be specified.  The root `newPosition.overlayPosition` is implied and
+              # should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "objectId": 42, # The id of the object to moved.
+        },
+        "updateConditionalFormatRule": { # Updates a conditional format rule at the given index, # Updates an existing conditional format rule.
+            # or moves a conditional format rule to another index.
+          "index": 42, # The zero-based index of the rule that should be replaced or moved.
+          "newIndex": 42, # The zero-based new index the rule should end up at.
+          "sheetId": 42, # The sheet of the rule to move.  Required if newIndex is set,
+              # unused otherwise.
+          "rule": { # A rule describing a conditional format. # The rule that should replace the rule at the given index.
+            "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 grid 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.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "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 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 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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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 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 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 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.
+              },
+            },
+          },
+        },
+        "updateProtectedRange": { # Updates an existing protected range with the specified # Updates a protected range.
+            # protectedRangeId.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `protectedRange` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "protectedRange": { # A protected range. # The protected range to update with the new properties. If a nonzero
+              # protectedRangeId is
+              # specified, the protected range will use that ID. (It is an error to
+              # specify the ID of a protected range that already exists.)
+            "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 grid 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 namedRangeId
+                # 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 warningOnly 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 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 warning: 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 namedRangeId
+                # 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 grid 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.
+            },
+          },
+        },
+        "deleteDimension": { # Deletes the dimensions from the sheet. # Deletes rows or columns in a sheet.
+          "range": { # A range along a single dimension on a sheet. # The dimensions to delete from the sheet.
+              # All indexes are zero-based.
+              # Indexes are half open: the start index is inclusive
+              # and the end index is exclusive.
+              # Missing indexes indicate the range is unbounded on that side.
+            "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+            "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+            "sheetId": 42, # The sheet this span is on.
+            "dimension": "A String", # The dimension of the span.
+          },
+        },
+        "addProtectedRange": { # Adds a new protected range. # Adds a protected range.
+          "protectedRange": { # A protected range. # The protected range to be added.
+            "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 grid 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 namedRangeId
+                # 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 warningOnly 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 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 warning: 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 namedRangeId
+                # 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 grid 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.
+            },
+          },
+        },
+        "deleteEmbeddedObject": { # Deletes the embedded object with the given ID. # Deletes an embedded object (e.g, chart, image) in a sheet.
+          "objectId": 42, # The ID of the embedded object to delete.
+        },
+        "pasteData": { # Inserts data into the spreadsheet starting at the specified coordinate. # Pastes data (HTML or delimited) into a sheet.
+          "coordinate": { # A coordinate in a sheet. # The coordinate at which the data should start being inserted.
+              # 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.
+          },
+          "type": "A String", # How the data should be pasted.
+          "delimiter": "A String", # The delimiter in the data.
+          "html": True or False, # True if the data is HTML.
+          "data": "A String", # The data to insert.
+        },
+        "appendCells": { # Adds new cells to the last row with data in a sheet, # Appends cells to the last row with data in a sheet.
+            # inserting new rows into the sheet if necessary.
+          "fields": "A String", # The fields of CellData that should be updated.
+              # At least one field must be specified.
+              # The root is the CellData; 'row.values.' should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "rows": [ # The data to append.
+            { # 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 effectiveValue 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 grid 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.
+                        # When updating, all fields must be set.
+                      "pattern": "A String", # Pattern string used for formatting.
+                      "type": "A String", # The type of the number format.
+                    },
+                    "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 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 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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                        # When updating, all fields must be set.
+                      "pattern": "A String", # Pattern string used for formatting.
+                      "type": "A String", # The type of the number format.
+                    },
+                    "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 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 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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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 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.
+                    { # A run of a text format. The format of this run continues until explicitly
+                        # overridden in 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.
+                      },
+                    },
+                  ],
+                },
+              ],
+            },
+          ],
+          "sheetId": 42, # The sheet ID to append the data to.
+        },
+        "duplicateSheet": { # Duplicates the contents of a sheet. # Duplicates a sheet.
+          "sourceSheetId": 42, # The sheet to duplicate.
+          "insertSheetIndex": 42, # The zero-based index where the new sheet should be inserted.
+              # The index of all sheets after this are incremented.
+          "newSheetName": "A String", # The name of the new sheet.  If empty, a new name is chosen for you.
+          "newSheetId": 42, # If set, the ID of the new sheet. If not set, an ID is chosen.
+              # If set, the ID must not conflict with any existing sheet ID.
+              # If set, it must be non-negative.
+        },
+        "updateSheetProperties": { # Updates properties of the sheet with the specified # Updates a sheet's properties.
+            # sheetId.
+            # It is an error to specify read only fields in the field mask.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `properties` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "properties": { # Properties of a sheet. # The properties to update.
+            "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.
+          },
+        },
+        "addChart": { # Adds a chart to a sheet in the spreadsheet. # Adds a chart.
+          "chart": { # A chart embedded in a sheet. # The chart that should be added to the spreadsheet, including the position
+              # where it should be placed.
+            "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 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.
+                  # This value is only meaningful if the
+                  # ChartData.sourceRange
+                  # is used for a domain or series.
+              "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 grid 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 grid 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 grid 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 be 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 grid 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.
+            },
+          },
+        },
+        "addConditionalFormatRule": { # Adds a new conditional format rule at the given index. # Adds a new conditional format rule.
+            # All subsequent rules' indexes are incremented.
+          "index": 42, # The zero-based index where the rule should be inserted.
+          "rule": { # A rule describing a conditional format. # The rule to add.
+            "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 grid 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.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "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 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 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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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 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 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 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.
+              },
+            },
+          },
+        },
+        "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.
+            #
+            # If writing a cell with a formula, the formula's ranges will automatically
+            # increment for each field in the range.
+            # For example, if writing a cell with formula `=A1` into range B2:C4,
+            # B2 would be `=A1`, B3 would be `=A2`, B4 would be `=A3`,
+            # C2 would be `=B1`, C3 would be `=B2`, C4 would be `=B3`.
+            #
+            # To keep the formula's ranges static, use the `$` indicator.
+            # For example, using the formula was `=$A$1`, neither
+            # the row nor column would increment.
+          "cell": { # Data about a specific cell. # The data to write.
+            "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 effectiveValue 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 grid 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.
+                  # When updating, all fields must be set.
+                "pattern": "A String", # Pattern string used for formatting.
+                "type": "A String", # The type of the number format.
+              },
+              "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 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 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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                  # When updating, all fields must be set.
+                "pattern": "A String", # Pattern string used for formatting.
+                "type": "A String", # The type of the number format.
+              },
+              "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 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 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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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 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.
+              { # A run of a text format. The format of this run continues until explicitly
+                  # overridden in 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.
+                },
+              },
+            ],
+          },
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `cell` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "range": { # A range on a sheet. # The range to repeat the cell in.
+              # 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 grid 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.
+          },
+        },
+        "findReplace": { # Finds and replaces data in cells over a range, sheet, or all sheets. # Finds and replace occurrences of some text with other text.
+          "includeFormulas": True or False, # True if the search should include cells with formulas.
+              # False to skip cells with formulas.
+          "matchEntireCell": True or False, # True if the find value should match the entire cell.
+          "allSheets": True or False, # True to find/replace over all sheets.
+          "matchCase": True or False, # True if the search is case sensitive.
+          "sheetId": 42, # The sheet to find/replace over.
+          "range": { # A range on a sheet. # The range to find/replace over.
+              # 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 grid 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.
+          },
+          "searchByRegex": True or False, # True if the find value is a regex.
+              # The regular expression and replacement should follow Java regex rules
+              # at https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html.
+              # The replacement string is allowed to refer to capturing groups.
+              # For example, if one cell has the contents "`Google Sheets`" and another
+              # has "`Google Docs`", then searching for `"o.* (.*)"` with a replacement of
+              # `"$1 Rocks`"` would change the contents of the cells to
+              # "`GSheets Rocks`" and "`GDocs Rocks`" respectively.
+          "find": "A String", # The value to search.
+          "replacement": "A String", # The value to use as the replacement.
+        },
+        "setBasicFilter": { # Sets the basic filter associated with a sheet. # Sets the basic filter on a sheet.
+          "filter": { # The default filter associated with a sheet. # The filter to set.
+            "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 grid 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, 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 `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+        },
+        "updateSpreadsheetProperties": { # Updates properties of a spreadsheet. # Updates the spreadsheet's properties.
+            # It is an error to specify read only fields in the field mask.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root 'properties' is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "properties": { # Properties of a spreadsheet. # The properties to update.
+            "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.
+                  # When updating, all fields must be set.
+                "pattern": "A String", # Pattern string used for formatting.
+                "type": "A String", # The type of the number format.
+              },
+              "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 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 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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+                      # Border widths must be between 0 and 3 pixels.
+                  "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.
+          },
+        },
+        "updateCells": { # Updates all cells in a range with new data. # Updates many cells at once.
+          "fields": "A String", # The fields of CellData that should be updated.
+              # At least one field must be specified.
+              # The root is the CellData; 'row.values.' should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "range": { # A range on a sheet. # The range to write data to.
+              #
+              # If the data in rows does not cover the entire requested range,
+              # the fields matching those set in fields will be cleared.
+              # 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 grid 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.
+          },
+          "rows": [ # The data to write.
+            { # 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 effectiveValue 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 grid 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.
+                        # When updating, all fields must be set.
+                      "pattern": "A String", # Pattern string used for formatting.
+                      "type": "A String", # The type of the number format.
+                    },
+                    "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 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 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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                        # When updating, all fields must be set.
+                      "pattern": "A String", # Pattern string used for formatting.
+                      "type": "A String", # The type of the number format.
+                    },
+                    "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 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 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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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.
+                            # Border widths must be between 0 and 3 pixels.
+                        "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 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.
+                    { # A run of a text format. The format of this run continues until explicitly
+                        # overridden in 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.
+                      },
+                    },
+                  ],
+                },
+              ],
+            },
+          ],
+          "start": { # A coordinate in a sheet. # The coordinate to start writing data at.
+              # Any number of rows and columns (including a different number of
+              # columns per row) may be written.
+              # 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.
+          },
+        },
+        "autoFill": { # Fills in more data based on existing data. # Automatically fills in more data based on existing data.
+          "useAlternateSeries": True or False, # True if we should generate data with the "alternate" series.
+              # This differs based on the type and amount of source data.
+          "range": { # A range on a sheet. # The range to autofill. This will examine the range and detect
+              # the location that has data and automatically fill that data
+              # in to the rest of the range.
+              # 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 grid 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.
+          },
+          "sourceAndDestination": { # A combination of a source range and how to extend that source. # The source and destination areas to autofill.
+              # This explicitly lists the source of the autofill and where to
+              # extend that data.
+            "source": { # A range on a sheet. # The location of the data to use as the source of the autofill.
+                # 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 grid 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.
+            },
+            "dimension": "A String", # The dimension that data should be filled into.
+            "fillLength": 42, # The number of rows or columns that data should be filled into.
+                # Positive numbers expand beyond the last row or last column
+                # of the source.  Negative numbers expand before the first row
+                # or first column of the source.
+          },
+        },
+        "appendDimension": { # Appends rows or columns to the end of a sheet. # Appends dimensions to the end of a sheet.
+          "length": 42, # The number of rows or columns to append.
+          "sheetId": 42, # The sheet to append rows or columns to.
+          "dimension": "A String", # Whether rows or columns should be appended.
+        },
+        "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.
+          "dimensions": { # A range along a single dimension on a sheet. # The dimensions to automatically resize.
+              # Only COLUMNS are supported.
+              # All indexes are zero-based.
+              # Indexes are half open: the start index is inclusive
+              # and the end index is exclusive.
+              # Missing indexes indicate the range is unbounded on that side.
+            "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+            "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+            "sheetId": 42, # The sheet this span is on.
+            "dimension": "A String", # The dimension of the span.
+          },
+        },
+        "updateDimensionProperties": { # Updates properties of dimensions within the specified range. # Updates dimensions' properties.
+            # It is an error to specify read only fields in the field mask.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `properties` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "range": { # A range along a single dimension on a sheet. # The rows or columns to update.
+              # All indexes are zero-based.
+              # Indexes are half open: the start index is inclusive
+              # and the end index is exclusive.
+              # Missing indexes indicate the range is unbounded on that side.
+            "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+            "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+            "sheetId": 42, # The sheet this span is on.
+            "dimension": "A String", # The dimension of the span.
+          },
+          "properties": { # Properties about a dimension. # Properties to update.
+            "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.
+          },
+        },
+        "unmergeCells": { # Unmerges cells in the given range. # Unmerges merged cells.
+          "range": { # A range on a sheet. # The range within which all cells should be unmerged.
+              # If the range spans multiple merges, all will be unmerged.
+              # The range must not partially span any merge.
+              # 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 grid 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.
+          },
+        },
+        "setDataValidation": { # Sets a data validation rule to every cell in the range. # Sets data validation for one or more cells.
+            # To clear validation in a range, call this with no rule specified.
+          "range": { # A range on a sheet. # The range the data validation rule should apply to.
+              # 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 grid 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.
+          },
+          "rule": { # A data validation rule. # The data validation rule to set on each cell in the range,
+              # or empty to clear the data validation in the range.
+            "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 `=`).
+                },
+              ],
+            },
+          },
+        },
+        "clearBasicFilter": { # Clears the basic filter, if any exists on the sheet. # Clears the basic filter on a sheet.
+          "sheetId": 42, # The sheet ID on which the basic filter should be cleared.
+        },
+        "addNamedRange": { # Adds a named range to the spreadsheet. # Adds a named range.
+          "namedRange": { # A named range. # The named range to add. If a non-empty
+              # namedRangeId is specified, the named range
+              # will use that ID. (It is an error to specify the ID of a named
+              # range that already exists.)
+            "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 grid 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.
+          },
+        },
+        "updateChartSpec": { # Updates a chart's specifications. # Updates a chart's specifications.
+            # (This does not move or resize a chart. To move or resize a chart, use
+            #  UpdateEmbeddedObjectPositionRequest.)
+          "chartId": 42, # The ID of the chart to update.
+          "spec": { # The specifications of a chart. # The specification to apply to the chart.
+            "hiddenDimensionStrategy": "A String", # Determines how the charts will use hidden rows or columns.
+                # This value is only meaningful if the
+                # ChartData.sourceRange
+                # is used for a domain or series.
+            "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 grid 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 grid 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 grid 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 be 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 grid 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.
+          },
+        },
+        "moveDimension": { # Moves one or more rows or columns. # Moves rows or columns to another location in a sheet.
+          "source": { # A range along a single dimension on a sheet. # The source dimensions to move.
+              # All indexes are zero-based.
+              # Indexes are half open: the start index is inclusive
+              # and the end index is exclusive.
+              # Missing indexes indicate the range is unbounded on that side.
+            "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+            "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+            "sheetId": 42, # The sheet this span is on.
+            "dimension": "A String", # The dimension of the span.
+          },
+          "destinationIndex": 42, # The zero-based start index of where to move the source data to,
+              # based on the coordinates *before* the source data is removed
+              # from the grid.  Existing data will be shifted down or right
+              # (depending on the dimension) to make room for the moved dimensions.
+              # The source dimensions are removed from the grid, so the
+              # the data may end up in a different index than specified.
+              #
+              # For example, given `A1..A5` of `0, 1, 2, 3, 4` and wanting to move
+              # "`1`" and "`2`" to between "`3`" and "`4`", the source would be
+              # `ROWS [1..3)`,and the destination index would be "`4`"
+              # (the zero-based index of row 5).
+              # The end result would be `A1..A5` of `0, 3, 1, 2, 4`.
+        },
+        "textToColumns": { # Splits a column of text into multiple columns, # Converts a column of text into many columns of text.
+            # based on a delimiter in each cell.
+          "source": { # A range on a sheet. # The source data range.  This must span exactly one column.
+              # 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 grid 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.
+          },
+          "delimiter": "A String", # The delimiter to use. Used only if delimiterType is
+              # CUSTOM.
+          "delimiterType": "A String", # The delimiter type to use.
+        },
+        "deleteFilterView": { # Deletes a particular filter view. # Deletes a filter view from a sheet.
+          "filterId": 42, # The ID of the filter to delete.
+        },
+        "mergeCells": { # Merges all cells in the range. # Merges cells together.
+          "range": { # A range on a sheet. # The range of cells to merge.
+              # 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 grid 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.
+          },
+          "mergeType": "A String", # How the cells should be merged.
+        },
+        "deleteProtectedRange": { # Deletes the protected range with the given id. # Deletes a protected range.
+          "protectedRangeId": 42, # The ID of the protected range to delete.
+        },
+        "addFilterView": { # Adds a filter view. # Adds a filter view.
+          "filter": { # A filter view. # The filter to add.
+            "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 namedRangeId
+                # 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 namedRangeId
+                # 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 grid 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, 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 `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+        },
+        "deleteSheet": { # Deletes the requested sheet. # Deletes a sheet.
+          "sheetId": 42, # The ID of the sheet to delete.
+        },
+        "updateBorders": { # Updates the borders of a range. # Updates the borders in a range of cells.
+            # If a field is not set in the request, that means the border remains as-is.
+            # For example, with two subsequent UpdateBordersRequest:
+            #
+            #  1. range: A1:A5 `{ top: RED, bottom: WHITE }`
+            #  2. range: A1:A5 `{ left: BLUE }`
+            #
+            # That would result in A1:A5 having a borders of
+            # `{ top: RED, bottom: WHITE, left: BLUE }`.
+            # If you want to clear a border, explicitly set the style to
+            # NONE.
+          "right": { # A border along a cell. # The border to put at the right of the range.
+            "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.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "bottom": { # A border along a cell. # The border to put at the bottom of the range.
+            "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.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "top": { # A border along a cell. # The border to put at the top of the range.
+            "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.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "innerHorizontal": { # A border along a cell. # The horizontal border to put within the range.
+            "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.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "range": { # A range on a sheet. # The range whose borders should be updated.
+              # 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 grid 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.
+          },
+          "innerVertical": { # A border along a cell. # The vertical border to put within the range.
+            "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.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+          "left": { # A border along a cell. # The border to put at the left of the range.
+            "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.
+                # Border widths must be between 0 and 3 pixels.
+            "style": "A String", # The style of the border.
+          },
+        },
+        "cutPaste": { # Moves data from the source to the destination. # Cuts data from one area and pastes it to another.
+          "pasteType": "A String", # What kind of data to paste.  All the source data will be cut, regardless
+              # of what is pasted.
+          "source": { # A range on a sheet. # The source data to cut.
+              # 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 grid 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.
+          },
+          "destination": { # A coordinate in a sheet. # The top-left coordinate where the data should be pasted.
+              # 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.
+          },
+        },
+        "copyPaste": { # Copies data from the source to the destination. # Copies data from one area and pastes it to another.
+          "pasteType": "A String", # What kind of data to paste.
+          "source": { # A range on a sheet. # The source range to copy.
+              # 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 grid 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.
+          },
+          "destination": { # A range on a sheet. # The location to paste to. If the range covers a span that's
+              # a multiple of the source's height or width, then the
+              # data will be repeated to fill in the destination range.
+              # If the range is smaller than the source range, the entire
+              # source data will still be copied (beyond the end of the destination range).
+              # 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 grid 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.
+          },
+          "pasteOrientation": "A String", # How that data should be oriented when pasting.
+        },
+        "addSheet": { # Adds a new sheet. # Adds a sheet.
+            # When a sheet is added at a given index,
+            # all subsequent sheets' indexes are incremented.
+            # To add an object sheet, use AddChartRequest instead.
+          "properties": { # Properties of a sheet. # The properties the new sheet should have.
+              # All properties are optional.
+              # If a sheetId
+              # is specified, the sheet will use that ID.
+              # (It is an error to specify the ID of a sheet that already exists.)
+            "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.
+          },
+        },
+        "deleteNamedRange": { # Removes the named range with the given ID from the spreadsheet. # Deletes a named range.
+          "namedRangeId": "A String", # The ID of the named range to delete.
+        },
+        "updateNamedRange": { # Updates properties of the named range with the specified # Updates a named range.
+            # namedRangeId.
+            # It is an error to specify read only fields in the field mask.
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `namedRange` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+          "namedRange": { # A named range. # The named range to update with the new properties.
+            "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 grid 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.
+          },
+        },
+        "insertDimension": { # Inserts rows or columns in a sheet at a particular index. # Inserts new rows or columns in a sheet.
+          "inheritFromBefore": True or False, # Whether dimension properties should be extended from the dimensions
+              # before or after the newly inserted dimensions.
+              # True to inherit from the dimensions before (in which case the start
+              # index must be greater than 0), and false to inherit from the dimensions
+              # after.
+              #
+              # For example, if row index 0 has red background and row index 1
+              # has a green background, then inserting 2 rows at index 1 can inherit
+              # either the green or red background.  If `inheritFromBefore` is true,
+              # the two new rows will be red (because the row before the insertion point
+              # was red), whereas if `inheritFromBefore` is false, the two new rows will
+              # be green (because the rows after the insertion point were green).
+          "range": { # A range along a single dimension on a sheet. # The dimensions to insert.  Both the start and end indexes must be bounded.
+              # All indexes are zero-based.
+              # Indexes are half open: the start index is inclusive
+              # and the end index is exclusive.
+              # Missing indexes indicate the range is unbounded on that side.
+            "endIndex": 42, # The end (exclusive) of the span, or not set if unbounded.
+            "startIndex": 42, # The start (inclusive) of the span, or not set if unbounded.
+            "sheetId": 42, # The sheet this span is on.
+            "dimension": "A String", # The dimension of the span.
+          },
+        },
+        "updateFilterView": { # Updates properties of the filter view. # Updates the properties of a filter view.
+          "filter": { # A filter view. # The new properties of the 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 namedRangeId
+                # 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 namedRangeId
+                # 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 grid 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, 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 `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+          "fields": "A String", # The fields that should be updated.  At least one field must be specified.
+              # The root `filter` is implied and should not be specified.
+              # A single `"*"` can be used as short-hand for listing every field.
+        },
+        "deleteConditionalFormatRule": { # Deletes a conditional format rule at the given index. # Deletes an existing conditional format rule.
+            # All subsequent rules' indexes are decremented.
+          "index": 42, # The zero-based index of the rule to be deleted.
+          "sheetId": 42, # The sheet the rule is being deleted from.
+        },
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The reply for batch updating a spreadsheet.
+    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
+    "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.
+        "duplicateFilterView": { # The result of a filter view being duplicated. # A reply from duplicating a filter view.
+          "filter": { # A filter view. # The newly created filter.
+            "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 namedRangeId
+                # 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 namedRangeId
+                # 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 grid 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, 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 `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+        },
+        "duplicateSheet": { # The result of duplicating a sheet. # A reply from duplicating a sheet.
+          "properties": { # Properties of a sheet. # The properties of the duplicate 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.
+          },
+        },
+        "updateEmbeddedObjectPosition": { # The result of updating an embedded object's position. # A reply from updating an embedded object's position.
+          "position": { # The position of an embedded object such as a chart. # The new position of the embedded object.
+            "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 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.
+            },
+          },
+        },
+        "addChart": { # The result of adding a chart to a spreadsheet. # A reply from adding a chart.
+          "chart": { # A chart embedded in a sheet. # The newly added chart.
+            "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 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.
+                  # This value is only meaningful if the
+                  # ChartData.sourceRange
+                  # is used for a domain or series.
+              "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 grid 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 grid 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 grid 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 be 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 grid 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.
+            },
+          },
+        },
+        "updateConditionalFormatRule": { # The result of updating a conditional format rule. # A reply from updating a conditional format rule.
+          "oldIndex": 42, # The old index of the rule. Not set if a rule was replaced
+              # (because it is the same as newIndex).
+          "newIndex": 42, # The index of the new rule.
+          "oldRule": { # A rule describing a conditional format. # The old (deleted) rule. Not set if a rule was moved
+              # (because it is the same as newRule).
+            "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 grid 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.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "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 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 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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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 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 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 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.
+              },
+            },
+          },
+          "newRule": { # A rule describing a conditional format. # The new rule that replaced the old rule (if replacing),
+              # or the rule that was moved (if moved)
+            "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 grid 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.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "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 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 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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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 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 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 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.
+              },
+            },
+          },
+        },
+        "addSheet": { # The result of adding a sheet. # A reply from adding a sheet.
+          "properties": { # Properties of a sheet. # The properties of the newly added 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.
+          },
+        },
+        "findReplace": { # The result of the find/replace. # A reply from doing a find/replace.
+          "occurrencesChanged": 42, # The number of occurrences (possibly multiple within a cell) changed.
+              # For example, if replacing "`e`" with "`o`" in "`Google Sheets`", this would
+              # be "`3`" because "`Google Sheets`" -> "`Googlo Shoots`".
+          "sheetsChanged": 42, # The number of sheets changed.
+          "rowsChanged": 42, # The number of rows changed.
+          "valuesChanged": 42, # The number of non-formula cells changed.
+          "formulasChanged": 42, # The number of formula cells changed.
+        },
+        "addNamedRange": { # The result of adding a named range. # A reply from adding a named range.
+          "namedRange": { # A named range. # The named range to add.
+            "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 grid 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.
+          },
+        },
+        "addProtectedRange": { # The result of adding a new protected range. # A reply from adding a protected range.
+          "protectedRange": { # A protected range. # The newly added 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 grid 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 namedRangeId
+                # 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 warningOnly 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 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 warning: 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 namedRangeId
+                # 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 grid 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.
+            },
+          },
+        },
+        "deleteConditionalFormatRule": { # The result of deleting a conditional format rule. # A reply from deleting a conditional format rule.
+          "rule": { # A rule describing a conditional format. # The rule that was deleted.
+            "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 grid 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.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "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 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 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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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 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 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 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.
+              },
+            },
+          },
+        },
+        "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.
+            "namedRangeId": "A String", # The named range this filter view is backed by, if any.
+                #
+                # When writing, only one of range or namedRangeId
+                # 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 namedRangeId
+                # 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 grid 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, 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 `=`).
+                    },
+                  ],
+                },
+              },
+            },
+          },
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="create">create(body, x__xgafv=None)</code>
+  <pre>Creates a spreadsheet, returning the newly created spreadsheet.
+
+Args:
+  body: object, The request body. (required)
+    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 grid 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.
+            # When updating, all fields must be set.
+          "pattern": "A String", # Pattern string used for formatting.
+          "type": "A String", # The type of the number format.
+        },
+        "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 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 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.
+                # Border widths must be between 0 and 3 pixels.
+            "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.
+                # Border widths must be between 0 and 3 pixels.
+            "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.
+                # Border widths must be between 0 and 3 pixels.
+            "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.
+                # Border widths must be between 0 and 3 pixels.
+            "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 grid 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.
+                    # When updating, all fields must be set.
+                  "pattern": "A String", # Pattern string used for formatting.
+                  "type": "A String", # The type of the number format.
+                },
+                "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 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 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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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.
+                        # Border widths must be between 0 and 3 pixels.
+                    "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 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 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 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 grid 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 grid 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, 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 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.
+                  # This value is only meaningful if the
+                  # ChartData.sourceRange
+                  # is used for a domain or series.
+              "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 grid 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 grid 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 grid 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 be 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 grid 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 namedRangeId
+                # 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 namedRangeId
+                # 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 grid 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, 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 grid 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 namedRangeId
+                # 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 warningOnly 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 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 warning: 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 namedRangeId
+                # 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 grid 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 startRow.
+              { # 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 startColumn.
+              { # 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 startColumn.
+              { # 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 effectiveValue 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 grid 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.
+                          # When updating, all fields must be set.
+                        "pattern": "A String", # Pattern string used for formatting.
+                        "type": "A String", # The type of the number format.
+                      },
+                      "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 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 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.
+                              # Border widths must be between 0 and 3 pixels.
+                          "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.
+                              # Border widths must be between 0 and 3 pixels.
+                          "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.
+                              # Border widths must be between 0 and 3 pixels.
+                          "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.
+                              # Border widths must be between 0 and 3 pixels.
+                          "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.
+                          # When updating, all fields must be set.
+                        "pattern": "A String", # Pattern string used for formatting.
+                        "type": "A String", # The type of the number format.
+                      },
+                      "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 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 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.
+                              # Border widths must be between 0 and 3 pixels.
+                          "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.
+                              # Border widths must be between 0 and 3 pixels.
+                          "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.
+                              # Border widths must be between 0 and 3 pixels.
+                          "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.
+                              # Border widths must be between 0 and 3 pixels.
+                          "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 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.
+                      { # A run of a text format. The format of this run continues until explicitly
+                          # overridden in 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.
+        },
+      },
+    ],
+  }
+
+  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 grid 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.
+              # When updating, all fields must be set.
+            "pattern": "A String", # Pattern string used for formatting.
+            "type": "A String", # The type of the number format.
+          },
+          "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 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 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.
+                  # Border widths must be between 0 and 3 pixels.
+              "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.
+                  # Border widths must be between 0 and 3 pixels.
+              "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.
+                  # Border widths must be between 0 and 3 pixels.
+              "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.
+                  # Border widths must be between 0 and 3 pixels.
+              "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 grid 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.
+                      # When updating, all fields must be set.
+                    "pattern": "A String", # Pattern string used for formatting.
+                    "type": "A String", # The type of the number format.
+                  },
+                  "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 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 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.
+                          # Border widths must be between 0 and 3 pixels.
+                      "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.
+                          # Border widths must be between 0 and 3 pixels.
+                      "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.
+                          # Border widths must be between 0 and 3 pixels.
+                      "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.
+                          # Border widths must be between 0 and 3 pixels.
+                      "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 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 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 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 grid 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 grid 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, 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 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.
+                    # This value is only meaningful if the
+                    # ChartData.sourceRange
+                    # is used for a domain or series.
+                "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 grid 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 grid 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 grid 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 be 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 grid 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 namedRangeId
+                  # 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 namedRangeId
+                  # 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 grid 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, 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 grid 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 namedRangeId
+                  # 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 warningOnly 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 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 warning: 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 namedRangeId
+                  # 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 grid 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 startRow.
+                { # 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 startColumn.
+                { # 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 startColumn.
+                { # 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 effectiveValue 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 grid 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.
+                            # When updating, all fields must be set.
+                          "pattern": "A String", # Pattern string used for formatting.
+                          "type": "A String", # The type of the number format.
+                        },
+                        "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 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 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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                            # When updating, all fields must be set.
+                          "pattern": "A String", # Pattern string used for formatting.
+                          "type": "A String", # The type of the number format.
+                        },
+                        "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 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 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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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 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.
+                        { # A run of a text format. The format of this run continues until explicitly
+                            # overridden in 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>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(spreadsheetId, ranges=None, x__xgafv=None, includeGridData=None)</code>
+  <pre>Returns the spreadsheet at the given id.
+The caller must specify the spreadsheet ID.
+
+By default, data within grids will not be returned.
+You can include grid data one of two ways: specify a field mask listing
+your desired fields (using the `fields` URL parameter in HTTP,
+or `FieldMaskContext.response_mask` in the request extensions in an RPC),
+or by setting the
+includeGridData URL parameter
+to true.  If a field mask is set, the `includeGridData` parameter is
+ignored.
+
+For large spreadsheets, it is recommended to retrieve only the specific
+fields of the spreadsheet that you want.
+
+To retrieve only subsets of the spreadsheet, use the
+ranges URL parameter.
+Multiple ranges can be specified.  Limiting the range will
+return only the portions of the spreadsheet that intersect the requested
+ranges. Ranges are specified using A1 notation.
+
+Args:
+  spreadsheetId: string, The spreadsheet to request. (required)
+  ranges: string, The ranges to retrieve from the spreadsheet. (repeated)
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+  includeGridData: boolean, True if grid data should be returned.
+This parameter is ignored if a field mask was set in the request.
+
+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 grid 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.
+              # When updating, all fields must be set.
+            "pattern": "A String", # Pattern string used for formatting.
+            "type": "A String", # The type of the number format.
+          },
+          "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 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 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.
+                  # Border widths must be between 0 and 3 pixels.
+              "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.
+                  # Border widths must be between 0 and 3 pixels.
+              "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.
+                  # Border widths must be between 0 and 3 pixels.
+              "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.
+                  # Border widths must be between 0 and 3 pixels.
+              "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 grid 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.
+                      # When updating, all fields must be set.
+                    "pattern": "A String", # Pattern string used for formatting.
+                    "type": "A String", # The type of the number format.
+                  },
+                  "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 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 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.
+                          # Border widths must be between 0 and 3 pixels.
+                      "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.
+                          # Border widths must be between 0 and 3 pixels.
+                      "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.
+                          # Border widths must be between 0 and 3 pixels.
+                      "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.
+                          # Border widths must be between 0 and 3 pixels.
+                      "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 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 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 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 grid 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 grid 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, 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 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.
+                    # This value is only meaningful if the
+                    # ChartData.sourceRange
+                    # is used for a domain or series.
+                "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 grid 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 grid 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 grid 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 be 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 grid 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 namedRangeId
+                  # 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 namedRangeId
+                  # 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 grid 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, 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 grid 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 namedRangeId
+                  # 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 warningOnly 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 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 warning: 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 namedRangeId
+                  # 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 grid 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 startRow.
+                { # 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 startColumn.
+                { # 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 startColumn.
+                { # 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 effectiveValue 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 grid 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.
+                            # When updating, all fields must be set.
+                          "pattern": "A String", # Pattern string used for formatting.
+                          "type": "A String", # The type of the number format.
+                        },
+                        "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 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 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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                            # When updating, all fields must be set.
+                          "pattern": "A String", # Pattern string used for formatting.
+                          "type": "A String", # The type of the number format.
+                        },
+                        "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 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 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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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.
+                                # Border widths must be between 0 and 3 pixels.
+                            "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 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.
+                        { # A run of a text format. The format of this run continues until explicitly
+                            # overridden in 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>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/sheets_v4.spreadsheets.sheets.html b/docs/dyn/sheets_v4.spreadsheets.sheets.html
new file mode 100644
index 0000000..f83b27b
--- /dev/null
+++ b/docs/dyn/sheets_v4.spreadsheets.sheets.html
@@ -0,0 +1,258 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="sheets_v4.html">Google Sheets API</a> . <a href="sheets_v4.spreadsheets.html">spreadsheets</a> . <a href="sheets_v4.spreadsheets.sheets.html">sheets</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#copyTo">copyTo(spreadsheetId, sheetId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Copies a single sheet from a spreadsheet to another spreadsheet.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="copyTo">copyTo(spreadsheetId, sheetId, body, x__xgafv=None)</code>
+  <pre>Copies a single sheet from a spreadsheet to another spreadsheet.
+Returns the properties of the newly created sheet.
+
+Args:
+  spreadsheetId: string, The id of the spreadsheet containing the sheet to copy. (required)
+  sheetId: integer, The ID of the sheet to copy. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request to copy a sheet across spreadsheets.
+    "destinationSpreadsheetId": "A String", # The ID of the spreadsheet to copy the sheet to.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Properties of a 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>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/sheets_v4.spreadsheets.values.html b/docs/dyn/sheets_v4.spreadsheets.values.html
new file mode 100644
index 0000000..a1392c0
--- /dev/null
+++ b/docs/dyn/sheets_v4.spreadsheets.values.html
@@ -0,0 +1,356 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="sheets_v4.html">Google Sheets API</a> . <a href="sheets_v4.spreadsheets.html">spreadsheets</a> . <a href="sheets_v4.spreadsheets.values.html">values</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#batchGet">batchGet(spreadsheetId, valueRenderOption=None, majorDimension=None, ranges=None, dateTimeRenderOption=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns one or more ranges of values from a spreadsheet.</p>
+<p class="toc_element">
+  <code><a href="#batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Sets values in a range of a spreadsheet.</p>
+<p class="toc_element">
+  <code><a href="#get">get(spreadsheetId, range, valueRenderOption=None, majorDimension=None, dateTimeRenderOption=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Returns a range of values from a spreadsheet.</p>
+<p class="toc_element">
+  <code><a href="#update">update(spreadsheetId, range, body, valueInputOption=None, x__xgafv=None)</a></code></p>
+<p class="firstline">Sets values in a range of a spreadsheet.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="batchGet">batchGet(spreadsheetId, valueRenderOption=None, majorDimension=None, ranges=None, dateTimeRenderOption=None, x__xgafv=None)</code>
+  <pre>Returns one or more ranges of values from a spreadsheet.
+The caller must specify the spreadsheet ID and one or more ranges.
+
+Args:
+  spreadsheetId: string, The id of the spreadsheet to retrieve data from. (required)
+  valueRenderOption: string, How values should be represented in the output.
+  majorDimension: string, The major dimension that results should use.
+
+For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,
+then requesting `range=A1:B2,majorDimension=ROWS` will return
+`[[1,2],[3,4]]`,
+whereas requesting `range=A1:B2,majorDimension=COLUMNS` will return
+`[[1,3],[2,4]]`.
+  ranges: string, The A1 notation of the values to retrieve. (repeated)
+  dateTimeRenderOption: string, How dates, times, and durations should be represented in the output.
+This is ignored if ValueRenderOption option is
+FORMATTED_VALUE.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response when retrieving more than one range of values in a spreadsheet.
+    "spreadsheetId": "A String", # The id of the spreadsheet to retrieve data from.
+    "valueRanges": [ # The requested values. The order of the ValueRanges is the same as the
+        # order of the requested ranges.
+      { # Data within a range of the spreadsheet.
+        "range": "A String", # The range the values cover, in A1 notation.
+            # For output, this range indicates the entire requested range,
+            # even though the values will exclude trailing rows and columns.
+        "values": [ # The data that was read or to be written.  This is an array of arrays,
+            # the outer array representing all the data and each inner array
+            # representing a major dimension. Each item in the inner array
+            # corresponds with one cell.
+            #
+            # For output, empty trailing rows and columns will not be included.
+            #
+            # For input, supported value types are: bool, string, and double.
+            # Null and empty values will be skipped.
+            # To set a cell to an empty value, set the string value to an empty string.
+          [
+            "",
+          ],
+        ],
+        "majorDimension": "A String", # The major dimension of the values.
+            #
+            # For output, if the spreadsheet data is: A1=1,B1=2,A2=3,B2=4,
+            # then requesting range=A1:B2,majorDimension=ROWS will return [[1,2],[3,4]],
+            # whereas requesting range=A1:B2,majorDimension=COLUMNS will return
+            # [[1,3],[2,4]].
+            #
+            # For input, with range=A1:B2,majorDimension=ROWS then [[1,2],[3,4]]
+            # will set A1=1,B1=2,A2=3,B2=4. With range=A1:B2,majorDimension=COLUMNS
+            # then [[1,2],[3,4]] will set A1=1,B1=3,A2=2,B2=4.
+            #
+            # When writing, if this field is not set, it defaults to ROWS.
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="batchUpdate">batchUpdate(spreadsheetId, body, x__xgafv=None)</code>
+  <pre>Sets values in a range of a spreadsheet.
+The caller must specify the spreadsheet ID,
+a valueInputOption, and one or more
+ValueRanges.
+
+Args:
+  spreadsheetId: string, The id of the spreadsheet to update. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request for updating more than one range of values in a spreadsheet.
+    "data": [ # The new values to apply to the spreadsheet.
+      { # Data within a range of the spreadsheet.
+        "range": "A String", # The range the values cover, in A1 notation.
+            # For output, this range indicates the entire requested range,
+            # even though the values will exclude trailing rows and columns.
+        "values": [ # The data that was read or to be written.  This is an array of arrays,
+            # the outer array representing all the data and each inner array
+            # representing a major dimension. Each item in the inner array
+            # corresponds with one cell.
+            #
+            # For output, empty trailing rows and columns will not be included.
+            #
+            # For input, supported value types are: bool, string, and double.
+            # Null and empty values will be skipped.
+            # To set a cell to an empty value, set the string value to an empty string.
+          [
+            "",
+          ],
+        ],
+        "majorDimension": "A String", # The major dimension of the values.
+            #
+            # For output, if the spreadsheet data is: A1=1,B1=2,A2=3,B2=4,
+            # then requesting range=A1:B2,majorDimension=ROWS will return [[1,2],[3,4]],
+            # whereas requesting range=A1:B2,majorDimension=COLUMNS will return
+            # [[1,3],[2,4]].
+            #
+            # For input, with range=A1:B2,majorDimension=ROWS then [[1,2],[3,4]]
+            # will set A1=1,B1=2,A2=3,B2=4. With range=A1:B2,majorDimension=COLUMNS
+            # then [[1,2],[3,4]] will set A1=1,B1=3,A2=2,B2=4.
+            #
+            # When writing, if this field is not set, it defaults to ROWS.
+      },
+    ],
+    "valueInputOption": "A String", # How the input data should be interpreted.
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response when updating a range of values in a spreadsheet.
+    "responses": [ # One UpdateValuesResponse per requested range, in the same order as
+        # the requests appeared.
+      { # The response when updating a range of values in a spreadsheet.
+        "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
+        "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
+        "updatedCells": 42, # The number of cells updated.
+        "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
+        "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
+      },
+    ],
+    "totalUpdatedCells": 42, # The total number of cells updated.
+    "totalUpdatedColumns": 42, # The total number of columns where at least one cell in the column was
+        # updated.
+    "totalUpdatedRows": 42, # The total number of rows where at least one cell in the row was updated.
+    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
+    "totalUpdatedSheets": 42, # The total number of sheets where at least one cell in the sheet was
+        # updated.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(spreadsheetId, range, valueRenderOption=None, majorDimension=None, dateTimeRenderOption=None, x__xgafv=None)</code>
+  <pre>Returns a range of values from a spreadsheet.
+The caller must specify the spreadsheet ID and a range.
+
+Args:
+  spreadsheetId: string, The id of the spreadsheet to retrieve data from. (required)
+  range: string, The A1 notation of the values to retrieve. (required)
+  valueRenderOption: string, How values should be represented in the output.
+  majorDimension: string, The major dimension that results should use.
+
+For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,
+then requesting `range=A1:B2,majorDimension=ROWS` will return
+`[[1,2],[3,4]]`,
+whereas requesting `range=A1:B2,majorDimension=COLUMNS` will return
+`[[1,3],[2,4]]`.
+  dateTimeRenderOption: string, How dates, times, and durations should be represented in the output.
+This is ignored if the ValueRenderOption option is
+FORMATTED_VALUE.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Data within a range of the spreadsheet.
+    "range": "A String", # The range the values cover, in A1 notation.
+        # For output, this range indicates the entire requested range,
+        # even though the values will exclude trailing rows and columns.
+    "values": [ # The data that was read or to be written.  This is an array of arrays,
+        # the outer array representing all the data and each inner array
+        # representing a major dimension. Each item in the inner array
+        # corresponds with one cell.
+        #
+        # For output, empty trailing rows and columns will not be included.
+        #
+        # For input, supported value types are: bool, string, and double.
+        # Null and empty values will be skipped.
+        # To set a cell to an empty value, set the string value to an empty string.
+      [
+        "",
+      ],
+    ],
+    "majorDimension": "A String", # The major dimension of the values.
+        #
+        # For output, if the spreadsheet data is: A1=1,B1=2,A2=3,B2=4,
+        # then requesting range=A1:B2,majorDimension=ROWS will return [[1,2],[3,4]],
+        # whereas requesting range=A1:B2,majorDimension=COLUMNS will return
+        # [[1,3],[2,4]].
+        #
+        # For input, with range=A1:B2,majorDimension=ROWS then [[1,2],[3,4]]
+        # will set A1=1,B1=2,A2=3,B2=4. With range=A1:B2,majorDimension=COLUMNS
+        # then [[1,2],[3,4]] will set A1=1,B1=3,A2=2,B2=4.
+        #
+        # When writing, if this field is not set, it defaults to ROWS.
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="update">update(spreadsheetId, range, body, valueInputOption=None, x__xgafv=None)</code>
+  <pre>Sets values in a range of a spreadsheet.
+The caller must specify the spreadsheet ID, range, and
+a valueInputOption.
+
+Args:
+  spreadsheetId: string, The id of the spreadsheet to update. (required)
+  range: string, The A1 notation of the values to update. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Data within a range of the spreadsheet.
+  "range": "A String", # The range the values cover, in A1 notation.
+      # For output, this range indicates the entire requested range,
+      # even though the values will exclude trailing rows and columns.
+  "values": [ # The data that was read or to be written.  This is an array of arrays,
+      # the outer array representing all the data and each inner array
+      # representing a major dimension. Each item in the inner array
+      # corresponds with one cell.
+      # 
+      # For output, empty trailing rows and columns will not be included.
+      # 
+      # For input, supported value types are: bool, string, and double.
+      # Null and empty values will be skipped.
+      # To set a cell to an empty value, set the string value to an empty string.
+    [
+      "",
+    ],
+  ],
+  "majorDimension": "A String", # The major dimension of the values.
+      # 
+      # For output, if the spreadsheet data is: A1=1,B1=2,A2=3,B2=4,
+      # then requesting range=A1:B2,majorDimension=ROWS will return [[1,2],[3,4]],
+      # whereas requesting range=A1:B2,majorDimension=COLUMNS will return
+      # [[1,3],[2,4]].
+      # 
+      # For input, with range=A1:B2,majorDimension=ROWS then [[1,2],[3,4]]
+      # will set A1=1,B1=2,A2=3,B2=4. With range=A1:B2,majorDimension=COLUMNS
+      # then [[1,2],[3,4]] will set A1=1,B1=3,A2=2,B2=4.
+      # 
+      # When writing, if this field is not set, it defaults to ROWS.
+}
+
+  valueInputOption: string, How the input data should be interpreted.
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # The response when updating a range of values in a spreadsheet.
+    "updatedRange": "A String", # The range (in A1 notation) that updates were applied to.
+    "updatedColumns": 42, # The number of columns where at least one cell in the column was updated.
+    "updatedCells": 42, # The number of cells updated.
+    "updatedRows": 42, # The number of rows where at least one cell in the row was updated.
+    "spreadsheetId": "A String", # The spreadsheet the updates were applied to.
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/sqladmin_v1beta4.databases.html b/docs/dyn/sqladmin_v1beta4.databases.html
index 8818509..61b86b9 100644
--- a/docs/dyn/sqladmin_v1beta4.databases.html
+++ b/docs/dyn/sqladmin_v1beta4.databases.html
@@ -76,7 +76,7 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#delete">delete(project, instance, database)</a></code></p>
-<p class="firstline">Deletes a resource containing information about a database inside a Cloud SQL instance.</p>
+<p class="firstline">Deletes a database from a Cloud SQL instance.</p>
 <p class="toc_element">
   <code><a href="#get">get(project, instance, database)</a></code></p>
 <p class="firstline">Retrieves a resource containing information about a database inside a Cloud SQL instance.</p>
@@ -95,7 +95,7 @@
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="delete">delete(project, instance, database)</code>
-  <pre>Deletes a resource containing information about a database inside a Cloud SQL instance.
+  <pre>Deletes a database from a Cloud SQL instance.
 
 Args:
   project: string, Project ID of the project that contains the instance. (required)
diff --git a/docs/dyn/sqladmin_v1beta4.flags.html b/docs/dyn/sqladmin_v1beta4.flags.html
index be539f9..2d1e233 100644
--- a/docs/dyn/sqladmin_v1beta4.flags.html
+++ b/docs/dyn/sqladmin_v1beta4.flags.html
@@ -96,7 +96,7 @@
           "A String",
         ],
         "requiresRestart": True or False, # Indicates whether changing this flag will trigger a database restart. Only applicable to Second Generation instances.
-        "appliesTo": [ # The database version this flag applies to. Can be MYSQL_5_5, MYSQL_5_6, or both.
+        "appliesTo": [ # The database version this flag applies to. Can be MYSQL_5_5, MYSQL_5_6, or MYSQL_5_7. MYSQL_5_7 is applicable only to Second Generation instances.
           "A String",
         ],
         "maxValue": "A String", # For INTEGER flags, the maximum allowed value.
diff --git a/docs/dyn/sqladmin_v1beta4.instances.html b/docs/dyn/sqladmin_v1beta4.instances.html
index 0ddfa3c..43410f4 100644
--- a/docs/dyn/sqladmin_v1beta4.instances.html
+++ b/docs/dyn/sqladmin_v1beta4.instances.html
@@ -76,7 +76,7 @@
 <h2>Instance Methods</h2>
 <p class="toc_element">
   <code><a href="#clone">clone(project, instance, body)</a></code></p>
-<p class="firstline">Creates a Cloud SQL instance as a clone of the source instance.</p>
+<p class="firstline">Creates a Cloud SQL instance as a clone of the source instance. The API is not ready for Second Generation instances yet.</p>
 <p class="toc_element">
   <code><a href="#delete">delete(project, instance)</a></code></p>
 <p class="firstline">Deletes a Cloud SQL instance.</p>
@@ -128,7 +128,7 @@
 <h3>Method Details</h3>
 <div class="method">
     <code class="details" id="clone">clone(project, instance, body)</code>
-  <pre>Creates a Cloud SQL instance as a clone of the source instance.
+  <pre>Creates a Cloud SQL instance as a clone of the source instance. The API is not ready for Second Generation instances yet.
 
 Args:
   project: string, Project ID of the source as well as the clone Cloud SQL instance. (required)
@@ -468,16 +468,116 @@
   An object of the form:
 
     { # A Cloud SQL instance resource.
+      "backendType": "A String", # FIRST_GEN: Basic Cloud SQL instance that runs in a Google-managed container.
+          # SECOND_GEN: A newer Cloud SQL backend that runs in a Compute Engine VM.
+          # EXTERNAL: A MySQL server that is not managed by Google.
+      "currentDiskSize": "A String", # The current disk usage of the instance in bytes. This property has been deprecated. Users should use the "cloudsql.googleapis.com/database/disk/bytes_used" metric in Cloud Monitoring API instead. Please see https://groups.google.com/d/msg/google-cloud-sql-announce/I_7-F9EBhT0/BtvFtdFeAgAJ for details.
+      "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance. This property is applicable only to Second Generation instances.
+      "ipAddresses": [ # The assigned IP addresses for the instance.
+        { # Database instance IP Mapping.
+          "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
+          "ipAddress": "A String", # The IP address assigned.
+        },
+      ],
+      "databaseVersion": "A String", # The database engine type and version. The databaseVersion can not be changed after instance creation. Can be MYSQL_5_5, MYSQL_5_6 or MYSQL_5_7. Defaults to MYSQL_5_6. MYSQL_5_7 is applicable only to Second Generation instances.
+      "instanceType": "A String", # The instance type. This can be one of the following.
+          # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
+          # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
+          # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
+      "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
+      "suspensionReason": [ # If the instance state is SUSPENDED, the reason for the suspension.
+        "A String",
+      ],
+      "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
+      "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
+          # RUNNABLE: The instance is running, or is ready to run when accessed.
+          # SUSPENDED: The instance is not available, for example due to problems with billing.
+          # PENDING_CREATE: The instance is being created.
+          # MAINTENANCE: The instance is down for maintenance.
+          # FAILED: The instance creation failed.
+          # UNKNOWN_STATE: The state of the instance is unknown.
+      "etag": "A String", # HTTP 1.1 Entity tag for the resource.
+      "failoverReplica": { # The name and status of the failover replica. This property is applicable only to Second Generation instances.
+        "available": True or False, # The availability status of the failover replica. A false status indicates that the failover replica is out of sync. The master can only failover to the falover replica when the status is true.
+        "name": "A String", # The name of the failover replica.
+      },
+      "replicaNames": [ # The replicas of the instance.
+        "A String",
+      ],
       "onPremisesConfiguration": { # On-premises instance configuration. # Configuration specific to on-premises instances.
         "kind": "sql#onPremisesConfiguration", # This is always sql#onPremisesConfiguration.
         "hostPort": "A String", # The host and port of the on-premises instance in host:port format
       },
       "kind": "sql#instance", # This is always sql#instance.
-      "failoverReplica": { # The name and status of the failover replica. Only applies to Second Generation instances.
-        "available": True or False,
-        "name": "A String",
+      "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
+      "ipv6Address": "A String", # The IPv6 address assigned to the instance. This property is applicable only to First Generation instances.
+      "serverCaCert": { # SslCerts Resource # SSL configuration.
+        "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
+        "kind": "sql#sslCert", # This is always sql#sslCert.
+        "sha1Fingerprint": "A String", # Sha1 Fingerprint.
+        "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
+        "instance": "A String", # Name of the database instance.
+        "cert": "A String", # PEM representation.
+        "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+        "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
+        "selfLink": "A String", # The URI of this resource.
       },
-      "ipv6Address": "A String", # The IPv6 address assigned to the instance.
+      "region": "A String", # The geographical region. Can be us-central (FIRST_GEN instances only), us-central1 (SECOND_GEN instances only), asia-east1 or europe-west1. Defaults to us-central or us-central1 depending on the instance type (First Generation or Second Generation). The region can not be changed after instance creation.
+      "settings": { # Database instance settings. # The user settings.
+        "databaseFlags": [ # The database flags passed to the instance at startup.
+          { # MySQL flags for Cloud SQL instances.
+            "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
+            "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
+          },
+        ],
+        "kind": "sql#settings", # This is always sql#settings.
+        "dataDiskType": "A String", # The type of data disk. Only supported for Second Generation instances. The default type is PD_SSD. Applies only to Second Generation instances.
+        "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes. Applies only to Second Generation instances.
+          "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
+          "updateTrack": "A String",
+          "day": 42, # day of week (1-7), starting on Monday.
+          "hour": 42, # hour of day - 0 to 23.
+        },
+        "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance. This property is only applicable to First Generation instances.
+          "A String",
+        ],
+        "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
+            # ALWAYS: The instance should always be active.
+            # NEVER: The instance should never be activated.
+            # ON_DEMAND: The instance is activated upon receiving requests; only applicable to First Generation instances.
+        "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
+          "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
+          "enabled": True or False, # Whether this configuration is enabled.
+          "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
+          "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
+        },
+        "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance. The IPv4 address cannot be disabled for Second Generation instances.
+          "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
+          "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
+          "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
+            { # An entry for an Access Control list.
+              "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+              "kind": "sql#aclEntry", # This is always sql#aclEntry.
+              "value": "A String", # The whitelisted value for the access control list.
+              "name": "A String", # An optional label to identify this entry.
+            },
+          ],
+        },
+        "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
+        "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
+        "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS. This property is only applicable to First Generation instances.
+        "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled. This property is only applicable to First Generation instances.
+        "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE. Only PER_USE is supported for Second Generation instances.
+        "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
+        "storageAutoResize": True or False, # Configuration to increase storage size automatically. The default value is false. Applies only to Second Generation instances.
+        "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance. App Engine co-location is only applicable to First Generation instances.
+          "kind": "sql#locationPreference", # This is always sql#locationPreference.
+          "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
+          "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
+        },
+        "dataDiskSizeGb": "A String", # The size of data disk, in GB. The data disk size minimum is 10GB. Applies only to Second Generation instances.
+      },
+      "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
       "replicaConfiguration": { # Read-replica configuration for connecting to the master. # Configuration specific to read-replicas replicating from on-premises masters.
         "kind": "sql#replicaConfiguration", # This is always sql#replicaConfiguration.
         "failoverTarget": True or False, # Specifies if the replica is the failover target. If the field is set to true the replica will be designated as a failover replica. In case the master instance fails, the replica instance will be promoted as the new master instance.
@@ -496,100 +596,7 @@
           "connectRetryInterval": 42, # Seconds to wait between connect retries. MySQL's default is 60 seconds.
         },
       },
-      "replicaNames": [ # The replicas of the instance.
-        "A String",
-      ],
-      "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
-      "region": "A String", # The geographical region. Can be us-central, asia-east1 or europe-west1. Defaults to us-central. The region can not be changed after instance creation.
-      "serverCaCert": { # SslCerts Resource # SSL configuration.
-        "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
-        "kind": "sql#sslCert", # This is always sql#sslCert.
-        "sha1Fingerprint": "A String", # Sha1 Fingerprint.
-        "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
-        "instance": "A String", # Name of the database instance.
-        "cert": "A String", # PEM representation.
-        "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-        "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
-        "selfLink": "A String", # The URI of this resource.
-      },
-      "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
-      "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
-      "currentDiskSize": "A String", # The current disk usage of the instance in bytes.
-      "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
-          # RUNNABLE: The instance is running, or is ready to run when accessed.
-          # SUSPENDED: The instance is not available, for example due to problems with billing.
-          # PENDING_CREATE: The instance is being created.
-          # MAINTENANCE: The instance is down for maintenance.
-          # FAILED: The instance creation failed.
-          # UNKNOWN_STATE: The state of the instance is unknown.
-      "etag": "A String", # HTTP 1.1 Entity tag for the resource.
-      "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance.
-      "ipAddresses": [ # The assigned IP addresses for the instance.
-        { # Database instance IP Mapping.
-          "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
-          "ipAddress": "A String", # The IP address assigned.
-        },
-      ],
-      "databaseVersion": "A String", # The database engine type and version. Can be MYSQL_5_5 or MYSQL_5_6. Defaults to MYSQL_5_5. The databaseVersion can not be changed after instance creation.
-      "settings": { # Database instance settings. # The user settings.
-        "databaseFlags": [ # The database flags passed to the instance at startup.
-          { # MySQL flags for Cloud SQL instances.
-            "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
-            "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
-          },
-        ],
-        "kind": "sql#settings", # This is always sql#settings.
-        "dataDiskType": "A String", # The type of data disk. Only supported for 2nd Generation instances. The default type is SSD.
-        "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes.
-          "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
-          "updateTrack": "A String",
-          "day": 42, # day of week (1-7), starting on Monday.
-          "hour": 42, # hour of day - 0 to 23.
-        },
-        "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance.
-          "A String",
-        ],
-        "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
-            # ALWAYS: The instance should always be active.
-            # NEVER: The instance should never be activated.
-            # ON_DEMAND: The instance is activated upon receiving requests.
-        "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
-          "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
-          "enabled": True or False, # Whether this configuration is enabled.
-          "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
-          "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
-        },
-        "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance.
-          "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
-          "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
-          "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
-            { # An entry for an Access Control list.
-              "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-              "kind": "sql#aclEntry", # This is always sql#aclEntry.
-              "value": "A String", # The whitelisted value for the access control list.
-              "name": "A String", # An optional label to identify this entry.
-            },
-          ],
-        },
-        "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
-        "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
-        "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS.
-        "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled.
-        "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE.
-        "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
-        "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance.
-          "kind": "sql#locationPreference", # This is always sql#locationPreference.
-          "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
-          "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
-        },
-        "dataDiskSizeGb": "A String", # The size of data disk, in GB. Only supported for 2nd Generation instances. The data disk size minimum is 10GB.
-      },
-      "instanceType": "A String", # The instance type. This can be one of the following.
-          # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
-          # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
-          # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
       "selfLink": "A String", # The URI of this resource.
-      "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
     }</pre>
 </div>
 
@@ -693,16 +700,116 @@
     The object takes the form of:
 
 { # A Cloud SQL instance resource.
+    "backendType": "A String", # FIRST_GEN: Basic Cloud SQL instance that runs in a Google-managed container.
+        # SECOND_GEN: A newer Cloud SQL backend that runs in a Compute Engine VM.
+        # EXTERNAL: A MySQL server that is not managed by Google.
+    "currentDiskSize": "A String", # The current disk usage of the instance in bytes. This property has been deprecated. Users should use the "cloudsql.googleapis.com/database/disk/bytes_used" metric in Cloud Monitoring API instead. Please see https://groups.google.com/d/msg/google-cloud-sql-announce/I_7-F9EBhT0/BtvFtdFeAgAJ for details.
+    "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance. This property is applicable only to Second Generation instances.
+    "ipAddresses": [ # The assigned IP addresses for the instance.
+      { # Database instance IP Mapping.
+        "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
+        "ipAddress": "A String", # The IP address assigned.
+      },
+    ],
+    "databaseVersion": "A String", # The database engine type and version. The databaseVersion can not be changed after instance creation. Can be MYSQL_5_5, MYSQL_5_6 or MYSQL_5_7. Defaults to MYSQL_5_6. MYSQL_5_7 is applicable only to Second Generation instances.
+    "instanceType": "A String", # The instance type. This can be one of the following.
+        # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
+        # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
+        # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
+    "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
+    "suspensionReason": [ # If the instance state is SUSPENDED, the reason for the suspension.
+      "A String",
+    ],
+    "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
+    "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
+        # RUNNABLE: The instance is running, or is ready to run when accessed.
+        # SUSPENDED: The instance is not available, for example due to problems with billing.
+        # PENDING_CREATE: The instance is being created.
+        # MAINTENANCE: The instance is down for maintenance.
+        # FAILED: The instance creation failed.
+        # UNKNOWN_STATE: The state of the instance is unknown.
+    "etag": "A String", # HTTP 1.1 Entity tag for the resource.
+    "failoverReplica": { # The name and status of the failover replica. This property is applicable only to Second Generation instances.
+      "available": True or False, # The availability status of the failover replica. A false status indicates that the failover replica is out of sync. The master can only failover to the falover replica when the status is true.
+      "name": "A String", # The name of the failover replica.
+    },
+    "replicaNames": [ # The replicas of the instance.
+      "A String",
+    ],
     "onPremisesConfiguration": { # On-premises instance configuration. # Configuration specific to on-premises instances.
       "kind": "sql#onPremisesConfiguration", # This is always sql#onPremisesConfiguration.
       "hostPort": "A String", # The host and port of the on-premises instance in host:port format
     },
     "kind": "sql#instance", # This is always sql#instance.
-    "failoverReplica": { # The name and status of the failover replica. Only applies to Second Generation instances.
-      "available": True or False,
-      "name": "A String",
+    "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
+    "ipv6Address": "A String", # The IPv6 address assigned to the instance. This property is applicable only to First Generation instances.
+    "serverCaCert": { # SslCerts Resource # SSL configuration.
+      "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
+      "kind": "sql#sslCert", # This is always sql#sslCert.
+      "sha1Fingerprint": "A String", # Sha1 Fingerprint.
+      "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
+      "instance": "A String", # Name of the database instance.
+      "cert": "A String", # PEM representation.
+      "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+      "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
+      "selfLink": "A String", # The URI of this resource.
     },
-    "ipv6Address": "A String", # The IPv6 address assigned to the instance.
+    "region": "A String", # The geographical region. Can be us-central (FIRST_GEN instances only), us-central1 (SECOND_GEN instances only), asia-east1 or europe-west1. Defaults to us-central or us-central1 depending on the instance type (First Generation or Second Generation). The region can not be changed after instance creation.
+    "settings": { # Database instance settings. # The user settings.
+      "databaseFlags": [ # The database flags passed to the instance at startup.
+        { # MySQL flags for Cloud SQL instances.
+          "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
+          "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
+        },
+      ],
+      "kind": "sql#settings", # This is always sql#settings.
+      "dataDiskType": "A String", # The type of data disk. Only supported for Second Generation instances. The default type is PD_SSD. Applies only to Second Generation instances.
+      "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes. Applies only to Second Generation instances.
+        "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
+        "updateTrack": "A String",
+        "day": 42, # day of week (1-7), starting on Monday.
+        "hour": 42, # hour of day - 0 to 23.
+      },
+      "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance. This property is only applicable to First Generation instances.
+        "A String",
+      ],
+      "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
+          # ALWAYS: The instance should always be active.
+          # NEVER: The instance should never be activated.
+          # ON_DEMAND: The instance is activated upon receiving requests; only applicable to First Generation instances.
+      "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
+        "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
+        "enabled": True or False, # Whether this configuration is enabled.
+        "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
+        "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
+      },
+      "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance. The IPv4 address cannot be disabled for Second Generation instances.
+        "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
+        "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
+        "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
+          { # An entry for an Access Control list.
+            "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+            "kind": "sql#aclEntry", # This is always sql#aclEntry.
+            "value": "A String", # The whitelisted value for the access control list.
+            "name": "A String", # An optional label to identify this entry.
+          },
+        ],
+      },
+      "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
+      "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
+      "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS. This property is only applicable to First Generation instances.
+      "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled. This property is only applicable to First Generation instances.
+      "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE. Only PER_USE is supported for Second Generation instances.
+      "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
+      "storageAutoResize": True or False, # Configuration to increase storage size automatically. The default value is false. Applies only to Second Generation instances.
+      "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance. App Engine co-location is only applicable to First Generation instances.
+        "kind": "sql#locationPreference", # This is always sql#locationPreference.
+        "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
+        "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
+      },
+      "dataDiskSizeGb": "A String", # The size of data disk, in GB. The data disk size minimum is 10GB. Applies only to Second Generation instances.
+    },
+    "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
     "replicaConfiguration": { # Read-replica configuration for connecting to the master. # Configuration specific to read-replicas replicating from on-premises masters.
       "kind": "sql#replicaConfiguration", # This is always sql#replicaConfiguration.
       "failoverTarget": True or False, # Specifies if the replica is the failover target. If the field is set to true the replica will be designated as a failover replica. In case the master instance fails, the replica instance will be promoted as the new master instance.
@@ -721,100 +828,7 @@
         "connectRetryInterval": 42, # Seconds to wait between connect retries. MySQL's default is 60 seconds.
       },
     },
-    "replicaNames": [ # The replicas of the instance.
-      "A String",
-    ],
-    "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
-    "region": "A String", # The geographical region. Can be us-central, asia-east1 or europe-west1. Defaults to us-central. The region can not be changed after instance creation.
-    "serverCaCert": { # SslCerts Resource # SSL configuration.
-      "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
-      "kind": "sql#sslCert", # This is always sql#sslCert.
-      "sha1Fingerprint": "A String", # Sha1 Fingerprint.
-      "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
-      "instance": "A String", # Name of the database instance.
-      "cert": "A String", # PEM representation.
-      "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-      "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
-      "selfLink": "A String", # The URI of this resource.
-    },
-    "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
-    "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
-    "currentDiskSize": "A String", # The current disk usage of the instance in bytes.
-    "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
-        # RUNNABLE: The instance is running, or is ready to run when accessed.
-        # SUSPENDED: The instance is not available, for example due to problems with billing.
-        # PENDING_CREATE: The instance is being created.
-        # MAINTENANCE: The instance is down for maintenance.
-        # FAILED: The instance creation failed.
-        # UNKNOWN_STATE: The state of the instance is unknown.
-    "etag": "A String", # HTTP 1.1 Entity tag for the resource.
-    "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance.
-    "ipAddresses": [ # The assigned IP addresses for the instance.
-      { # Database instance IP Mapping.
-        "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
-        "ipAddress": "A String", # The IP address assigned.
-      },
-    ],
-    "databaseVersion": "A String", # The database engine type and version. Can be MYSQL_5_5 or MYSQL_5_6. Defaults to MYSQL_5_5. The databaseVersion can not be changed after instance creation.
-    "settings": { # Database instance settings. # The user settings.
-      "databaseFlags": [ # The database flags passed to the instance at startup.
-        { # MySQL flags for Cloud SQL instances.
-          "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
-          "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
-        },
-      ],
-      "kind": "sql#settings", # This is always sql#settings.
-      "dataDiskType": "A String", # The type of data disk. Only supported for 2nd Generation instances. The default type is SSD.
-      "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes.
-        "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
-        "updateTrack": "A String",
-        "day": 42, # day of week (1-7), starting on Monday.
-        "hour": 42, # hour of day - 0 to 23.
-      },
-      "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance.
-        "A String",
-      ],
-      "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
-          # ALWAYS: The instance should always be active.
-          # NEVER: The instance should never be activated.
-          # ON_DEMAND: The instance is activated upon receiving requests.
-      "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
-        "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
-        "enabled": True or False, # Whether this configuration is enabled.
-        "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
-        "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
-      },
-      "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance.
-        "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
-        "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
-        "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
-          { # An entry for an Access Control list.
-            "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-            "kind": "sql#aclEntry", # This is always sql#aclEntry.
-            "value": "A String", # The whitelisted value for the access control list.
-            "name": "A String", # An optional label to identify this entry.
-          },
-        ],
-      },
-      "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
-      "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
-      "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS.
-      "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled.
-      "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE.
-      "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
-      "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance.
-        "kind": "sql#locationPreference", # This is always sql#locationPreference.
-        "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
-        "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
-      },
-      "dataDiskSizeGb": "A String", # The size of data disk, in GB. Only supported for 2nd Generation instances. The data disk size minimum is 10GB.
-    },
-    "instanceType": "A String", # The instance type. This can be one of the following.
-        # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
-        # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
-        # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
     "selfLink": "A String", # The URI of this resource.
-    "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
   }
 
 
@@ -896,16 +910,116 @@
     "nextPageToken": "A String", # The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results.
     "items": [ # List of database instance resources.
       { # A Cloud SQL instance resource.
+          "backendType": "A String", # FIRST_GEN: Basic Cloud SQL instance that runs in a Google-managed container.
+              # SECOND_GEN: A newer Cloud SQL backend that runs in a Compute Engine VM.
+              # EXTERNAL: A MySQL server that is not managed by Google.
+          "currentDiskSize": "A String", # The current disk usage of the instance in bytes. This property has been deprecated. Users should use the "cloudsql.googleapis.com/database/disk/bytes_used" metric in Cloud Monitoring API instead. Please see https://groups.google.com/d/msg/google-cloud-sql-announce/I_7-F9EBhT0/BtvFtdFeAgAJ for details.
+          "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance. This property is applicable only to Second Generation instances.
+          "ipAddresses": [ # The assigned IP addresses for the instance.
+            { # Database instance IP Mapping.
+              "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
+              "ipAddress": "A String", # The IP address assigned.
+            },
+          ],
+          "databaseVersion": "A String", # The database engine type and version. The databaseVersion can not be changed after instance creation. Can be MYSQL_5_5, MYSQL_5_6 or MYSQL_5_7. Defaults to MYSQL_5_6. MYSQL_5_7 is applicable only to Second Generation instances.
+          "instanceType": "A String", # The instance type. This can be one of the following.
+              # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
+              # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
+              # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
+          "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
+          "suspensionReason": [ # If the instance state is SUSPENDED, the reason for the suspension.
+            "A String",
+          ],
+          "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
+          "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
+              # RUNNABLE: The instance is running, or is ready to run when accessed.
+              # SUSPENDED: The instance is not available, for example due to problems with billing.
+              # PENDING_CREATE: The instance is being created.
+              # MAINTENANCE: The instance is down for maintenance.
+              # FAILED: The instance creation failed.
+              # UNKNOWN_STATE: The state of the instance is unknown.
+          "etag": "A String", # HTTP 1.1 Entity tag for the resource.
+          "failoverReplica": { # The name and status of the failover replica. This property is applicable only to Second Generation instances.
+            "available": True or False, # The availability status of the failover replica. A false status indicates that the failover replica is out of sync. The master can only failover to the falover replica when the status is true.
+            "name": "A String", # The name of the failover replica.
+          },
+          "replicaNames": [ # The replicas of the instance.
+            "A String",
+          ],
           "onPremisesConfiguration": { # On-premises instance configuration. # Configuration specific to on-premises instances.
             "kind": "sql#onPremisesConfiguration", # This is always sql#onPremisesConfiguration.
             "hostPort": "A String", # The host and port of the on-premises instance in host:port format
           },
           "kind": "sql#instance", # This is always sql#instance.
-          "failoverReplica": { # The name and status of the failover replica. Only applies to Second Generation instances.
-            "available": True or False,
-            "name": "A String",
+          "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
+          "ipv6Address": "A String", # The IPv6 address assigned to the instance. This property is applicable only to First Generation instances.
+          "serverCaCert": { # SslCerts Resource # SSL configuration.
+            "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
+            "kind": "sql#sslCert", # This is always sql#sslCert.
+            "sha1Fingerprint": "A String", # Sha1 Fingerprint.
+            "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
+            "instance": "A String", # Name of the database instance.
+            "cert": "A String", # PEM representation.
+            "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+            "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
+            "selfLink": "A String", # The URI of this resource.
           },
-          "ipv6Address": "A String", # The IPv6 address assigned to the instance.
+          "region": "A String", # The geographical region. Can be us-central (FIRST_GEN instances only), us-central1 (SECOND_GEN instances only), asia-east1 or europe-west1. Defaults to us-central or us-central1 depending on the instance type (First Generation or Second Generation). The region can not be changed after instance creation.
+          "settings": { # Database instance settings. # The user settings.
+            "databaseFlags": [ # The database flags passed to the instance at startup.
+              { # MySQL flags for Cloud SQL instances.
+                "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
+                "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
+              },
+            ],
+            "kind": "sql#settings", # This is always sql#settings.
+            "dataDiskType": "A String", # The type of data disk. Only supported for Second Generation instances. The default type is PD_SSD. Applies only to Second Generation instances.
+            "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes. Applies only to Second Generation instances.
+              "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
+              "updateTrack": "A String",
+              "day": 42, # day of week (1-7), starting on Monday.
+              "hour": 42, # hour of day - 0 to 23.
+            },
+            "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance. This property is only applicable to First Generation instances.
+              "A String",
+            ],
+            "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
+                # ALWAYS: The instance should always be active.
+                # NEVER: The instance should never be activated.
+                # ON_DEMAND: The instance is activated upon receiving requests; only applicable to First Generation instances.
+            "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
+              "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
+              "enabled": True or False, # Whether this configuration is enabled.
+              "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
+              "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
+            },
+            "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance. The IPv4 address cannot be disabled for Second Generation instances.
+              "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
+              "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
+              "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
+                { # An entry for an Access Control list.
+                  "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+                  "kind": "sql#aclEntry", # This is always sql#aclEntry.
+                  "value": "A String", # The whitelisted value for the access control list.
+                  "name": "A String", # An optional label to identify this entry.
+                },
+              ],
+            },
+            "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
+            "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
+            "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS. This property is only applicable to First Generation instances.
+            "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled. This property is only applicable to First Generation instances.
+            "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE. Only PER_USE is supported for Second Generation instances.
+            "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
+            "storageAutoResize": True or False, # Configuration to increase storage size automatically. The default value is false. Applies only to Second Generation instances.
+            "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance. App Engine co-location is only applicable to First Generation instances.
+              "kind": "sql#locationPreference", # This is always sql#locationPreference.
+              "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
+              "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
+            },
+            "dataDiskSizeGb": "A String", # The size of data disk, in GB. The data disk size minimum is 10GB. Applies only to Second Generation instances.
+          },
+          "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
           "replicaConfiguration": { # Read-replica configuration for connecting to the master. # Configuration specific to read-replicas replicating from on-premises masters.
             "kind": "sql#replicaConfiguration", # This is always sql#replicaConfiguration.
             "failoverTarget": True or False, # Specifies if the replica is the failover target. If the field is set to true the replica will be designated as a failover replica. In case the master instance fails, the replica instance will be promoted as the new master instance.
@@ -924,100 +1038,7 @@
               "connectRetryInterval": 42, # Seconds to wait between connect retries. MySQL's default is 60 seconds.
             },
           },
-          "replicaNames": [ # The replicas of the instance.
-            "A String",
-          ],
-          "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
-          "region": "A String", # The geographical region. Can be us-central, asia-east1 or europe-west1. Defaults to us-central. The region can not be changed after instance creation.
-          "serverCaCert": { # SslCerts Resource # SSL configuration.
-            "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
-            "kind": "sql#sslCert", # This is always sql#sslCert.
-            "sha1Fingerprint": "A String", # Sha1 Fingerprint.
-            "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
-            "instance": "A String", # Name of the database instance.
-            "cert": "A String", # PEM representation.
-            "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-            "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
-            "selfLink": "A String", # The URI of this resource.
-          },
-          "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
-          "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
-          "currentDiskSize": "A String", # The current disk usage of the instance in bytes.
-          "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
-              # RUNNABLE: The instance is running, or is ready to run when accessed.
-              # SUSPENDED: The instance is not available, for example due to problems with billing.
-              # PENDING_CREATE: The instance is being created.
-              # MAINTENANCE: The instance is down for maintenance.
-              # FAILED: The instance creation failed.
-              # UNKNOWN_STATE: The state of the instance is unknown.
-          "etag": "A String", # HTTP 1.1 Entity tag for the resource.
-          "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance.
-          "ipAddresses": [ # The assigned IP addresses for the instance.
-            { # Database instance IP Mapping.
-              "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
-              "ipAddress": "A String", # The IP address assigned.
-            },
-          ],
-          "databaseVersion": "A String", # The database engine type and version. Can be MYSQL_5_5 or MYSQL_5_6. Defaults to MYSQL_5_5. The databaseVersion can not be changed after instance creation.
-          "settings": { # Database instance settings. # The user settings.
-            "databaseFlags": [ # The database flags passed to the instance at startup.
-              { # MySQL flags for Cloud SQL instances.
-                "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
-                "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
-              },
-            ],
-            "kind": "sql#settings", # This is always sql#settings.
-            "dataDiskType": "A String", # The type of data disk. Only supported for 2nd Generation instances. The default type is SSD.
-            "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes.
-              "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
-              "updateTrack": "A String",
-              "day": 42, # day of week (1-7), starting on Monday.
-              "hour": 42, # hour of day - 0 to 23.
-            },
-            "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance.
-              "A String",
-            ],
-            "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
-                # ALWAYS: The instance should always be active.
-                # NEVER: The instance should never be activated.
-                # ON_DEMAND: The instance is activated upon receiving requests.
-            "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
-              "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
-              "enabled": True or False, # Whether this configuration is enabled.
-              "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
-              "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
-            },
-            "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance.
-              "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
-              "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
-              "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
-                { # An entry for an Access Control list.
-                  "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-                  "kind": "sql#aclEntry", # This is always sql#aclEntry.
-                  "value": "A String", # The whitelisted value for the access control list.
-                  "name": "A String", # An optional label to identify this entry.
-                },
-              ],
-            },
-            "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
-            "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
-            "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS.
-            "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled.
-            "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE.
-            "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
-            "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance.
-              "kind": "sql#locationPreference", # This is always sql#locationPreference.
-              "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
-              "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
-            },
-            "dataDiskSizeGb": "A String", # The size of data disk, in GB. Only supported for 2nd Generation instances. The data disk size minimum is 10GB.
-          },
-          "instanceType": "A String", # The instance type. This can be one of the following.
-              # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
-              # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
-              # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
           "selfLink": "A String", # The URI of this resource.
-          "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
         },
     ],
     "kind": "sql#instancesList", # This is always sql#instancesList.
@@ -1049,16 +1070,116 @@
     The object takes the form of:
 
 { # A Cloud SQL instance resource.
+    "backendType": "A String", # FIRST_GEN: Basic Cloud SQL instance that runs in a Google-managed container.
+        # SECOND_GEN: A newer Cloud SQL backend that runs in a Compute Engine VM.
+        # EXTERNAL: A MySQL server that is not managed by Google.
+    "currentDiskSize": "A String", # The current disk usage of the instance in bytes. This property has been deprecated. Users should use the "cloudsql.googleapis.com/database/disk/bytes_used" metric in Cloud Monitoring API instead. Please see https://groups.google.com/d/msg/google-cloud-sql-announce/I_7-F9EBhT0/BtvFtdFeAgAJ for details.
+    "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance. This property is applicable only to Second Generation instances.
+    "ipAddresses": [ # The assigned IP addresses for the instance.
+      { # Database instance IP Mapping.
+        "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
+        "ipAddress": "A String", # The IP address assigned.
+      },
+    ],
+    "databaseVersion": "A String", # The database engine type and version. The databaseVersion can not be changed after instance creation. Can be MYSQL_5_5, MYSQL_5_6 or MYSQL_5_7. Defaults to MYSQL_5_6. MYSQL_5_7 is applicable only to Second Generation instances.
+    "instanceType": "A String", # The instance type. This can be one of the following.
+        # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
+        # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
+        # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
+    "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
+    "suspensionReason": [ # If the instance state is SUSPENDED, the reason for the suspension.
+      "A String",
+    ],
+    "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
+    "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
+        # RUNNABLE: The instance is running, or is ready to run when accessed.
+        # SUSPENDED: The instance is not available, for example due to problems with billing.
+        # PENDING_CREATE: The instance is being created.
+        # MAINTENANCE: The instance is down for maintenance.
+        # FAILED: The instance creation failed.
+        # UNKNOWN_STATE: The state of the instance is unknown.
+    "etag": "A String", # HTTP 1.1 Entity tag for the resource.
+    "failoverReplica": { # The name and status of the failover replica. This property is applicable only to Second Generation instances.
+      "available": True or False, # The availability status of the failover replica. A false status indicates that the failover replica is out of sync. The master can only failover to the falover replica when the status is true.
+      "name": "A String", # The name of the failover replica.
+    },
+    "replicaNames": [ # The replicas of the instance.
+      "A String",
+    ],
     "onPremisesConfiguration": { # On-premises instance configuration. # Configuration specific to on-premises instances.
       "kind": "sql#onPremisesConfiguration", # This is always sql#onPremisesConfiguration.
       "hostPort": "A String", # The host and port of the on-premises instance in host:port format
     },
     "kind": "sql#instance", # This is always sql#instance.
-    "failoverReplica": { # The name and status of the failover replica. Only applies to Second Generation instances.
-      "available": True or False,
-      "name": "A String",
+    "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
+    "ipv6Address": "A String", # The IPv6 address assigned to the instance. This property is applicable only to First Generation instances.
+    "serverCaCert": { # SslCerts Resource # SSL configuration.
+      "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
+      "kind": "sql#sslCert", # This is always sql#sslCert.
+      "sha1Fingerprint": "A String", # Sha1 Fingerprint.
+      "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
+      "instance": "A String", # Name of the database instance.
+      "cert": "A String", # PEM representation.
+      "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+      "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
+      "selfLink": "A String", # The URI of this resource.
     },
-    "ipv6Address": "A String", # The IPv6 address assigned to the instance.
+    "region": "A String", # The geographical region. Can be us-central (FIRST_GEN instances only), us-central1 (SECOND_GEN instances only), asia-east1 or europe-west1. Defaults to us-central or us-central1 depending on the instance type (First Generation or Second Generation). The region can not be changed after instance creation.
+    "settings": { # Database instance settings. # The user settings.
+      "databaseFlags": [ # The database flags passed to the instance at startup.
+        { # MySQL flags for Cloud SQL instances.
+          "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
+          "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
+        },
+      ],
+      "kind": "sql#settings", # This is always sql#settings.
+      "dataDiskType": "A String", # The type of data disk. Only supported for Second Generation instances. The default type is PD_SSD. Applies only to Second Generation instances.
+      "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes. Applies only to Second Generation instances.
+        "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
+        "updateTrack": "A String",
+        "day": 42, # day of week (1-7), starting on Monday.
+        "hour": 42, # hour of day - 0 to 23.
+      },
+      "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance. This property is only applicable to First Generation instances.
+        "A String",
+      ],
+      "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
+          # ALWAYS: The instance should always be active.
+          # NEVER: The instance should never be activated.
+          # ON_DEMAND: The instance is activated upon receiving requests; only applicable to First Generation instances.
+      "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
+        "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
+        "enabled": True or False, # Whether this configuration is enabled.
+        "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
+        "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
+      },
+      "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance. The IPv4 address cannot be disabled for Second Generation instances.
+        "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
+        "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
+        "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
+          { # An entry for an Access Control list.
+            "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+            "kind": "sql#aclEntry", # This is always sql#aclEntry.
+            "value": "A String", # The whitelisted value for the access control list.
+            "name": "A String", # An optional label to identify this entry.
+          },
+        ],
+      },
+      "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
+      "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
+      "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS. This property is only applicable to First Generation instances.
+      "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled. This property is only applicable to First Generation instances.
+      "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE. Only PER_USE is supported for Second Generation instances.
+      "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
+      "storageAutoResize": True or False, # Configuration to increase storage size automatically. The default value is false. Applies only to Second Generation instances.
+      "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance. App Engine co-location is only applicable to First Generation instances.
+        "kind": "sql#locationPreference", # This is always sql#locationPreference.
+        "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
+        "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
+      },
+      "dataDiskSizeGb": "A String", # The size of data disk, in GB. The data disk size minimum is 10GB. Applies only to Second Generation instances.
+    },
+    "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
     "replicaConfiguration": { # Read-replica configuration for connecting to the master. # Configuration specific to read-replicas replicating from on-premises masters.
       "kind": "sql#replicaConfiguration", # This is always sql#replicaConfiguration.
       "failoverTarget": True or False, # Specifies if the replica is the failover target. If the field is set to true the replica will be designated as a failover replica. In case the master instance fails, the replica instance will be promoted as the new master instance.
@@ -1077,100 +1198,7 @@
         "connectRetryInterval": 42, # Seconds to wait between connect retries. MySQL's default is 60 seconds.
       },
     },
-    "replicaNames": [ # The replicas of the instance.
-      "A String",
-    ],
-    "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
-    "region": "A String", # The geographical region. Can be us-central, asia-east1 or europe-west1. Defaults to us-central. The region can not be changed after instance creation.
-    "serverCaCert": { # SslCerts Resource # SSL configuration.
-      "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
-      "kind": "sql#sslCert", # This is always sql#sslCert.
-      "sha1Fingerprint": "A String", # Sha1 Fingerprint.
-      "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
-      "instance": "A String", # Name of the database instance.
-      "cert": "A String", # PEM representation.
-      "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-      "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
-      "selfLink": "A String", # The URI of this resource.
-    },
-    "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
-    "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
-    "currentDiskSize": "A String", # The current disk usage of the instance in bytes.
-    "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
-        # RUNNABLE: The instance is running, or is ready to run when accessed.
-        # SUSPENDED: The instance is not available, for example due to problems with billing.
-        # PENDING_CREATE: The instance is being created.
-        # MAINTENANCE: The instance is down for maintenance.
-        # FAILED: The instance creation failed.
-        # UNKNOWN_STATE: The state of the instance is unknown.
-    "etag": "A String", # HTTP 1.1 Entity tag for the resource.
-    "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance.
-    "ipAddresses": [ # The assigned IP addresses for the instance.
-      { # Database instance IP Mapping.
-        "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
-        "ipAddress": "A String", # The IP address assigned.
-      },
-    ],
-    "databaseVersion": "A String", # The database engine type and version. Can be MYSQL_5_5 or MYSQL_5_6. Defaults to MYSQL_5_5. The databaseVersion can not be changed after instance creation.
-    "settings": { # Database instance settings. # The user settings.
-      "databaseFlags": [ # The database flags passed to the instance at startup.
-        { # MySQL flags for Cloud SQL instances.
-          "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
-          "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
-        },
-      ],
-      "kind": "sql#settings", # This is always sql#settings.
-      "dataDiskType": "A String", # The type of data disk. Only supported for 2nd Generation instances. The default type is SSD.
-      "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes.
-        "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
-        "updateTrack": "A String",
-        "day": 42, # day of week (1-7), starting on Monday.
-        "hour": 42, # hour of day - 0 to 23.
-      },
-      "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance.
-        "A String",
-      ],
-      "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
-          # ALWAYS: The instance should always be active.
-          # NEVER: The instance should never be activated.
-          # ON_DEMAND: The instance is activated upon receiving requests.
-      "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
-        "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
-        "enabled": True or False, # Whether this configuration is enabled.
-        "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
-        "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
-      },
-      "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance.
-        "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
-        "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
-        "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
-          { # An entry for an Access Control list.
-            "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-            "kind": "sql#aclEntry", # This is always sql#aclEntry.
-            "value": "A String", # The whitelisted value for the access control list.
-            "name": "A String", # An optional label to identify this entry.
-          },
-        ],
-      },
-      "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
-      "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
-      "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS.
-      "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled.
-      "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE.
-      "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
-      "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance.
-        "kind": "sql#locationPreference", # This is always sql#locationPreference.
-        "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
-        "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
-      },
-      "dataDiskSizeGb": "A String", # The size of data disk, in GB. Only supported for 2nd Generation instances. The data disk size minimum is 10GB.
-    },
-    "instanceType": "A String", # The instance type. This can be one of the following.
-        # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
-        # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
-        # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
     "selfLink": "A String", # The URI of this resource.
-    "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
   }
 
 
@@ -1678,16 +1706,116 @@
     The object takes the form of:
 
 { # A Cloud SQL instance resource.
+    "backendType": "A String", # FIRST_GEN: Basic Cloud SQL instance that runs in a Google-managed container.
+        # SECOND_GEN: A newer Cloud SQL backend that runs in a Compute Engine VM.
+        # EXTERNAL: A MySQL server that is not managed by Google.
+    "currentDiskSize": "A String", # The current disk usage of the instance in bytes. This property has been deprecated. Users should use the "cloudsql.googleapis.com/database/disk/bytes_used" metric in Cloud Monitoring API instead. Please see https://groups.google.com/d/msg/google-cloud-sql-announce/I_7-F9EBhT0/BtvFtdFeAgAJ for details.
+    "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance. This property is applicable only to Second Generation instances.
+    "ipAddresses": [ # The assigned IP addresses for the instance.
+      { # Database instance IP Mapping.
+        "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
+        "ipAddress": "A String", # The IP address assigned.
+      },
+    ],
+    "databaseVersion": "A String", # The database engine type and version. The databaseVersion can not be changed after instance creation. Can be MYSQL_5_5, MYSQL_5_6 or MYSQL_5_7. Defaults to MYSQL_5_6. MYSQL_5_7 is applicable only to Second Generation instances.
+    "instanceType": "A String", # The instance type. This can be one of the following.
+        # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
+        # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
+        # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
+    "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
+    "suspensionReason": [ # If the instance state is SUSPENDED, the reason for the suspension.
+      "A String",
+    ],
+    "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
+    "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
+        # RUNNABLE: The instance is running, or is ready to run when accessed.
+        # SUSPENDED: The instance is not available, for example due to problems with billing.
+        # PENDING_CREATE: The instance is being created.
+        # MAINTENANCE: The instance is down for maintenance.
+        # FAILED: The instance creation failed.
+        # UNKNOWN_STATE: The state of the instance is unknown.
+    "etag": "A String", # HTTP 1.1 Entity tag for the resource.
+    "failoverReplica": { # The name and status of the failover replica. This property is applicable only to Second Generation instances.
+      "available": True or False, # The availability status of the failover replica. A false status indicates that the failover replica is out of sync. The master can only failover to the falover replica when the status is true.
+      "name": "A String", # The name of the failover replica.
+    },
+    "replicaNames": [ # The replicas of the instance.
+      "A String",
+    ],
     "onPremisesConfiguration": { # On-premises instance configuration. # Configuration specific to on-premises instances.
       "kind": "sql#onPremisesConfiguration", # This is always sql#onPremisesConfiguration.
       "hostPort": "A String", # The host and port of the on-premises instance in host:port format
     },
     "kind": "sql#instance", # This is always sql#instance.
-    "failoverReplica": { # The name and status of the failover replica. Only applies to Second Generation instances.
-      "available": True or False,
-      "name": "A String",
+    "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
+    "ipv6Address": "A String", # The IPv6 address assigned to the instance. This property is applicable only to First Generation instances.
+    "serverCaCert": { # SslCerts Resource # SSL configuration.
+      "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
+      "kind": "sql#sslCert", # This is always sql#sslCert.
+      "sha1Fingerprint": "A String", # Sha1 Fingerprint.
+      "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
+      "instance": "A String", # Name of the database instance.
+      "cert": "A String", # PEM representation.
+      "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+      "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
+      "selfLink": "A String", # The URI of this resource.
     },
-    "ipv6Address": "A String", # The IPv6 address assigned to the instance.
+    "region": "A String", # The geographical region. Can be us-central (FIRST_GEN instances only), us-central1 (SECOND_GEN instances only), asia-east1 or europe-west1. Defaults to us-central or us-central1 depending on the instance type (First Generation or Second Generation). The region can not be changed after instance creation.
+    "settings": { # Database instance settings. # The user settings.
+      "databaseFlags": [ # The database flags passed to the instance at startup.
+        { # MySQL flags for Cloud SQL instances.
+          "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
+          "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
+        },
+      ],
+      "kind": "sql#settings", # This is always sql#settings.
+      "dataDiskType": "A String", # The type of data disk. Only supported for Second Generation instances. The default type is PD_SSD. Applies only to Second Generation instances.
+      "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes. Applies only to Second Generation instances.
+        "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
+        "updateTrack": "A String",
+        "day": 42, # day of week (1-7), starting on Monday.
+        "hour": 42, # hour of day - 0 to 23.
+      },
+      "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance. This property is only applicable to First Generation instances.
+        "A String",
+      ],
+      "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
+          # ALWAYS: The instance should always be active.
+          # NEVER: The instance should never be activated.
+          # ON_DEMAND: The instance is activated upon receiving requests; only applicable to First Generation instances.
+      "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
+        "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
+        "enabled": True or False, # Whether this configuration is enabled.
+        "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
+        "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
+      },
+      "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance. The IPv4 address cannot be disabled for Second Generation instances.
+        "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
+        "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
+        "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
+          { # An entry for an Access Control list.
+            "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+            "kind": "sql#aclEntry", # This is always sql#aclEntry.
+            "value": "A String", # The whitelisted value for the access control list.
+            "name": "A String", # An optional label to identify this entry.
+          },
+        ],
+      },
+      "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
+      "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
+      "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS. This property is only applicable to First Generation instances.
+      "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled. This property is only applicable to First Generation instances.
+      "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE. Only PER_USE is supported for Second Generation instances.
+      "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
+      "storageAutoResize": True or False, # Configuration to increase storage size automatically. The default value is false. Applies only to Second Generation instances.
+      "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance. App Engine co-location is only applicable to First Generation instances.
+        "kind": "sql#locationPreference", # This is always sql#locationPreference.
+        "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
+        "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
+      },
+      "dataDiskSizeGb": "A String", # The size of data disk, in GB. The data disk size minimum is 10GB. Applies only to Second Generation instances.
+    },
+    "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
     "replicaConfiguration": { # Read-replica configuration for connecting to the master. # Configuration specific to read-replicas replicating from on-premises masters.
       "kind": "sql#replicaConfiguration", # This is always sql#replicaConfiguration.
       "failoverTarget": True or False, # Specifies if the replica is the failover target. If the field is set to true the replica will be designated as a failover replica. In case the master instance fails, the replica instance will be promoted as the new master instance.
@@ -1706,100 +1834,7 @@
         "connectRetryInterval": 42, # Seconds to wait between connect retries. MySQL's default is 60 seconds.
       },
     },
-    "replicaNames": [ # The replicas of the instance.
-      "A String",
-    ],
-    "project": "A String", # The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.
-    "region": "A String", # The geographical region. Can be us-central, asia-east1 or europe-west1. Defaults to us-central. The region can not be changed after instance creation.
-    "serverCaCert": { # SslCerts Resource # SSL configuration.
-      "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
-      "kind": "sql#sslCert", # This is always sql#sslCert.
-      "sha1Fingerprint": "A String", # Sha1 Fingerprint.
-      "commonName": "A String", # User supplied name. Constrained to [a-zA-Z.-_ ]+.
-      "instance": "A String", # Name of the database instance.
-      "cert": "A String", # PEM representation.
-      "expirationTime": "A String", # The time when the certificate expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-      "createTime": "A String", # The time when the certificate was created in RFC 3339 format, for example 2012-11-15T16:19:00.094Z
-      "selfLink": "A String", # The URI of this resource.
-    },
-    "masterInstanceName": "A String", # The name of the instance which will act as master in the replication setup.
-    "name": "A String", # Name of the Cloud SQL instance. This does not include the project ID.
-    "currentDiskSize": "A String", # The current disk usage of the instance in bytes.
-    "state": "A String", # The current serving state of the Cloud SQL instance. This can be one of the following.
-        # RUNNABLE: The instance is running, or is ready to run when accessed.
-        # SUSPENDED: The instance is not available, for example due to problems with billing.
-        # PENDING_CREATE: The instance is being created.
-        # MAINTENANCE: The instance is down for maintenance.
-        # FAILED: The instance creation failed.
-        # UNKNOWN_STATE: The state of the instance is unknown.
-    "etag": "A String", # HTTP 1.1 Entity tag for the resource.
-    "serviceAccountEmailAddress": "A String", # The service account email address assigned to the instance.
-    "ipAddresses": [ # The assigned IP addresses for the instance.
-      { # Database instance IP Mapping.
-        "timeToRetire": "A String", # The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.
-        "ipAddress": "A String", # The IP address assigned.
-      },
-    ],
-    "databaseVersion": "A String", # The database engine type and version. Can be MYSQL_5_5 or MYSQL_5_6. Defaults to MYSQL_5_5. The databaseVersion can not be changed after instance creation.
-    "settings": { # Database instance settings. # The user settings.
-      "databaseFlags": [ # The database flags passed to the instance at startup.
-        { # MySQL flags for Cloud SQL instances.
-          "name": "A String", # The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. For more information, see Configuring MySQL Flags in the Google Cloud SQL documentation, as well as the official MySQL documentation for server options and system variables.
-          "value": "A String", # The value of the flag. Booleans should be set to on for true and off for false. This field must be omitted if the flag doesn't take a value.
-        },
-      ],
-      "kind": "sql#settings", # This is always sql#settings.
-      "dataDiskType": "A String", # The type of data disk. Only supported for 2nd Generation instances. The default type is SSD.
-      "maintenanceWindow": { # Maintenance window. This specifies when a v2 Cloud SQL instance should preferably be restarted for system maintenance puruposes. # The maintenance window for this instance. This specifies when the instance may be restarted for maintenance purposes.
-        "kind": "sql#maintenanceWindow", # This is always sql#maintenanceWindow.
-        "updateTrack": "A String",
-        "day": 42, # day of week (1-7), starting on Monday.
-        "hour": 42, # hour of day - 0 to 23.
-      },
-      "authorizedGaeApplications": [ # The App Engine app IDs that can access this instance.
-        "A String",
-      ],
-      "activationPolicy": "A String", # The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.
-          # ALWAYS: The instance should always be active.
-          # NEVER: The instance should never be activated.
-          # ON_DEMAND: The instance is activated upon receiving requests.
-      "backupConfiguration": { # Database instance backup configuration. # The daily backup configuration for the instance.
-        "kind": "sql#backupConfiguration", # This is always sql#backupConfiguration.
-        "enabled": True or False, # Whether this configuration is enabled.
-        "startTime": "A String", # Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM.
-        "binaryLogEnabled": True or False, # Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well.
-      },
-      "ipConfiguration": { # IP Management configuration. # The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance.
-        "requireSsl": True or False, # Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP.
-        "ipv4Enabled": True or False, # Whether the instance should be assigned an IP address or not.
-        "authorizedNetworks": [ # The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).
-          { # An entry for an Access Control list.
-            "expirationTime": "A String", # The time when this access control entry expires in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
-            "kind": "sql#aclEntry", # This is always sql#aclEntry.
-            "value": "A String", # The whitelisted value for the access control list.
-            "name": "A String", # An optional label to identify this entry.
-          },
-        ],
-      },
-      "tier": "A String", # The tier of service for this instance, for example D1, D2. For more information, see pricing.
-      "databaseReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether replication is enabled or not.
-      "replicationType": "A String", # The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS.
-      "crashSafeReplicationEnabled": True or False, # Configuration specific to read replica instances. Indicates whether database flags for crash-safe replication are enabled.
-      "pricingPlan": "A String", # The pricing plan for this instance. This can be either PER_USE or PACKAGE.
-      "settingsVersion": "A String", # The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.
-      "locationPreference": { # Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified. # The location preference settings. This allows the instance to be located as near as possible to either an App Engine app or GCE zone for better performance.
-        "kind": "sql#locationPreference", # This is always sql#locationPreference.
-        "zone": "A String", # The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.).
-        "followGaeApplication": "A String", # The AppEngine application to follow, it must be in the same region as the Cloud SQL instance.
-      },
-      "dataDiskSizeGb": "A String", # The size of data disk, in GB. Only supported for 2nd Generation instances. The data disk size minimum is 10GB.
-    },
-    "instanceType": "A String", # The instance type. This can be one of the following.
-        # CLOUD_SQL_INSTANCE: A Cloud SQL instance that is not replicating from a master.
-        # ON_PREMISES_INSTANCE: An instance running on the customer's premises.
-        # READ_REPLICA_INSTANCE: A Cloud SQL instance configured as a read-replica.
     "selfLink": "A String", # The URI of this resource.
-    "maxDiskSize": "A String", # The maximum disk size of the instance in bytes.
   }
 
 
diff --git a/docs/dyn/sqladmin_v1beta4.sslCerts.html b/docs/dyn/sqladmin_v1beta4.sslCerts.html
index ec1385d..491c950 100644
--- a/docs/dyn/sqladmin_v1beta4.sslCerts.html
+++ b/docs/dyn/sqladmin_v1beta4.sslCerts.html
@@ -237,7 +237,7 @@
 
     { # SslCert insert response.
     "kind": "sql#sslCertsInsert", # This is always sql#sslCertsInsert.
-    "clientCert": { # SslCertDetail. # The new client certificate and private key. The new certificate will not work until the instance is restarted.
+    "clientCert": { # SslCertDetail. # The new client certificate and private key. The new certificate will not work until the instance is restarted for First Generation instances.
       "certPrivateKey": "A String", # The private key for the client cert, in pem format. Keep private in order to protect your security.
       "certInfo": { # SslCerts Resource # The public information about the cert.
         "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
@@ -251,6 +251,63 @@
         "selfLink": "A String", # The URI of this resource.
       },
     },
+    "operation": { # An Operations resource contains information about database instance operations such as create, delete, and restart. Operations resources are created in response to operations that were initiated; you never create them directly. # The operation to track the ssl certs insert request.
+      "status": "A String", # The status of an operation. Valid values are PENDING, RUNNING, DONE, UNKNOWN.
+      "importContext": { # Database instance import context. # The context for import operation, if applicable.
+        "fileType": "A String", # The file type for the specified uri.
+            # SQL: The file contains SQL statements.
+            # CSV: The file contains CSV data.
+        "database": "A String", # The database (for example, guestbook) to which the import is made. If fileType is SQL and no database is specified, it is assumed that the database is specified in the file to be imported. If fileType is CSV, it must be specified.
+        "kind": "sql#importContext", # This is always sql#importContext.
+        "uri": "A String", # A path to the file in Google Cloud Storage from which the import is made. The URI is in the form gs://bucketName/fileName. Compressed gzip files (.gz) are supported when fileType is SQL.
+        "csvImportOptions": { # Options for importing data as CSV.
+          "table": "A String", # The table to which CSV data is imported.
+          "columns": [ # The columns to which CSV data is imported. If not specified, all columns of the database table are loaded with CSV data.
+            "A String",
+          ],
+        },
+      },
+      "kind": "sql#operation", # This is always sql#operation.
+      "name": "A String", # An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation.
+      "exportContext": { # Database instance export context. # The context for export operation, if applicable.
+        "kind": "sql#exportContext", # This is always sql#exportContext.
+        "fileType": "A String", # The file type for the specified uri.
+            # SQL: The file contains SQL statements.
+            # CSV: The file contains CSV data.
+        "uri": "A String", # The path to the file in Google Cloud Storage where the export will be stored. The URI is in the form gs://bucketName/fileName. If the file already exists, the operation fails. If fileType is SQL and the filename ends with .gz, the contents are compressed.
+        "csvExportOptions": { # Options for exporting data as CSV.
+          "selectQuery": "A String", # The select query used to extract the data.
+        },
+        "databases": [ # Databases (for example, guestbook) from which the export is made. If fileType is SQL and no database is specified, all databases are exported. If fileType is CSV, you can optionally specify at most one database to export. If csvExportOptions.selectQuery also specifies the database, this field will be ignored.
+          "A String",
+        ],
+        "sqlExportOptions": { # Options for exporting data as SQL statements.
+          "tables": [ # Tables to export, or that were exported, from the specified database. If you specify tables, specify one and only one database.
+            "A String",
+          ],
+          "schemaOnly": True or False, # Export only schemas.
+        },
+      },
+      "startTime": "A String", # The time this operation actually started in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+      "targetProject": "A String", # The project ID of the target instance related to this operation.
+      "targetId": "A String", # Name of the database instance related to this operation.
+      "operationType": "A String", # The type of the operation. Valid values are CREATE, DELETE, UPDATE, RESTART, IMPORT, EXPORT, BACKUP_VOLUME, RESTORE_VOLUME, CREATE_USER, DELETE_USER, CREATE_DATABASE, DELETE_DATABASE .
+      "targetLink": "A String", # The URI of the instance related to the operation.
+      "insertTime": "A String", # The time this operation was enqueued in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+      "error": { # Database instance operation errors list wrapper. # If errors occurred during processing of this operation, this field will be populated.
+        "kind": "sql#operationErrors", # This is always sql#operationErrors.
+        "errors": [ # The list of errors encountered while processing this operation.
+          { # Database instance operation error.
+            "kind": "sql#operationError", # This is always sql#operationError.
+            "code": "A String", # Identifies the specific error that occurred.
+            "message": "A String", # Additional information about the error encountered.
+          },
+        ],
+      },
+      "endTime": "A String", # The time this operation finished in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.
+      "selfLink": "A String", # The URI of this resource.
+      "user": "A String", # The email address of the user who initiated this operation.
+    },
     "serverCaCert": { # SslCerts Resource # The server Certificate Authority's certificate. If this is missing you can force a new one to be generated by calling resetSslConfig method on instances resource.
       "certSerialNumber": "A String", # Serial number, as extracted from the certificate.
       "kind": "sql#sslCert", # This is always sql#sslCert.
diff --git a/docs/dyn/sqladmin_v1beta4.users.html b/docs/dyn/sqladmin_v1beta4.users.html
index 1a676d6..3cc92ce 100644
--- a/docs/dyn/sqladmin_v1beta4.users.html
+++ b/docs/dyn/sqladmin_v1beta4.users.html
@@ -174,7 +174,7 @@
     "name": "A String", # The name of the user in the Cloud SQL instance. Can be omitted for update since it is already specified on the URL.
     "project": "A String", # The project ID of the project containing the Cloud SQL database. The Google apps domain is prefixed if applicable. Can be omitted for update since it is already specified on the URL.
     "instance": "A String", # The name of the Cloud SQL instance. This does not include the project ID. Can be omitted for update since it is already specified on the URL.
-    "host": "A String", # The host name from which the user can connect. For insert operations, host defaults to an empty string. For update operations, host is specified as part of the request URL. The host name is not mutable with this API.
+    "host": "A String", # The host name from which the user can connect. For insert operations, host defaults to an empty string. For update operations, host is specified as part of the request URL. The host name cannot be updated after insertion.
     "etag": "A String", # HTTP 1.1 Entity tag for the resource.
     "password": "A String", # The password for the user.
   }
@@ -261,7 +261,7 @@
           "name": "A String", # The name of the user in the Cloud SQL instance. Can be omitted for update since it is already specified on the URL.
           "project": "A String", # The project ID of the project containing the Cloud SQL database. The Google apps domain is prefixed if applicable. Can be omitted for update since it is already specified on the URL.
           "instance": "A String", # The name of the Cloud SQL instance. This does not include the project ID. Can be omitted for update since it is already specified on the URL.
-          "host": "A String", # The host name from which the user can connect. For insert operations, host defaults to an empty string. For update operations, host is specified as part of the request URL. The host name is not mutable with this API.
+          "host": "A String", # The host name from which the user can connect. For insert operations, host defaults to an empty string. For update operations, host is specified as part of the request URL. The host name cannot be updated after insertion.
           "etag": "A String", # HTTP 1.1 Entity tag for the resource.
           "password": "A String", # The password for the user.
         },
@@ -287,7 +287,7 @@
     "name": "A String", # The name of the user in the Cloud SQL instance. Can be omitted for update since it is already specified on the URL.
     "project": "A String", # The project ID of the project containing the Cloud SQL database. The Google apps domain is prefixed if applicable. Can be omitted for update since it is already specified on the URL.
     "instance": "A String", # The name of the Cloud SQL instance. This does not include the project ID. Can be omitted for update since it is already specified on the URL.
-    "host": "A String", # The host name from which the user can connect. For insert operations, host defaults to an empty string. For update operations, host is specified as part of the request URL. The host name is not mutable with this API.
+    "host": "A String", # The host name from which the user can connect. For insert operations, host defaults to an empty string. For update operations, host is specified as part of the request URL. The host name cannot be updated after insertion.
     "etag": "A String", # HTTP 1.1 Entity tag for the resource.
     "password": "A String", # The password for the user.
   }
diff --git a/docs/dyn/storage_v1.buckets.html b/docs/dyn/storage_v1.buckets.html
index f117eef..117a581 100644
--- a/docs/dyn/storage_v1.buckets.html
+++ b/docs/dyn/storage_v1.buckets.html
@@ -116,7 +116,7 @@
   projection: string, Set of properties to return. Defaults to noAcl.
     Allowed values
       full - Include all properties.
-      noAcl - Omit acl and defaultObjectAcl properties.
+      noAcl - Omit owner, acl and defaultObjectAcl properties.
   ifMetagenerationMatch: string, Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.
   ifMetagenerationNotMatch: string, Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.
 
@@ -372,7 +372,7 @@
   projection: string, Set of properties to return. Defaults to noAcl, unless the bucket resource specifies acl or defaultObjectAcl properties, when it defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit acl and defaultObjectAcl properties.
+      noAcl - Omit owner, acl and defaultObjectAcl properties.
   predefinedDefaultObjectAcl: string, Apply a predefined set of default object access controls to this bucket.
     Allowed values
       authenticatedRead - Object owner gets OWNER access, and allAuthenticatedUsers get READER access.
@@ -520,7 +520,7 @@
   projection: string, Set of properties to return. Defaults to noAcl.
     Allowed values
       full - Include all properties.
-      noAcl - Omit acl and defaultObjectAcl properties.
+      noAcl - Omit owner, acl and defaultObjectAcl properties.
   pageToken: string, A previously-returned page token representing part of the larger set of results to view.
   prefix: string, Filter results to buckets whose names begin with this prefix.
   maxResults: integer, Maximum number of buckets to return.
@@ -797,7 +797,7 @@
   projection: string, Set of properties to return. Defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit acl and defaultObjectAcl properties.
+      noAcl - Omit owner, acl and defaultObjectAcl properties.
   ifMetagenerationMatch: string, Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.
   predefinedDefaultObjectAcl: string, Apply a predefined set of default object access controls to this bucket.
     Allowed values
@@ -1068,7 +1068,7 @@
   projection: string, Set of properties to return. Defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit acl and defaultObjectAcl properties.
+      noAcl - Omit owner, acl and defaultObjectAcl properties.
   ifMetagenerationMatch: string, Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.
   predefinedDefaultObjectAcl: string, Apply a predefined set of default object access controls to this bucket.
     Allowed values
diff --git a/docs/dyn/storage_v1.objects.html b/docs/dyn/storage_v1.objects.html
index 63297ad..98d6116 100644
--- a/docs/dyn/storage_v1.objects.html
+++ b/docs/dyn/storage_v1.objects.html
@@ -186,7 +186,7 @@
           "a_key": "A String", # An individual metadata entry.
         },
         "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-        "contentType": "A String", # Content-Type of the object data.
+        "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
         "contentLanguage": "A String", # Content-Language of the object data.
         "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
           "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -277,7 +277,7 @@
         "a_key": "A String", # An individual metadata entry.
       },
       "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-      "contentType": "A String", # Content-Type of the object data.
+      "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
       "contentLanguage": "A String", # Content-Language of the object data.
       "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
         "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -357,7 +357,7 @@
           "a_key": "A String", # An individual metadata entry.
         },
         "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-        "contentType": "A String", # Content-Type of the object data.
+        "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
         "contentLanguage": "A String", # Content-Language of the object data.
         "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
           "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -463,7 +463,7 @@
       "a_key": "A String", # An individual metadata entry.
     },
     "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-    "contentType": "A String", # Content-Type of the object data.
+    "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
     "contentLanguage": "A String", # Content-Language of the object data.
     "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
       "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -482,7 +482,7 @@
   projection: string, Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
   sourceGeneration: string, If present, selects a specific revision of the source object (as opposed to the latest version, the default).
   ifSourceGenerationNotMatch: string, Makes the operation conditional on whether the source object's generation does not match the given value.
   ifSourceMetagenerationNotMatch: string, Makes the operation conditional on whether the source object's current metageneration does not match the given value.
@@ -555,7 +555,7 @@
         "a_key": "A String", # An individual metadata entry.
       },
       "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-      "contentType": "A String", # Content-Type of the object data.
+      "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
       "contentLanguage": "A String", # Content-Language of the object data.
       "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
         "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -635,7 +635,7 @@
       "a_key": "A String", # An individual metadata entry.
     },
     "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-    "contentType": "A String", # Content-Type of the object data.
+    "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
     "contentLanguage": "A String", # Content-Language of the object data.
     "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
       "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -654,7 +654,7 @@
   projection: string, Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
   sourceGeneration: string, If present, selects a specific revision of the source object (as opposed to the latest version, the default).
   ifSourceGenerationNotMatch: string, Makes the operation conditional on whether the source object's generation does not match the given value.
   ifSourceMetagenerationNotMatch: string, Makes the operation conditional on whether the source object's current metageneration does not match the given value.
@@ -709,7 +709,7 @@
   projection: string, Set of properties to return. Defaults to noAcl.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
 
 Returns:
   An object of the form:
@@ -765,7 +765,7 @@
         "a_key": "A String", # An individual metadata entry.
       },
       "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-      "contentType": "A String", # Content-Type of the object data.
+      "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
       "contentLanguage": "A String", # Content-Language of the object data.
       "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
         "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -797,7 +797,7 @@
   projection: string, Set of properties to return. Defaults to noAcl.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
 
 Returns:
   The media object as a string.
@@ -865,7 +865,7 @@
       "a_key": "A String", # An individual metadata entry.
     },
     "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-    "contentType": "A String", # Content-Type of the object data.
+    "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
     "contentLanguage": "A String", # Content-Language of the object data.
     "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
       "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -884,7 +884,7 @@
   projection: string, Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
   media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
   predefinedAcl: string, Apply a predefined set of access controls to this object.
     Allowed values
@@ -955,7 +955,7 @@
         "a_key": "A String", # An individual metadata entry.
       },
       "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-      "contentType": "A String", # Content-Type of the object data.
+      "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
       "contentLanguage": "A String", # Content-Language of the object data.
       "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
         "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1032,7 +1032,7 @@
       "a_key": "A String", # An individual metadata entry.
     },
     "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-    "contentType": "A String", # Content-Type of the object data.
+    "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
     "contentLanguage": "A String", # Content-Language of the object data.
     "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
       "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1051,7 +1051,7 @@
   projection: string, Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
   media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
   predefinedAcl: string, Apply a predefined set of access controls to this object.
     Allowed values
@@ -1083,7 +1083,7 @@
   projection: string, Set of properties to return. Defaults to noAcl.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
   versions: boolean, If true, lists all versions of an object as distinct results. The default is false. For more information, see Object Versioning.
   delimiter: string, Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.
   maxResults: integer, Maximum number of items plus prefixes to return. As duplicate prefixes are omitted, fewer total results may be returned than requested. The default value of this parameter is 1,000 items.
@@ -1147,7 +1147,7 @@
             "a_key": "A String", # An individual metadata entry.
           },
           "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-          "contentType": "A String", # Content-Type of the object data.
+          "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
           "contentLanguage": "A String", # Content-Language of the object data.
           "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
             "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1245,7 +1245,7 @@
       "a_key": "A String", # An individual metadata entry.
     },
     "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-    "contentType": "A String", # Content-Type of the object data.
+    "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
     "contentLanguage": "A String", # Content-Language of the object data.
     "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
       "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1277,7 +1277,7 @@
   projection: string, Set of properties to return. Defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
 
 Returns:
   An object of the form:
@@ -1333,7 +1333,7 @@
         "a_key": "A String", # An individual metadata entry.
       },
       "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-      "contentType": "A String", # Content-Type of the object data.
+      "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
       "contentLanguage": "A String", # Content-Language of the object data.
       "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
         "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1413,7 +1413,7 @@
       "a_key": "A String", # An individual metadata entry.
     },
     "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-    "contentType": "A String", # Content-Type of the object data.
+    "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
     "contentLanguage": "A String", # Content-Language of the object data.
     "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
       "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1432,7 +1432,7 @@
   projection: string, Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
   sourceGeneration: string, If present, selects a specific revision of the source object (as opposed to the latest version, the default).
   maxBytesRewrittenPerCall: string, The maximum number of bytes that will be rewritten per rewrite request. Most callers shouldn't need to specify this parameter - it is primarily in place to support testing. If specified the value must be an integral multiple of 1 MiB (1048576). Also, this only applies to requests where the source and destination span locations and/or storage classes. Finally, this value must not change across rewrite calls else you'll get an error that the rewriteToken is invalid.
   ifSourceGenerationNotMatch: string, Makes the operation conditional on whether the source object's generation does not match the given value.
@@ -1510,7 +1510,7 @@
           "a_key": "A String", # An individual metadata entry.
         },
         "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-        "contentType": "A String", # Content-Type of the object data.
+        "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
         "contentLanguage": "A String", # Content-Language of the object data.
         "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
           "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1592,7 +1592,7 @@
       "a_key": "A String", # An individual metadata entry.
     },
     "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-    "contentType": "A String", # Content-Type of the object data.
+    "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
     "contentLanguage": "A String", # Content-Language of the object data.
     "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
       "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1624,7 +1624,7 @@
   projection: string, Set of properties to return. Defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
 
 Returns:
   An object of the form:
@@ -1680,7 +1680,7 @@
         "a_key": "A String", # An individual metadata entry.
       },
       "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-      "contentType": "A String", # Content-Type of the object data.
+      "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
       "contentLanguage": "A String", # Content-Language of the object data.
       "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
         "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1758,7 +1758,7 @@
       "a_key": "A String", # An individual metadata entry.
     },
     "updated": "A String", # The modification time of the object metadata in RFC 3339 format.
-    "contentType": "A String", # Content-Type of the object data.
+    "contentType": "A String", # Content-Type of the object data. If contentType is not specified, object downloads will be served as application/octet-stream.
     "contentLanguage": "A String", # Content-Language of the object data.
     "customerEncryption": { # Metadata of customer-supplied encryption key, if the object is encrypted by such a key.
       "encryptionAlgorithm": "A String", # The encryption algorithm.
@@ -1790,7 +1790,7 @@
   projection: string, Set of properties to return. Defaults to full.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
 
 Returns:
   The media object as a string.
@@ -1825,7 +1825,7 @@
   projection: string, Set of properties to return. Defaults to noAcl.
     Allowed values
       full - Include all properties.
-      noAcl - Omit the acl property.
+      noAcl - Omit the owner, acl property.
   versions: boolean, If true, lists all versions of an object as distinct results. The default is false. For more information, see Object Versioning.
   delimiter: string, Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.
   maxResults: integer, Maximum number of items plus prefixes to return. As duplicate prefixes are omitted, fewer total results may be returned than requested. The default value of this parameter is 1,000 items.
diff --git a/docs/dyn/toolresults_v1beta3.html b/docs/dyn/toolresults_v1beta3.html
new file mode 100644
index 0000000..6f61ab7
--- /dev/null
+++ b/docs/dyn/toolresults_v1beta3.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="toolresults_v1beta3.html">Cloud Tool Results API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="toolresults_v1beta3.projects.html">projects()</a></code>
+</p>
+<p class="firstline">Returns the projects Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/toolresults_v1beta3.projects.histories.executions.html b/docs/dyn/toolresults_v1beta3.projects.histories.executions.html
new file mode 100644
index 0000000..4dcb0ca
--- /dev/null
+++ b/docs/dyn/toolresults_v1beta3.projects.histories.executions.html
@@ -0,0 +1,1095 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="toolresults_v1beta3.html">Cloud Tool Results API</a> . <a href="toolresults_v1beta3.projects.html">projects</a> . <a href="toolresults_v1beta3.projects.histories.html">histories</a> . <a href="toolresults_v1beta3.projects.histories.executions.html">executions</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="toolresults_v1beta3.projects.histories.executions.steps.html">steps()</a></code>
+</p>
+<p class="firstline">Returns the steps Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#create">create(projectId=None, historyId=None, body, requestId=None)</a></code></p>
+<p class="firstline">Creates an Execution.</p>
+<p class="toc_element">
+  <code><a href="#get">get(projectId=None, historyId=None, executionId=None)</a></code></p>
+<p class="firstline">Gets an Execution.</p>
+<p class="toc_element">
+  <code><a href="#list">list(projectId=None, historyId=None, pageToken=None, pageSize=None)</a></code></p>
+<p class="firstline">Lists Histories for a given Project.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(projectId, historyId, executionId, body, requestId=None)</a></code></p>
+<p class="firstline">Updates an existing Execution with the supplied partial entity.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(projectId=None, historyId=None, body, requestId=None)</code>
+  <pre>Creates an Execution.
+
+The returned Execution will have the id set.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to write to project - INVALID_ARGUMENT - if the request is malformed - NOT_FOUND - if the containing History does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # An Execution represents a collection of Steps. For instance, it could represent: - a mobile test executed across a range of device configurations - a jenkins job with a build step followed by a test step
+      # 
+      # The maximum size of an execution message is 1 MiB.
+      # 
+      # An Execution can be updated until its state is set to COMPLETE at which point it becomes immutable.
+    "testExecutionMatrixId": "A String", # TestExecution Matrix ID that the Test Service uses.
+        # 
+        # - In response: present if set by create - In create: optional - In update: never set
+    "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution was created.
+        # 
+        # This value will be set automatically when CreateExecution is called.
+        # 
+        # - In response: always set - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "state": "A String", # The initial state is IN_PROGRESS.
+        # 
+        # The only legal state transitions is from IN_PROGRESS to COMPLETE.
+        # 
+        # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+        # 
+        # The state can only be set to COMPLETE once. A FAILED_PRECONDITION will be returned if the state is set to COMPLETE multiple times.
+        # 
+        # If the state is set to COMPLETE, all the in-progress steps within the execution will be set as COMPLETE. If the outcome of the step is not set, the outcome will be set to INCONCLUSIVE.
+        # 
+        # - In response always set - In create/update request: optional
+    "executionId": "A String", # A unique identifier within a History for this Execution.
+        # 
+        # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+        # 
+        # - In response always set - In create/update request: never set
+    "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution status transitioned to COMPLETE.
+        # 
+        # This value will be set automatically when state transitions to COMPLETE.
+        # 
+        # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "outcome": { # Interprets a result so that humans and machines can act on it. # Classify the result, for example into SUCCESS or FAILURE
+        # 
+        # - In response: present if set by create/update request - In create/update request: optional
+      "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+          #
+          # Optional
+        "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+            #
+            # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+        "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+            #
+            # For example, OpenGL crashed, but it is unclear if the app is responsible.
+        "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+      },
+      "skippedDetail": { # More information about a SKIPPED outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+          #
+          # Optional
+        "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+        "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+        "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+      },
+      "successDetail": { # More information about a SUCCESS outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+      },
+      "failureDetail": { # More information about a FAILURE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+        "crashed": True or False, # If the failure was severe because the system under test crashed.
+        "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+        "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+        "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+      },
+      "summary": "A String", # The simplest way to interpret a result.
+          #
+          # Required
+    },
+  }
+
+  requestId: string, A unique request ID for server to detect duplicated requests. For example, a UUID.
+
+Optional, but strongly recommended.
+
+Returns:
+  An object of the form:
+
+    { # An Execution represents a collection of Steps. For instance, it could represent: - a mobile test executed across a range of device configurations - a jenkins job with a build step followed by a test step
+        #
+        # The maximum size of an execution message is 1 MiB.
+        #
+        # An Execution can be updated until its state is set to COMPLETE at which point it becomes immutable.
+      "testExecutionMatrixId": "A String", # TestExecution Matrix ID that the Test Service uses.
+          #
+          # - In response: present if set by create - In create: optional - In update: never set
+      "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution was created.
+          #
+          # This value will be set automatically when CreateExecution is called.
+          #
+          # - In response: always set - In create/update request: never set
+          #
+          # Example 1: Compute Timestamp from POSIX `time()`.
+          #
+          # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+          #
+          # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+          #
+          # struct timeval tv; gettimeofday(&tv, NULL);
+          #
+          # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+          #
+          # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+          #
+          # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+          #
+          # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+          #
+          # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+          #
+          # long millis = System.currentTimeMillis();
+          #
+          # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+          #
+          #
+          #
+          # Example 5: Compute Timestamp from current time in Python.
+          #
+          # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+        "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+        "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+      },
+      "state": "A String", # The initial state is IN_PROGRESS.
+          #
+          # The only legal state transitions is from IN_PROGRESS to COMPLETE.
+          #
+          # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+          #
+          # The state can only be set to COMPLETE once. A FAILED_PRECONDITION will be returned if the state is set to COMPLETE multiple times.
+          #
+          # If the state is set to COMPLETE, all the in-progress steps within the execution will be set as COMPLETE. If the outcome of the step is not set, the outcome will be set to INCONCLUSIVE.
+          #
+          # - In response always set - In create/update request: optional
+      "executionId": "A String", # A unique identifier within a History for this Execution.
+          #
+          # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+          #
+          # - In response always set - In create/update request: never set
+      "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution status transitioned to COMPLETE.
+          #
+          # This value will be set automatically when state transitions to COMPLETE.
+          #
+          # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+          #
+          # Example 1: Compute Timestamp from POSIX `time()`.
+          #
+          # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+          #
+          # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+          #
+          # struct timeval tv; gettimeofday(&tv, NULL);
+          #
+          # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+          #
+          # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+          #
+          # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+          #
+          # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+          #
+          # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+          #
+          # long millis = System.currentTimeMillis();
+          #
+          # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+          #
+          #
+          #
+          # Example 5: Compute Timestamp from current time in Python.
+          #
+          # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+        "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+        "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+      },
+      "outcome": { # Interprets a result so that humans and machines can act on it. # Classify the result, for example into SUCCESS or FAILURE
+          #
+          # - In response: present if set by create/update request - In create/update request: optional
+        "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+            #
+            # Optional
+          "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+              #
+              # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+          "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+              #
+              # For example, OpenGL crashed, but it is unclear if the app is responsible.
+          "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+        },
+        "skippedDetail": { # More information about a SKIPPED outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+            #
+            # Optional
+          "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+          "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+          "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+        },
+        "successDetail": { # More information about a SUCCESS outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+            #
+            # Optional
+          "otherNativeCrash": True or False, # If a native process other than the app crashed.
+        },
+        "failureDetail": { # More information about a FAILURE outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+            #
+            # Optional
+          "otherNativeCrash": True or False, # If a native process other than the app crashed.
+          "crashed": True or False, # If the failure was severe because the system under test crashed.
+          "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+          "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+          "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+        },
+        "summary": "A String", # The simplest way to interpret a result.
+            #
+            # Required
+      },
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(projectId=None, historyId=None, executionId=None)</code>
+  <pre>Gets an Execution.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to write to project - INVALID_ARGUMENT - if the request is malformed - NOT_FOUND - if the Execution does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+  executionId: string, An Execution id.
+
+Required. (required)
+
+Returns:
+  An object of the form:
+
+    { # An Execution represents a collection of Steps. For instance, it could represent: - a mobile test executed across a range of device configurations - a jenkins job with a build step followed by a test step
+        #
+        # The maximum size of an execution message is 1 MiB.
+        #
+        # An Execution can be updated until its state is set to COMPLETE at which point it becomes immutable.
+      "testExecutionMatrixId": "A String", # TestExecution Matrix ID that the Test Service uses.
+          #
+          # - In response: present if set by create - In create: optional - In update: never set
+      "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution was created.
+          #
+          # This value will be set automatically when CreateExecution is called.
+          #
+          # - In response: always set - In create/update request: never set
+          #
+          # Example 1: Compute Timestamp from POSIX `time()`.
+          #
+          # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+          #
+          # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+          #
+          # struct timeval tv; gettimeofday(&tv, NULL);
+          #
+          # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+          #
+          # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+          #
+          # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+          #
+          # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+          #
+          # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+          #
+          # long millis = System.currentTimeMillis();
+          #
+          # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+          #
+          #
+          #
+          # Example 5: Compute Timestamp from current time in Python.
+          #
+          # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+        "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+        "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+      },
+      "state": "A String", # The initial state is IN_PROGRESS.
+          #
+          # The only legal state transitions is from IN_PROGRESS to COMPLETE.
+          #
+          # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+          #
+          # The state can only be set to COMPLETE once. A FAILED_PRECONDITION will be returned if the state is set to COMPLETE multiple times.
+          #
+          # If the state is set to COMPLETE, all the in-progress steps within the execution will be set as COMPLETE. If the outcome of the step is not set, the outcome will be set to INCONCLUSIVE.
+          #
+          # - In response always set - In create/update request: optional
+      "executionId": "A String", # A unique identifier within a History for this Execution.
+          #
+          # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+          #
+          # - In response always set - In create/update request: never set
+      "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution status transitioned to COMPLETE.
+          #
+          # This value will be set automatically when state transitions to COMPLETE.
+          #
+          # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+          #
+          # Example 1: Compute Timestamp from POSIX `time()`.
+          #
+          # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+          #
+          # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+          #
+          # struct timeval tv; gettimeofday(&tv, NULL);
+          #
+          # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+          #
+          # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+          #
+          # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+          #
+          # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+          #
+          # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+          #
+          # long millis = System.currentTimeMillis();
+          #
+          # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+          #
+          #
+          #
+          # Example 5: Compute Timestamp from current time in Python.
+          #
+          # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+        "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+        "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+      },
+      "outcome": { # Interprets a result so that humans and machines can act on it. # Classify the result, for example into SUCCESS or FAILURE
+          #
+          # - In response: present if set by create/update request - In create/update request: optional
+        "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+            #
+            # Optional
+          "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+              #
+              # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+          "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+              #
+              # For example, OpenGL crashed, but it is unclear if the app is responsible.
+          "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+        },
+        "skippedDetail": { # More information about a SKIPPED outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+            #
+            # Optional
+          "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+          "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+          "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+        },
+        "successDetail": { # More information about a SUCCESS outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+            #
+            # Optional
+          "otherNativeCrash": True or False, # If a native process other than the app crashed.
+        },
+        "failureDetail": { # More information about a FAILURE outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+            #
+            # Optional
+          "otherNativeCrash": True or False, # If a native process other than the app crashed.
+          "crashed": True or False, # If the failure was severe because the system under test crashed.
+          "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+          "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+          "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+        },
+        "summary": "A String", # The simplest way to interpret a result.
+            #
+            # Required
+      },
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(projectId=None, historyId=None, pageToken=None, pageSize=None)</code>
+  <pre>Lists Histories for a given Project.
+
+The executions are sorted by creation_time in descending order. The execution_id key will be used to order the executions with the same creation_time.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to read project - INVALID_ARGUMENT - if the request is malformed - NOT_FOUND - if the containing History does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+  pageToken: string, A continuation token to resume the query at the next item.
+
+Optional.
+  pageSize: integer, The maximum number of Executions to fetch.
+
+Default value: 25. The server will use this default if the field is not set or has a value of 0.
+
+Optional.
+
+Returns:
+  An object of the form:
+
+    {
+    "nextPageToken": "A String", # A continuation token to resume the query at the next item.
+        #
+        # Will only be set if there are more Executions to fetch.
+    "executions": [ # Executions.
+        #
+        # Always set.
+      { # An Execution represents a collection of Steps. For instance, it could represent: - a mobile test executed across a range of device configurations - a jenkins job with a build step followed by a test step
+            #
+            # The maximum size of an execution message is 1 MiB.
+            #
+            # An Execution can be updated until its state is set to COMPLETE at which point it becomes immutable.
+          "testExecutionMatrixId": "A String", # TestExecution Matrix ID that the Test Service uses.
+              #
+              # - In response: present if set by create - In create: optional - In update: never set
+          "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution was created.
+              #
+              # This value will be set automatically when CreateExecution is called.
+              #
+              # - In response: always set - In create/update request: never set
+              #
+              # Example 1: Compute Timestamp from POSIX `time()`.
+              #
+              # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+              #
+              # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+              #
+              # struct timeval tv; gettimeofday(&tv, NULL);
+              #
+              # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+              #
+              # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+              #
+              # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+              #
+              # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+              #
+              # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+              #
+              # long millis = System.currentTimeMillis();
+              #
+              # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+              #
+              #
+              #
+              # Example 5: Compute Timestamp from current time in Python.
+              #
+              # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+            "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+            "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+          },
+          "state": "A String", # The initial state is IN_PROGRESS.
+              #
+              # The only legal state transitions is from IN_PROGRESS to COMPLETE.
+              #
+              # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+              #
+              # The state can only be set to COMPLETE once. A FAILED_PRECONDITION will be returned if the state is set to COMPLETE multiple times.
+              #
+              # If the state is set to COMPLETE, all the in-progress steps within the execution will be set as COMPLETE. If the outcome of the step is not set, the outcome will be set to INCONCLUSIVE.
+              #
+              # - In response always set - In create/update request: optional
+          "executionId": "A String", # A unique identifier within a History for this Execution.
+              #
+              # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+              #
+              # - In response always set - In create/update request: never set
+          "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution status transitioned to COMPLETE.
+              #
+              # This value will be set automatically when state transitions to COMPLETE.
+              #
+              # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+              #
+              # Example 1: Compute Timestamp from POSIX `time()`.
+              #
+              # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+              #
+              # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+              #
+              # struct timeval tv; gettimeofday(&tv, NULL);
+              #
+              # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+              #
+              # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+              #
+              # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+              #
+              # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+              #
+              # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+              #
+              # long millis = System.currentTimeMillis();
+              #
+              # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+              #
+              #
+              #
+              # Example 5: Compute Timestamp from current time in Python.
+              #
+              # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+            "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+            "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+          },
+          "outcome": { # Interprets a result so that humans and machines can act on it. # Classify the result, for example into SUCCESS or FAILURE
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+            "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+                #
+                # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+                #
+                # Optional
+              "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+                  #
+                  # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+              "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+                  #
+                  # For example, OpenGL crashed, but it is unclear if the app is responsible.
+              "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+            },
+            "skippedDetail": { # More information about a SKIPPED outcome.
+                #
+                # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+                #
+                # Optional
+              "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+              "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+              "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+            },
+            "successDetail": { # More information about a SUCCESS outcome.
+                #
+                # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+                #
+                # Optional
+              "otherNativeCrash": True or False, # If a native process other than the app crashed.
+            },
+            "failureDetail": { # More information about a FAILURE outcome.
+                #
+                # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+                #
+                # Optional
+              "otherNativeCrash": True or False, # If a native process other than the app crashed.
+              "crashed": True or False, # If the failure was severe because the system under test crashed.
+              "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+              "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+              "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+            },
+            "summary": "A String", # The simplest way to interpret a result.
+                #
+                # Required
+          },
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(projectId, historyId, executionId, body, requestId=None)</code>
+  <pre>Updates an existing Execution with the supplied partial entity.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to write to project - INVALID_ARGUMENT - if the request is malformed - FAILED_PRECONDITION - if the requested state transition is illegal - NOT_FOUND - if the containing History does not exist
+
+Args:
+  projectId: string, A Project id. Required. (required)
+  historyId: string, Required. (required)
+  executionId: string, Required. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # An Execution represents a collection of Steps. For instance, it could represent: - a mobile test executed across a range of device configurations - a jenkins job with a build step followed by a test step
+      # 
+      # The maximum size of an execution message is 1 MiB.
+      # 
+      # An Execution can be updated until its state is set to COMPLETE at which point it becomes immutable.
+    "testExecutionMatrixId": "A String", # TestExecution Matrix ID that the Test Service uses.
+        # 
+        # - In response: present if set by create - In create: optional - In update: never set
+    "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution was created.
+        # 
+        # This value will be set automatically when CreateExecution is called.
+        # 
+        # - In response: always set - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "state": "A String", # The initial state is IN_PROGRESS.
+        # 
+        # The only legal state transitions is from IN_PROGRESS to COMPLETE.
+        # 
+        # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+        # 
+        # The state can only be set to COMPLETE once. A FAILED_PRECONDITION will be returned if the state is set to COMPLETE multiple times.
+        # 
+        # If the state is set to COMPLETE, all the in-progress steps within the execution will be set as COMPLETE. If the outcome of the step is not set, the outcome will be set to INCONCLUSIVE.
+        # 
+        # - In response always set - In create/update request: optional
+    "executionId": "A String", # A unique identifier within a History for this Execution.
+        # 
+        # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+        # 
+        # - In response always set - In create/update request: never set
+    "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution status transitioned to COMPLETE.
+        # 
+        # This value will be set automatically when state transitions to COMPLETE.
+        # 
+        # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "outcome": { # Interprets a result so that humans and machines can act on it. # Classify the result, for example into SUCCESS or FAILURE
+        # 
+        # - In response: present if set by create/update request - In create/update request: optional
+      "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+          #
+          # Optional
+        "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+            #
+            # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+        "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+            #
+            # For example, OpenGL crashed, but it is unclear if the app is responsible.
+        "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+      },
+      "skippedDetail": { # More information about a SKIPPED outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+          #
+          # Optional
+        "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+        "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+        "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+      },
+      "successDetail": { # More information about a SUCCESS outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+      },
+      "failureDetail": { # More information about a FAILURE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+        "crashed": True or False, # If the failure was severe because the system under test crashed.
+        "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+        "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+        "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+      },
+      "summary": "A String", # The simplest way to interpret a result.
+          #
+          # Required
+    },
+  }
+
+  requestId: string, A unique request ID for server to detect duplicated requests. For example, a UUID.
+
+Optional, but strongly recommended.
+
+Returns:
+  An object of the form:
+
+    { # An Execution represents a collection of Steps. For instance, it could represent: - a mobile test executed across a range of device configurations - a jenkins job with a build step followed by a test step
+        #
+        # The maximum size of an execution message is 1 MiB.
+        #
+        # An Execution can be updated until its state is set to COMPLETE at which point it becomes immutable.
+      "testExecutionMatrixId": "A String", # TestExecution Matrix ID that the Test Service uses.
+          #
+          # - In response: present if set by create - In create: optional - In update: never set
+      "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution was created.
+          #
+          # This value will be set automatically when CreateExecution is called.
+          #
+          # - In response: always set - In create/update request: never set
+          #
+          # Example 1: Compute Timestamp from POSIX `time()`.
+          #
+          # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+          #
+          # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+          #
+          # struct timeval tv; gettimeofday(&tv, NULL);
+          #
+          # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+          #
+          # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+          #
+          # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+          #
+          # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+          #
+          # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+          #
+          # long millis = System.currentTimeMillis();
+          #
+          # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+          #
+          #
+          #
+          # Example 5: Compute Timestamp from current time in Python.
+          #
+          # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+        "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+        "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+      },
+      "state": "A String", # The initial state is IN_PROGRESS.
+          #
+          # The only legal state transitions is from IN_PROGRESS to COMPLETE.
+          #
+          # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+          #
+          # The state can only be set to COMPLETE once. A FAILED_PRECONDITION will be returned if the state is set to COMPLETE multiple times.
+          #
+          # If the state is set to COMPLETE, all the in-progress steps within the execution will be set as COMPLETE. If the outcome of the step is not set, the outcome will be set to INCONCLUSIVE.
+          #
+          # - In response always set - In create/update request: optional
+      "executionId": "A String", # A unique identifier within a History for this Execution.
+          #
+          # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+          #
+          # - In response always set - In create/update request: never set
+      "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the Execution status transitioned to COMPLETE.
+          #
+          # This value will be set automatically when state transitions to COMPLETE.
+          #
+          # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+          #
+          # Example 1: Compute Timestamp from POSIX `time()`.
+          #
+          # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+          #
+          # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+          #
+          # struct timeval tv; gettimeofday(&tv, NULL);
+          #
+          # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+          #
+          # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+          #
+          # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+          #
+          # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+          #
+          # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+          #
+          # long millis = System.currentTimeMillis();
+          #
+          # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+          #
+          #
+          #
+          # Example 5: Compute Timestamp from current time in Python.
+          #
+          # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+        "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+        "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+      },
+      "outcome": { # Interprets a result so that humans and machines can act on it. # Classify the result, for example into SUCCESS or FAILURE
+          #
+          # - In response: present if set by create/update request - In create/update request: optional
+        "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+            #
+            # Optional
+          "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+              #
+              # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+          "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+              #
+              # For example, OpenGL crashed, but it is unclear if the app is responsible.
+          "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+        },
+        "skippedDetail": { # More information about a SKIPPED outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+            #
+            # Optional
+          "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+          "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+          "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+        },
+        "successDetail": { # More information about a SUCCESS outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+            #
+            # Optional
+          "otherNativeCrash": True or False, # If a native process other than the app crashed.
+        },
+        "failureDetail": { # More information about a FAILURE outcome.
+            #
+            # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+            #
+            # Optional
+          "otherNativeCrash": True or False, # If a native process other than the app crashed.
+          "crashed": True or False, # If the failure was severe because the system under test crashed.
+          "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+          "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+          "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+        },
+        "summary": "A String", # The simplest way to interpret a result.
+            #
+            # Required
+      },
+    }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/toolresults_v1beta3.projects.histories.executions.steps.html b/docs/dyn/toolresults_v1beta3.projects.histories.executions.steps.html
new file mode 100644
index 0000000..4052f67
--- /dev/null
+++ b/docs/dyn/toolresults_v1beta3.projects.histories.executions.steps.html
@@ -0,0 +1,3938 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="toolresults_v1beta3.html">Cloud Tool Results API</a> . <a href="toolresults_v1beta3.projects.html">projects</a> . <a href="toolresults_v1beta3.projects.histories.html">histories</a> . <a href="toolresults_v1beta3.projects.histories.executions.html">executions</a> . <a href="toolresults_v1beta3.projects.histories.executions.steps.html">steps</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="toolresults_v1beta3.projects.histories.executions.steps.thumbnails.html">thumbnails()</a></code>
+</p>
+<p class="firstline">Returns the thumbnails Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#create">create(projectId=None, historyId=None, executionId=None, body, requestId=None)</a></code></p>
+<p class="firstline">Creates a Step.</p>
+<p class="toc_element">
+  <code><a href="#get">get(projectId=None, historyId=None, executionId=None, stepId=None)</a></code></p>
+<p class="firstline">Gets a Step.</p>
+<p class="toc_element">
+  <code><a href="#list">list(projectId=None, historyId=None, executionId=None, pageToken=None, pageSize=None)</a></code></p>
+<p class="firstline">Lists Steps for a given Execution.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<p class="toc_element">
+  <code><a href="#patch">patch(projectId=None, historyId=None, executionId=None, stepId=None, body, requestId=None)</a></code></p>
+<p class="firstline">Updates an existing Step with the supplied partial entity.</p>
+<p class="toc_element">
+  <code><a href="#publishXunitXmlFiles">publishXunitXmlFiles(projectId=None, historyId=None, executionId=None, stepId=None, body)</a></code></p>
+<p class="firstline">Publish xml files to an existing Step.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(projectId=None, historyId=None, executionId=None, body, requestId=None)</code>
+  <pre>Creates a Step.
+
+The returned Step will have the id set.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to write to project - INVALID_ARGUMENT - if the request is malformed - FAILED_PRECONDITION - if the step is too large (more than 10Mib) - NOT_FOUND - if the containing Execution does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+  executionId: string, A Execution id.
+
+Required. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A Step represents a single operation performed as part of Execution. A step can be used to represent the execution of a tool ( for example a test runner execution or an execution of a compiler).
+    # 
+    # Steps can overlap (for instance two steps might have the same start time if some operations are done in parallel).
+    # 
+    # Here is an example, let's consider that we have a continuous build is executing a test runner for each iteration. The workflow would look like: - user creates a Execution with id 1 - user creates an TestExecutionStep with id 100 for Execution 1 - user update TestExecutionStep with id 100 to add a raw xml log + the service parses the xml logs and returns a TestExecutionStep with updated TestResult(s). - user update the status of TestExecutionStep with id 100 to COMPLETE
+    # 
+    # A Step can be updated until its state is set to COMPLETE at which points it becomes immutable.
+  "testExecutionStep": { # A step that represents running tests. # An execution of a test runner.
+      #
+      # It accepts ant-junit xml files which will be parsed into structured test results by the service. Xml file paths are updated in order to append more files, however they can't be deleted.
+      #
+      # Users can also add test results manually by using the test_result field.
+    "testTiming": { # Testing timing break down to know phases. # The timing break down of the test execution.
+        #
+        # - In response: present if set by create or update - In create/update request: optional
+      "testProcessDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took to run the test process.
+          #
+          # - In response: present if previously set. - In create/update request: optional
+          #
+          # Example 1: Compute Duration from two Timestamps in pseudo code.
+          #
+          # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+          #
+          # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+          #
+          # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+          #
+          # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+          #
+          # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+          #
+          # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+          #
+          # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+        "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+        "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+      },
+    },
+    "testSuiteOverviews": [ # List of test suite overview contents. This could be parsed from xUnit XML log by server, or uploaded directly by user. This references should only be called when test suites are fully parsed or uploaded.
+        #
+        # The maximum allowed number of test suite overviews per step is 1000.
+        #
+        # - In response: always set - In create request: optional - In update request: never (use publishXunitXmlFiles custom method instead)
+      { # A summary of a test suite result either parsed from XML or uploaded directly by a user.
+          #
+          # Note: the API related comments are for StepService only. This message is also being used in ExecutionService in a read only mode for the corresponding step.
+        "name": "A String", # The name of the test suite.
+            #
+            # - In create/response: always set - In update request: never
+        "errorCount": 42, # Number of test cases in error, typically set by the service by parsing the xml_source.
+            #
+            # - In create/response: always set - In update request: never
+        "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
+            #
+            # - In create/response: always set - In update request: never
+        "xmlSource": { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original XML file is stored.
+            #
+            # Note: Multiple test suites can share the same xml_source
+            #
+            # Returns INVALID_ARGUMENT if the uri format is not supported.
+            #
+            # - In create/response: optional - In update request: never
+          "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+              #
+              # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+              #
+              # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "failureCount": 42, # Number of failed test cases, typically set by the service by parsing the xml_source. May also be set by the user.
+            #
+            # - In create/response: always set - In update request: never
+        "skippedCount": 42, # Number of test cases not run, typically set by the service by parsing the xml_source.
+            #
+            # - In create/response: always set - In update request: never
+      },
+    ],
+    "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # Represents the execution of the test runner.
+        #
+        # The exit code of this tool will be used to determine if the test passed.
+        #
+        # - In response: always set - In create/update request: optional
+      "toolLogs": [ # References to any plain text logs output the tool execution.
+          #
+          # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+          #
+          # The maximum allowed number of tool logs per step is 1000.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+        { # A reference to a file.
+          "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+              #
+              # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+              #
+              # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+      ],
+      "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+        "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+            #
+            # - In response: always set - In create/update request: always set
+      },
+      "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+          #
+          # The maximum allowed number of tool outputs per step is 1000.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+        { # A reference to a ToolExecution output file.
+          "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+            "className": "A String", # The name of the class.
+            "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+            "name": "A String", # The name of the test case.
+                #
+                # Required.
+          },
+          "output": { # A reference to a file. # A FileReference to an output file.
+              #
+              # - In response: always set - In create/update request: always set
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+          "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Example 1: Compute Timestamp from POSIX `time()`.
+              #
+              # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+              #
+              # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+              #
+              # struct timeval tv; gettimeofday(&tv, NULL);
+              #
+              # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+              #
+              # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+              #
+              # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+              #
+              # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+              #
+              # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+              #
+              # long millis = System.currentTimeMillis();
+              #
+              # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+              #
+              #
+              #
+              # Example 5: Compute Timestamp from current time in Python.
+              #
+              # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+            "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+            "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+          },
+        },
+      ],
+      "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+          #
+          # - In response: present if set by create request - In create request: optional - In update request: never set
+        "A String",
+      ],
+    },
+    "testIssues": [ # Issues observed during the test execution.
+        #
+        # For example, if the mobile app under test crashed during the test, the error message and the stack trace content can be recorded here to assist debugging.
+        #
+        # - In response: present if set by create or update - In create/update request: optional
+      { # An abnormal event observed during the test execution.
+        "stackTrace": { # A stacktrace. # Optional.
+          "exception": "A String", # The stack trace message.
+              #
+              # Required
+        },
+        "errorMessage": "A String", # A brief human-readable message describing the abnormal event.
+            #
+            # Required.
+      },
+    ],
+  },
+  "toolExecutionStep": { # Generic tool step to be used for binaries we do not explicitly support. For example: running cp to copy artifacts from one location to another. # An execution of a tool (used for steps we don't explicitly support).
+    "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # A Tool execution.
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+      "toolLogs": [ # References to any plain text logs output the tool execution.
+          #
+          # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+          #
+          # The maximum allowed number of tool logs per step is 1000.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+        { # A reference to a file.
+          "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+              #
+              # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+              #
+              # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+      ],
+      "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+        "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+            #
+            # - In response: always set - In create/update request: always set
+      },
+      "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+          #
+          # The maximum allowed number of tool outputs per step is 1000.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+        { # A reference to a ToolExecution output file.
+          "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+            "className": "A String", # The name of the class.
+            "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+            "name": "A String", # The name of the test case.
+                #
+                # Required.
+          },
+          "output": { # A reference to a file. # A FileReference to an output file.
+              #
+              # - In response: always set - In create/update request: always set
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+          "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Example 1: Compute Timestamp from POSIX `time()`.
+              #
+              # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+              #
+              # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+              #
+              # struct timeval tv; gettimeofday(&tv, NULL);
+              #
+              # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+              #
+              # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+              #
+              # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+              #
+              # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+              #
+              # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+              #
+              # long millis = System.currentTimeMillis();
+              #
+              # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+              #
+              #
+              #
+              # Example 5: Compute Timestamp from current time in Python.
+              #
+              # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+            "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+            "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+          },
+        },
+      ],
+      "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+          #
+          # - In response: present if set by create request - In create request: optional - In update request: never set
+        "A String",
+      ],
+    },
+  },
+  "stepId": "A String", # A unique identifier within a Execution for this Step.
+      # 
+      # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+      # 
+      # - In response: always set - In create/update request: never set
+  "runDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took for this step to run.
+      # 
+      # If unset, this is set to the difference between creation_time and completion_time when the step is set to the COMPLETE state. In some cases, it is appropriate to set this value separately: For instance, if a step is created, but the operation it represents is queued for a few minutes before it executes, it would be appropriate not to include the time spent queued in its run_duration.
+      # 
+      # PRECONDITION_FAILED will be returned if one attempts to set a run_duration on a step which already has this field set.
+      # 
+      # - In response: present if previously set; always present on COMPLETE step - In create request: optional - In update request: optional
+      #
+      # Example 1: Compute Duration from two Timestamps in pseudo code.
+      #
+      # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+      #
+      # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+      #
+      # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+      #
+      # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+      #
+      # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+      #
+      # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+      #
+      # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+    "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+    "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+  },
+  "description": "A String", # A description of this tool For example: mvn clean package -D skipTests=true
+      # 
+      # - In response: present if set by create/update request - In create/update request: optional
+  "labels": [ # Arbitrary user-supplied key/value pairs that are associated with the step.
+      # 
+      # Users are responsible for managing the key namespace such that keys don't accidentally collide.
+      # 
+      # An INVALID_ARGUMENT will be returned if the number of labels exceeds 100 or if the length of any of the keys or values exceeds 100 characters.
+      # 
+      # - In response: always set - In create request: optional - In update request: optional; any new key/value pair will be added to the map, and any new value for an existing key will update that key's value
+    {
+      "value": "A String",
+      "key": "A String",
+    },
+  ],
+  "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step was created.
+      # 
+      # - In response: always set - In create/update request: never set
+      #
+      # Example 1: Compute Timestamp from POSIX `time()`.
+      #
+      # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+      #
+      # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+      #
+      # struct timeval tv; gettimeofday(&tv, NULL);
+      #
+      # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+      #
+      # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+      #
+      # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+      #
+      # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+      #
+      # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+      #
+      # long millis = System.currentTimeMillis();
+      #
+      # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+      #
+      #
+      #
+      # Example 5: Compute Timestamp from current time in Python.
+      #
+      # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+    "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+    "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+  },
+  "name": "A String", # A short human-readable name to display in the UI. Maximum of 100 characters. For example: Clean build
+      # 
+      # A PRECONDITION_FAILED will be returned upon creating a new step if it shares its name and dimension_value with an existing step. If two steps represent a similar action, but have different dimension values, they should share the same name. For instance, if the same set of tests is run on two different platforms, the two steps should have the same name.
+      # 
+      # - In response: always set - In create request: always set - In update request: never set
+  "state": "A String", # The initial state is IN_PROGRESS. The only legal state transitions are * IN_PROGRESS -> COMPLETE
+      # 
+      # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+      # 
+      # It is valid to create Step with a state set to COMPLETE. The state can only be set to COMPLETE once. A PRECONDITION_FAILED will be returned if the state is set to COMPLETE multiple times.
+      # 
+      # - In response: always set - In create/update request: optional
+  "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step status was set to complete.
+      # 
+      # This value will be set automatically when state transitions to COMPLETE.
+      # 
+      # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+      #
+      # Example 1: Compute Timestamp from POSIX `time()`.
+      #
+      # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+      #
+      # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+      #
+      # struct timeval tv; gettimeofday(&tv, NULL);
+      #
+      # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+      #
+      # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+      #
+      # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+      #
+      # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+      #
+      # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+      #
+      # long millis = System.currentTimeMillis();
+      #
+      # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+      #
+      #
+      #
+      # Example 5: Compute Timestamp from current time in Python.
+      #
+      # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+    "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+    "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+  },
+  "dimensionValue": [ # If the execution containing this step has any dimension_definition set, then this field allows the child to specify the values of the dimensions.
+      # 
+      # The keys must exactly match the dimension_definition of the execution.
+      # 
+      # For example, if the execution has `dimension_definition = ['attempt', 'device']` then a step must define values for those dimensions, eg. `dimension_value = ['attempt': '1', 'device': 'Nexus 6']`
+      # 
+      # If a step does not participate in one dimension of the matrix, the value for that dimension should be empty string. For example, if one of the tests is executed by a runner which does not support retries, the step could have `dimension_value = ['attempt': '', 'device': 'Nexus 6']`
+      # 
+      # If the step does not participate in any dimensions of the matrix, it may leave dimension_value unset.
+      # 
+      # A PRECONDITION_FAILED will be returned if any of the keys do not exist in the dimension_definition of the execution.
+      # 
+      # A PRECONDITION_FAILED will be returned if another step in this execution already has the same name and dimension_value, but differs on other data fields, for example, step field is different.
+      # 
+      # A PRECONDITION_FAILED will be returned if dimension_value is set, and there is a dimension_definition in the execution which is not specified as one of the keys.
+      # 
+      # - In response: present if set by create - In create request: optional - In update request: never set
+    {
+      "value": "A String",
+      "key": "A String",
+    },
+  ],
+  "outcome": { # Interprets a result so that humans and machines can act on it. # Classification of the result, for example into SUCCESS or FAILURE
+      # 
+      # - In response: present if set by create/update request - In create/update request: optional
+    "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+        #
+        # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+        #
+        # Optional
+      "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+          #
+          # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+      "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+          #
+          # For example, OpenGL crashed, but it is unclear if the app is responsible.
+      "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+    },
+    "skippedDetail": { # More information about a SKIPPED outcome.
+        #
+        # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+        #
+        # Optional
+      "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+      "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+      "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+    },
+    "successDetail": { # More information about a SUCCESS outcome.
+        #
+        # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+        #
+        # Optional
+      "otherNativeCrash": True or False, # If a native process other than the app crashed.
+    },
+    "failureDetail": { # More information about a FAILURE outcome.
+        #
+        # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+        #
+        # Optional
+      "otherNativeCrash": True or False, # If a native process other than the app crashed.
+      "crashed": True or False, # If the failure was severe because the system under test crashed.
+      "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+      "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+      "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+    },
+    "summary": "A String", # The simplest way to interpret a result.
+        #
+        # Required
+  },
+  "deviceUsageDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How much the device resource is used to perform the test.
+      # 
+      # This is the device usage used for billing purpose, which is different from the run_duration, for example, infrastructure failure won't be charged for device usage.
+      # 
+      # PRECONDITION_FAILED will be returned if one attempts to set a device_usage on a step which already has this field set.
+      # 
+      # - In response: present if previously set. - In create request: optional - In update request: optional
+      #
+      # Example 1: Compute Duration from two Timestamps in pseudo code.
+      #
+      # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+      #
+      # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+      #
+      # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+      #
+      # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+      #
+      # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+      #
+      # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+      #
+      # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+    "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+    "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+  },
+  "hasImages": True or False, # Whether any of the outputs of this step are images whose thumbnails can be fetched with ListThumbnails.
+      # 
+      # - In response: always set - In create/update request: never set
+}
+
+  requestId: string, A unique request ID for server to detect duplicated requests. For example, a UUID.
+
+Optional, but strongly recommended.
+
+Returns:
+  An object of the form:
+
+    { # A Step represents a single operation performed as part of Execution. A step can be used to represent the execution of a tool ( for example a test runner execution or an execution of a compiler).
+      #
+      # Steps can overlap (for instance two steps might have the same start time if some operations are done in parallel).
+      #
+      # Here is an example, let's consider that we have a continuous build is executing a test runner for each iteration. The workflow would look like: - user creates a Execution with id 1 - user creates an TestExecutionStep with id 100 for Execution 1 - user update TestExecutionStep with id 100 to add a raw xml log + the service parses the xml logs and returns a TestExecutionStep with updated TestResult(s). - user update the status of TestExecutionStep with id 100 to COMPLETE
+      #
+      # A Step can be updated until its state is set to COMPLETE at which points it becomes immutable.
+    "testExecutionStep": { # A step that represents running tests. # An execution of a test runner.
+        #
+        # It accepts ant-junit xml files which will be parsed into structured test results by the service. Xml file paths are updated in order to append more files, however they can't be deleted.
+        #
+        # Users can also add test results manually by using the test_result field.
+      "testTiming": { # Testing timing break down to know phases. # The timing break down of the test execution.
+          #
+          # - In response: present if set by create or update - In create/update request: optional
+        "testProcessDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took to run the test process.
+            #
+            # - In response: present if previously set. - In create/update request: optional
+            #
+            # Example 1: Compute Duration from two Timestamps in pseudo code.
+            #
+            # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+            #
+            # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+            #
+            # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+            #
+            # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+            #
+            # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+            #
+            # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+            #
+            # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+          "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+          "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+        },
+      },
+      "testSuiteOverviews": [ # List of test suite overview contents. This could be parsed from xUnit XML log by server, or uploaded directly by user. This references should only be called when test suites are fully parsed or uploaded.
+          #
+          # The maximum allowed number of test suite overviews per step is 1000.
+          #
+          # - In response: always set - In create request: optional - In update request: never (use publishXunitXmlFiles custom method instead)
+        { # A summary of a test suite result either parsed from XML or uploaded directly by a user.
+            #
+            # Note: the API related comments are for StepService only. This message is also being used in ExecutionService in a read only mode for the corresponding step.
+          "name": "A String", # The name of the test suite.
+              #
+              # - In create/response: always set - In update request: never
+          "errorCount": 42, # Number of test cases in error, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+          "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+          "xmlSource": { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original XML file is stored.
+              #
+              # Note: Multiple test suites can share the same xml_source
+              #
+              # Returns INVALID_ARGUMENT if the uri format is not supported.
+              #
+              # - In create/response: optional - In update request: never
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+          "failureCount": 42, # Number of failed test cases, typically set by the service by parsing the xml_source. May also be set by the user.
+              #
+              # - In create/response: always set - In update request: never
+          "skippedCount": 42, # Number of test cases not run, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+        },
+      ],
+      "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # Represents the execution of the test runner.
+          #
+          # The exit code of this tool will be used to determine if the test passed.
+          #
+          # - In response: always set - In create/update request: optional
+        "toolLogs": [ # References to any plain text logs output the tool execution.
+            #
+            # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+            #
+            # The maximum allowed number of tool logs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a file.
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+        ],
+        "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+          "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+            #
+            # The maximum allowed number of tool outputs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a ToolExecution output file.
+            "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+              "className": "A String", # The name of the class.
+              "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+              "name": "A String", # The name of the test case.
+                  #
+                  # Required.
+            },
+            "output": { # A reference to a file. # A FileReference to an output file.
+                #
+                # - In response: always set - In create/update request: always set
+              "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                  #
+                  # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                  #
+                  # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Example 1: Compute Timestamp from POSIX `time()`.
+                #
+                # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                #
+                # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                #
+                # struct timeval tv; gettimeofday(&tv, NULL);
+                #
+                # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                #
+                # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                #
+                # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                #
+                # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                #
+                # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                #
+                # long millis = System.currentTimeMillis();
+                #
+                # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                #
+                #
+                #
+                # Example 5: Compute Timestamp from current time in Python.
+                #
+                # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+              "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+              "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+            },
+          },
+        ],
+        "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+            #
+            # - In response: present if set by create request - In create request: optional - In update request: never set
+          "A String",
+        ],
+      },
+      "testIssues": [ # Issues observed during the test execution.
+          #
+          # For example, if the mobile app under test crashed during the test, the error message and the stack trace content can be recorded here to assist debugging.
+          #
+          # - In response: present if set by create or update - In create/update request: optional
+        { # An abnormal event observed during the test execution.
+          "stackTrace": { # A stacktrace. # Optional.
+            "exception": "A String", # The stack trace message.
+                #
+                # Required
+          },
+          "errorMessage": "A String", # A brief human-readable message describing the abnormal event.
+              #
+              # Required.
+        },
+      ],
+    },
+    "toolExecutionStep": { # Generic tool step to be used for binaries we do not explicitly support. For example: running cp to copy artifacts from one location to another. # An execution of a tool (used for steps we don't explicitly support).
+      "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # A Tool execution.
+          #
+          # - In response: present if set by create/update request - In create/update request: optional
+        "toolLogs": [ # References to any plain text logs output the tool execution.
+            #
+            # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+            #
+            # The maximum allowed number of tool logs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a file.
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+        ],
+        "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+          "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+            #
+            # The maximum allowed number of tool outputs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a ToolExecution output file.
+            "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+              "className": "A String", # The name of the class.
+              "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+              "name": "A String", # The name of the test case.
+                  #
+                  # Required.
+            },
+            "output": { # A reference to a file. # A FileReference to an output file.
+                #
+                # - In response: always set - In create/update request: always set
+              "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                  #
+                  # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                  #
+                  # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Example 1: Compute Timestamp from POSIX `time()`.
+                #
+                # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                #
+                # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                #
+                # struct timeval tv; gettimeofday(&tv, NULL);
+                #
+                # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                #
+                # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                #
+                # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                #
+                # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                #
+                # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                #
+                # long millis = System.currentTimeMillis();
+                #
+                # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                #
+                #
+                #
+                # Example 5: Compute Timestamp from current time in Python.
+                #
+                # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+              "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+              "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+            },
+          },
+        ],
+        "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+            #
+            # - In response: present if set by create request - In create request: optional - In update request: never set
+          "A String",
+        ],
+      },
+    },
+    "stepId": "A String", # A unique identifier within a Execution for this Step.
+        #
+        # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+        #
+        # - In response: always set - In create/update request: never set
+    "runDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took for this step to run.
+        #
+        # If unset, this is set to the difference between creation_time and completion_time when the step is set to the COMPLETE state. In some cases, it is appropriate to set this value separately: For instance, if a step is created, but the operation it represents is queued for a few minutes before it executes, it would be appropriate not to include the time spent queued in its run_duration.
+        #
+        # PRECONDITION_FAILED will be returned if one attempts to set a run_duration on a step which already has this field set.
+        #
+        # - In response: present if previously set; always present on COMPLETE step - In create request: optional - In update request: optional
+        #
+        # Example 1: Compute Duration from two Timestamps in pseudo code.
+        #
+        # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+        #
+        # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+        #
+        # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+        #
+        # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+        #
+        # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+        #
+        # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+        #
+        # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+      "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+      "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+    },
+    "description": "A String", # A description of this tool For example: mvn clean package -D skipTests=true
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+    "labels": [ # Arbitrary user-supplied key/value pairs that are associated with the step.
+        #
+        # Users are responsible for managing the key namespace such that keys don't accidentally collide.
+        #
+        # An INVALID_ARGUMENT will be returned if the number of labels exceeds 100 or if the length of any of the keys or values exceeds 100 characters.
+        #
+        # - In response: always set - In create request: optional - In update request: optional; any new key/value pair will be added to the map, and any new value for an existing key will update that key's value
+      {
+        "value": "A String",
+        "key": "A String",
+      },
+    ],
+    "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step was created.
+        #
+        # - In response: always set - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "name": "A String", # A short human-readable name to display in the UI. Maximum of 100 characters. For example: Clean build
+        #
+        # A PRECONDITION_FAILED will be returned upon creating a new step if it shares its name and dimension_value with an existing step. If two steps represent a similar action, but have different dimension values, they should share the same name. For instance, if the same set of tests is run on two different platforms, the two steps should have the same name.
+        #
+        # - In response: always set - In create request: always set - In update request: never set
+    "state": "A String", # The initial state is IN_PROGRESS. The only legal state transitions are * IN_PROGRESS -> COMPLETE
+        #
+        # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+        #
+        # It is valid to create Step with a state set to COMPLETE. The state can only be set to COMPLETE once. A PRECONDITION_FAILED will be returned if the state is set to COMPLETE multiple times.
+        #
+        # - In response: always set - In create/update request: optional
+    "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step status was set to complete.
+        #
+        # This value will be set automatically when state transitions to COMPLETE.
+        #
+        # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "dimensionValue": [ # If the execution containing this step has any dimension_definition set, then this field allows the child to specify the values of the dimensions.
+        #
+        # The keys must exactly match the dimension_definition of the execution.
+        #
+        # For example, if the execution has `dimension_definition = ['attempt', 'device']` then a step must define values for those dimensions, eg. `dimension_value = ['attempt': '1', 'device': 'Nexus 6']`
+        #
+        # If a step does not participate in one dimension of the matrix, the value for that dimension should be empty string. For example, if one of the tests is executed by a runner which does not support retries, the step could have `dimension_value = ['attempt': '', 'device': 'Nexus 6']`
+        #
+        # If the step does not participate in any dimensions of the matrix, it may leave dimension_value unset.
+        #
+        # A PRECONDITION_FAILED will be returned if any of the keys do not exist in the dimension_definition of the execution.
+        #
+        # A PRECONDITION_FAILED will be returned if another step in this execution already has the same name and dimension_value, but differs on other data fields, for example, step field is different.
+        #
+        # A PRECONDITION_FAILED will be returned if dimension_value is set, and there is a dimension_definition in the execution which is not specified as one of the keys.
+        #
+        # - In response: present if set by create - In create request: optional - In update request: never set
+      {
+        "value": "A String",
+        "key": "A String",
+      },
+    ],
+    "outcome": { # Interprets a result so that humans and machines can act on it. # Classification of the result, for example into SUCCESS or FAILURE
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+      "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+          #
+          # Optional
+        "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+            #
+            # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+        "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+            #
+            # For example, OpenGL crashed, but it is unclear if the app is responsible.
+        "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+      },
+      "skippedDetail": { # More information about a SKIPPED outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+          #
+          # Optional
+        "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+        "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+        "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+      },
+      "successDetail": { # More information about a SUCCESS outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+      },
+      "failureDetail": { # More information about a FAILURE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+        "crashed": True or False, # If the failure was severe because the system under test crashed.
+        "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+        "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+        "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+      },
+      "summary": "A String", # The simplest way to interpret a result.
+          #
+          # Required
+    },
+    "deviceUsageDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How much the device resource is used to perform the test.
+        #
+        # This is the device usage used for billing purpose, which is different from the run_duration, for example, infrastructure failure won't be charged for device usage.
+        #
+        # PRECONDITION_FAILED will be returned if one attempts to set a device_usage on a step which already has this field set.
+        #
+        # - In response: present if previously set. - In create request: optional - In update request: optional
+        #
+        # Example 1: Compute Duration from two Timestamps in pseudo code.
+        #
+        # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+        #
+        # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+        #
+        # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+        #
+        # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+        #
+        # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+        #
+        # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+        #
+        # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+      "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+      "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+    },
+    "hasImages": True or False, # Whether any of the outputs of this step are images whose thumbnails can be fetched with ListThumbnails.
+        #
+        # - In response: always set - In create/update request: never set
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(projectId=None, historyId=None, executionId=None, stepId=None)</code>
+  <pre>Gets a Step.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to read project - INVALID_ARGUMENT - if the request is malformed - NOT_FOUND - if the Step does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+  executionId: string, A Execution id.
+
+Required. (required)
+  stepId: string, A Step id.
+
+Required. (required)
+
+Returns:
+  An object of the form:
+
+    { # A Step represents a single operation performed as part of Execution. A step can be used to represent the execution of a tool ( for example a test runner execution or an execution of a compiler).
+      #
+      # Steps can overlap (for instance two steps might have the same start time if some operations are done in parallel).
+      #
+      # Here is an example, let's consider that we have a continuous build is executing a test runner for each iteration. The workflow would look like: - user creates a Execution with id 1 - user creates an TestExecutionStep with id 100 for Execution 1 - user update TestExecutionStep with id 100 to add a raw xml log + the service parses the xml logs and returns a TestExecutionStep with updated TestResult(s). - user update the status of TestExecutionStep with id 100 to COMPLETE
+      #
+      # A Step can be updated until its state is set to COMPLETE at which points it becomes immutable.
+    "testExecutionStep": { # A step that represents running tests. # An execution of a test runner.
+        #
+        # It accepts ant-junit xml files which will be parsed into structured test results by the service. Xml file paths are updated in order to append more files, however they can't be deleted.
+        #
+        # Users can also add test results manually by using the test_result field.
+      "testTiming": { # Testing timing break down to know phases. # The timing break down of the test execution.
+          #
+          # - In response: present if set by create or update - In create/update request: optional
+        "testProcessDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took to run the test process.
+            #
+            # - In response: present if previously set. - In create/update request: optional
+            #
+            # Example 1: Compute Duration from two Timestamps in pseudo code.
+            #
+            # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+            #
+            # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+            #
+            # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+            #
+            # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+            #
+            # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+            #
+            # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+            #
+            # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+          "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+          "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+        },
+      },
+      "testSuiteOverviews": [ # List of test suite overview contents. This could be parsed from xUnit XML log by server, or uploaded directly by user. This references should only be called when test suites are fully parsed or uploaded.
+          #
+          # The maximum allowed number of test suite overviews per step is 1000.
+          #
+          # - In response: always set - In create request: optional - In update request: never (use publishXunitXmlFiles custom method instead)
+        { # A summary of a test suite result either parsed from XML or uploaded directly by a user.
+            #
+            # Note: the API related comments are for StepService only. This message is also being used in ExecutionService in a read only mode for the corresponding step.
+          "name": "A String", # The name of the test suite.
+              #
+              # - In create/response: always set - In update request: never
+          "errorCount": 42, # Number of test cases in error, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+          "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+          "xmlSource": { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original XML file is stored.
+              #
+              # Note: Multiple test suites can share the same xml_source
+              #
+              # Returns INVALID_ARGUMENT if the uri format is not supported.
+              #
+              # - In create/response: optional - In update request: never
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+          "failureCount": 42, # Number of failed test cases, typically set by the service by parsing the xml_source. May also be set by the user.
+              #
+              # - In create/response: always set - In update request: never
+          "skippedCount": 42, # Number of test cases not run, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+        },
+      ],
+      "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # Represents the execution of the test runner.
+          #
+          # The exit code of this tool will be used to determine if the test passed.
+          #
+          # - In response: always set - In create/update request: optional
+        "toolLogs": [ # References to any plain text logs output the tool execution.
+            #
+            # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+            #
+            # The maximum allowed number of tool logs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a file.
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+        ],
+        "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+          "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+            #
+            # The maximum allowed number of tool outputs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a ToolExecution output file.
+            "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+              "className": "A String", # The name of the class.
+              "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+              "name": "A String", # The name of the test case.
+                  #
+                  # Required.
+            },
+            "output": { # A reference to a file. # A FileReference to an output file.
+                #
+                # - In response: always set - In create/update request: always set
+              "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                  #
+                  # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                  #
+                  # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Example 1: Compute Timestamp from POSIX `time()`.
+                #
+                # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                #
+                # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                #
+                # struct timeval tv; gettimeofday(&tv, NULL);
+                #
+                # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                #
+                # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                #
+                # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                #
+                # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                #
+                # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                #
+                # long millis = System.currentTimeMillis();
+                #
+                # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                #
+                #
+                #
+                # Example 5: Compute Timestamp from current time in Python.
+                #
+                # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+              "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+              "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+            },
+          },
+        ],
+        "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+            #
+            # - In response: present if set by create request - In create request: optional - In update request: never set
+          "A String",
+        ],
+      },
+      "testIssues": [ # Issues observed during the test execution.
+          #
+          # For example, if the mobile app under test crashed during the test, the error message and the stack trace content can be recorded here to assist debugging.
+          #
+          # - In response: present if set by create or update - In create/update request: optional
+        { # An abnormal event observed during the test execution.
+          "stackTrace": { # A stacktrace. # Optional.
+            "exception": "A String", # The stack trace message.
+                #
+                # Required
+          },
+          "errorMessage": "A String", # A brief human-readable message describing the abnormal event.
+              #
+              # Required.
+        },
+      ],
+    },
+    "toolExecutionStep": { # Generic tool step to be used for binaries we do not explicitly support. For example: running cp to copy artifacts from one location to another. # An execution of a tool (used for steps we don't explicitly support).
+      "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # A Tool execution.
+          #
+          # - In response: present if set by create/update request - In create/update request: optional
+        "toolLogs": [ # References to any plain text logs output the tool execution.
+            #
+            # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+            #
+            # The maximum allowed number of tool logs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a file.
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+        ],
+        "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+          "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+            #
+            # The maximum allowed number of tool outputs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a ToolExecution output file.
+            "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+              "className": "A String", # The name of the class.
+              "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+              "name": "A String", # The name of the test case.
+                  #
+                  # Required.
+            },
+            "output": { # A reference to a file. # A FileReference to an output file.
+                #
+                # - In response: always set - In create/update request: always set
+              "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                  #
+                  # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                  #
+                  # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Example 1: Compute Timestamp from POSIX `time()`.
+                #
+                # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                #
+                # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                #
+                # struct timeval tv; gettimeofday(&tv, NULL);
+                #
+                # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                #
+                # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                #
+                # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                #
+                # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                #
+                # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                #
+                # long millis = System.currentTimeMillis();
+                #
+                # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                #
+                #
+                #
+                # Example 5: Compute Timestamp from current time in Python.
+                #
+                # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+              "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+              "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+            },
+          },
+        ],
+        "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+            #
+            # - In response: present if set by create request - In create request: optional - In update request: never set
+          "A String",
+        ],
+      },
+    },
+    "stepId": "A String", # A unique identifier within a Execution for this Step.
+        #
+        # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+        #
+        # - In response: always set - In create/update request: never set
+    "runDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took for this step to run.
+        #
+        # If unset, this is set to the difference between creation_time and completion_time when the step is set to the COMPLETE state. In some cases, it is appropriate to set this value separately: For instance, if a step is created, but the operation it represents is queued for a few minutes before it executes, it would be appropriate not to include the time spent queued in its run_duration.
+        #
+        # PRECONDITION_FAILED will be returned if one attempts to set a run_duration on a step which already has this field set.
+        #
+        # - In response: present if previously set; always present on COMPLETE step - In create request: optional - In update request: optional
+        #
+        # Example 1: Compute Duration from two Timestamps in pseudo code.
+        #
+        # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+        #
+        # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+        #
+        # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+        #
+        # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+        #
+        # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+        #
+        # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+        #
+        # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+      "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+      "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+    },
+    "description": "A String", # A description of this tool For example: mvn clean package -D skipTests=true
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+    "labels": [ # Arbitrary user-supplied key/value pairs that are associated with the step.
+        #
+        # Users are responsible for managing the key namespace such that keys don't accidentally collide.
+        #
+        # An INVALID_ARGUMENT will be returned if the number of labels exceeds 100 or if the length of any of the keys or values exceeds 100 characters.
+        #
+        # - In response: always set - In create request: optional - In update request: optional; any new key/value pair will be added to the map, and any new value for an existing key will update that key's value
+      {
+        "value": "A String",
+        "key": "A String",
+      },
+    ],
+    "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step was created.
+        #
+        # - In response: always set - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "name": "A String", # A short human-readable name to display in the UI. Maximum of 100 characters. For example: Clean build
+        #
+        # A PRECONDITION_FAILED will be returned upon creating a new step if it shares its name and dimension_value with an existing step. If two steps represent a similar action, but have different dimension values, they should share the same name. For instance, if the same set of tests is run on two different platforms, the two steps should have the same name.
+        #
+        # - In response: always set - In create request: always set - In update request: never set
+    "state": "A String", # The initial state is IN_PROGRESS. The only legal state transitions are * IN_PROGRESS -> COMPLETE
+        #
+        # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+        #
+        # It is valid to create Step with a state set to COMPLETE. The state can only be set to COMPLETE once. A PRECONDITION_FAILED will be returned if the state is set to COMPLETE multiple times.
+        #
+        # - In response: always set - In create/update request: optional
+    "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step status was set to complete.
+        #
+        # This value will be set automatically when state transitions to COMPLETE.
+        #
+        # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "dimensionValue": [ # If the execution containing this step has any dimension_definition set, then this field allows the child to specify the values of the dimensions.
+        #
+        # The keys must exactly match the dimension_definition of the execution.
+        #
+        # For example, if the execution has `dimension_definition = ['attempt', 'device']` then a step must define values for those dimensions, eg. `dimension_value = ['attempt': '1', 'device': 'Nexus 6']`
+        #
+        # If a step does not participate in one dimension of the matrix, the value for that dimension should be empty string. For example, if one of the tests is executed by a runner which does not support retries, the step could have `dimension_value = ['attempt': '', 'device': 'Nexus 6']`
+        #
+        # If the step does not participate in any dimensions of the matrix, it may leave dimension_value unset.
+        #
+        # A PRECONDITION_FAILED will be returned if any of the keys do not exist in the dimension_definition of the execution.
+        #
+        # A PRECONDITION_FAILED will be returned if another step in this execution already has the same name and dimension_value, but differs on other data fields, for example, step field is different.
+        #
+        # A PRECONDITION_FAILED will be returned if dimension_value is set, and there is a dimension_definition in the execution which is not specified as one of the keys.
+        #
+        # - In response: present if set by create - In create request: optional - In update request: never set
+      {
+        "value": "A String",
+        "key": "A String",
+      },
+    ],
+    "outcome": { # Interprets a result so that humans and machines can act on it. # Classification of the result, for example into SUCCESS or FAILURE
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+      "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+          #
+          # Optional
+        "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+            #
+            # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+        "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+            #
+            # For example, OpenGL crashed, but it is unclear if the app is responsible.
+        "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+      },
+      "skippedDetail": { # More information about a SKIPPED outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+          #
+          # Optional
+        "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+        "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+        "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+      },
+      "successDetail": { # More information about a SUCCESS outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+      },
+      "failureDetail": { # More information about a FAILURE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+        "crashed": True or False, # If the failure was severe because the system under test crashed.
+        "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+        "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+        "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+      },
+      "summary": "A String", # The simplest way to interpret a result.
+          #
+          # Required
+    },
+    "deviceUsageDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How much the device resource is used to perform the test.
+        #
+        # This is the device usage used for billing purpose, which is different from the run_duration, for example, infrastructure failure won't be charged for device usage.
+        #
+        # PRECONDITION_FAILED will be returned if one attempts to set a device_usage on a step which already has this field set.
+        #
+        # - In response: present if previously set. - In create request: optional - In update request: optional
+        #
+        # Example 1: Compute Duration from two Timestamps in pseudo code.
+        #
+        # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+        #
+        # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+        #
+        # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+        #
+        # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+        #
+        # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+        #
+        # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+        #
+        # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+      "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+      "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+    },
+    "hasImages": True or False, # Whether any of the outputs of this step are images whose thumbnails can be fetched with ListThumbnails.
+        #
+        # - In response: always set - In create/update request: never set
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(projectId=None, historyId=None, executionId=None, pageToken=None, pageSize=None)</code>
+  <pre>Lists Steps for a given Execution.
+
+The steps are sorted by creation_time in descending order. The step_id key will be used to order the steps with the same creation_time.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to read project - INVALID_ARGUMENT - if the request is malformed - FAILED_PRECONDITION - if an argument in the request happens to be invalid; e.g. if an attempt is made to list the children of a nonexistent Step - NOT_FOUND - if the containing Execution does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+  executionId: string, A Execution id.
+
+Required. (required)
+  pageToken: string, A continuation token to resume the query at the next item.
+
+Optional.
+  pageSize: integer, The maximum number of Steps to fetch.
+
+Default value: 25. The server will use this default if the field is not set or has a value of 0.
+
+Optional.
+
+Returns:
+  An object of the form:
+
+    { # Response message for StepService.List.
+    "nextPageToken": "A String", # A continuation token to resume the query at the next item.
+        #
+        # If set, indicates that there are more steps to read, by calling list again with this value in the page_token field.
+    "steps": [ # Steps.
+      { # A Step represents a single operation performed as part of Execution. A step can be used to represent the execution of a tool ( for example a test runner execution or an execution of a compiler).
+          #
+          # Steps can overlap (for instance two steps might have the same start time if some operations are done in parallel).
+          #
+          # Here is an example, let's consider that we have a continuous build is executing a test runner for each iteration. The workflow would look like: - user creates a Execution with id 1 - user creates an TestExecutionStep with id 100 for Execution 1 - user update TestExecutionStep with id 100 to add a raw xml log + the service parses the xml logs and returns a TestExecutionStep with updated TestResult(s). - user update the status of TestExecutionStep with id 100 to COMPLETE
+          #
+          # A Step can be updated until its state is set to COMPLETE at which points it becomes immutable.
+        "testExecutionStep": { # A step that represents running tests. # An execution of a test runner.
+            #
+            # It accepts ant-junit xml files which will be parsed into structured test results by the service. Xml file paths are updated in order to append more files, however they can't be deleted.
+            #
+            # Users can also add test results manually by using the test_result field.
+          "testTiming": { # Testing timing break down to know phases. # The timing break down of the test execution.
+              #
+              # - In response: present if set by create or update - In create/update request: optional
+            "testProcessDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took to run the test process.
+                #
+                # - In response: present if previously set. - In create/update request: optional
+                #
+                # Example 1: Compute Duration from two Timestamps in pseudo code.
+                #
+                # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+                #
+                # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+                #
+                # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+                #
+                # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+                #
+                # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+                #
+                # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+                #
+                # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+              "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+              "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+            },
+          },
+          "testSuiteOverviews": [ # List of test suite overview contents. This could be parsed from xUnit XML log by server, or uploaded directly by user. This references should only be called when test suites are fully parsed or uploaded.
+              #
+              # The maximum allowed number of test suite overviews per step is 1000.
+              #
+              # - In response: always set - In create request: optional - In update request: never (use publishXunitXmlFiles custom method instead)
+            { # A summary of a test suite result either parsed from XML or uploaded directly by a user.
+                #
+                # Note: the API related comments are for StepService only. This message is also being used in ExecutionService in a read only mode for the corresponding step.
+              "name": "A String", # The name of the test suite.
+                  #
+                  # - In create/response: always set - In update request: never
+              "errorCount": 42, # Number of test cases in error, typically set by the service by parsing the xml_source.
+                  #
+                  # - In create/response: always set - In update request: never
+              "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
+                  #
+                  # - In create/response: always set - In update request: never
+              "xmlSource": { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original XML file is stored.
+                  #
+                  # Note: Multiple test suites can share the same xml_source
+                  #
+                  # Returns INVALID_ARGUMENT if the uri format is not supported.
+                  #
+                  # - In create/response: optional - In update request: never
+                "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                    #
+                    # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                    #
+                    # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                    #
+                    # - In response: always set - In create/update request: always set
+              },
+              "failureCount": 42, # Number of failed test cases, typically set by the service by parsing the xml_source. May also be set by the user.
+                  #
+                  # - In create/response: always set - In update request: never
+              "skippedCount": 42, # Number of test cases not run, typically set by the service by parsing the xml_source.
+                  #
+                  # - In create/response: always set - In update request: never
+            },
+          ],
+          "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # Represents the execution of the test runner.
+              #
+              # The exit code of this tool will be used to determine if the test passed.
+              #
+              # - In response: always set - In create/update request: optional
+            "toolLogs": [ # References to any plain text logs output the tool execution.
+                #
+                # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+                #
+                # The maximum allowed number of tool logs per step is 1000.
+                #
+                # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+              { # A reference to a file.
+                "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                    #
+                    # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                    #
+                    # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                    #
+                    # - In response: always set - In create/update request: always set
+              },
+            ],
+            "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+                #
+                # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+              "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+                #
+                # The maximum allowed number of tool outputs per step is 1000.
+                #
+                # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+              { # A reference to a ToolExecution output file.
+                "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                    #
+                    # - In response: present if set by create/update request - In create/update request: optional
+                    #
+                    # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+                  "className": "A String", # The name of the class.
+                  "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+                  "name": "A String", # The name of the test case.
+                      #
+                      # Required.
+                },
+                "output": { # A reference to a file. # A FileReference to an output file.
+                    #
+                    # - In response: always set - In create/update request: always set
+                  "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                      #
+                      # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                      #
+                      # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                      #
+                      # - In response: always set - In create/update request: always set
+                },
+                "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                    #
+                    # - In response: present if set by create/update request - In create/update request: optional
+                    #
+                    # Example 1: Compute Timestamp from POSIX `time()`.
+                    #
+                    # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                    #
+                    # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                    #
+                    # struct timeval tv; gettimeofday(&tv, NULL);
+                    #
+                    # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                    #
+                    # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                    #
+                    # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                    #
+                    # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                    #
+                    # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                    #
+                    # long millis = System.currentTimeMillis();
+                    #
+                    # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                    #
+                    #
+                    #
+                    # Example 5: Compute Timestamp from current time in Python.
+                    #
+                    # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+                  "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+                  "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+                },
+              },
+            ],
+            "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+                #
+                # - In response: present if set by create request - In create request: optional - In update request: never set
+              "A String",
+            ],
+          },
+          "testIssues": [ # Issues observed during the test execution.
+              #
+              # For example, if the mobile app under test crashed during the test, the error message and the stack trace content can be recorded here to assist debugging.
+              #
+              # - In response: present if set by create or update - In create/update request: optional
+            { # An abnormal event observed during the test execution.
+              "stackTrace": { # A stacktrace. # Optional.
+                "exception": "A String", # The stack trace message.
+                    #
+                    # Required
+              },
+              "errorMessage": "A String", # A brief human-readable message describing the abnormal event.
+                  #
+                  # Required.
+            },
+          ],
+        },
+        "toolExecutionStep": { # Generic tool step to be used for binaries we do not explicitly support. For example: running cp to copy artifacts from one location to another. # An execution of a tool (used for steps we don't explicitly support).
+          "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # A Tool execution.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+            "toolLogs": [ # References to any plain text logs output the tool execution.
+                #
+                # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+                #
+                # The maximum allowed number of tool logs per step is 1000.
+                #
+                # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+              { # A reference to a file.
+                "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                    #
+                    # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                    #
+                    # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                    #
+                    # - In response: always set - In create/update request: always set
+              },
+            ],
+            "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+                #
+                # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+              "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+                #
+                # The maximum allowed number of tool outputs per step is 1000.
+                #
+                # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+              { # A reference to a ToolExecution output file.
+                "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                    #
+                    # - In response: present if set by create/update request - In create/update request: optional
+                    #
+                    # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+                  "className": "A String", # The name of the class.
+                  "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+                  "name": "A String", # The name of the test case.
+                      #
+                      # Required.
+                },
+                "output": { # A reference to a file. # A FileReference to an output file.
+                    #
+                    # - In response: always set - In create/update request: always set
+                  "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                      #
+                      # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                      #
+                      # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                      #
+                      # - In response: always set - In create/update request: always set
+                },
+                "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                    #
+                    # - In response: present if set by create/update request - In create/update request: optional
+                    #
+                    # Example 1: Compute Timestamp from POSIX `time()`.
+                    #
+                    # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                    #
+                    # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                    #
+                    # struct timeval tv; gettimeofday(&tv, NULL);
+                    #
+                    # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                    #
+                    # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                    #
+                    # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                    #
+                    # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                    #
+                    # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                    #
+                    # long millis = System.currentTimeMillis();
+                    #
+                    # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                    #
+                    #
+                    #
+                    # Example 5: Compute Timestamp from current time in Python.
+                    #
+                    # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+                  "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+                  "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+                },
+              },
+            ],
+            "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+                #
+                # - In response: present if set by create request - In create request: optional - In update request: never set
+              "A String",
+            ],
+          },
+        },
+        "stepId": "A String", # A unique identifier within a Execution for this Step.
+            #
+            # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+            #
+            # - In response: always set - In create/update request: never set
+        "runDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took for this step to run.
+            #
+            # If unset, this is set to the difference between creation_time and completion_time when the step is set to the COMPLETE state. In some cases, it is appropriate to set this value separately: For instance, if a step is created, but the operation it represents is queued for a few minutes before it executes, it would be appropriate not to include the time spent queued in its run_duration.
+            #
+            # PRECONDITION_FAILED will be returned if one attempts to set a run_duration on a step which already has this field set.
+            #
+            # - In response: present if previously set; always present on COMPLETE step - In create request: optional - In update request: optional
+            #
+            # Example 1: Compute Duration from two Timestamps in pseudo code.
+            #
+            # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+            #
+            # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+            #
+            # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+            #
+            # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+            #
+            # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+            #
+            # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+            #
+            # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+          "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+          "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+        },
+        "description": "A String", # A description of this tool For example: mvn clean package -D skipTests=true
+            #
+            # - In response: present if set by create/update request - In create/update request: optional
+        "labels": [ # Arbitrary user-supplied key/value pairs that are associated with the step.
+            #
+            # Users are responsible for managing the key namespace such that keys don't accidentally collide.
+            #
+            # An INVALID_ARGUMENT will be returned if the number of labels exceeds 100 or if the length of any of the keys or values exceeds 100 characters.
+            #
+            # - In response: always set - In create request: optional - In update request: optional; any new key/value pair will be added to the map, and any new value for an existing key will update that key's value
+          {
+            "value": "A String",
+            "key": "A String",
+          },
+        ],
+        "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step was created.
+            #
+            # - In response: always set - In create/update request: never set
+            #
+            # Example 1: Compute Timestamp from POSIX `time()`.
+            #
+            # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+            #
+            # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+            #
+            # struct timeval tv; gettimeofday(&tv, NULL);
+            #
+            # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+            #
+            # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+            #
+            # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+            #
+            # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+            #
+            # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+            #
+            # long millis = System.currentTimeMillis();
+            #
+            # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+            #
+            #
+            #
+            # Example 5: Compute Timestamp from current time in Python.
+            #
+            # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+          "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+          "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+        },
+        "name": "A String", # A short human-readable name to display in the UI. Maximum of 100 characters. For example: Clean build
+            #
+            # A PRECONDITION_FAILED will be returned upon creating a new step if it shares its name and dimension_value with an existing step. If two steps represent a similar action, but have different dimension values, they should share the same name. For instance, if the same set of tests is run on two different platforms, the two steps should have the same name.
+            #
+            # - In response: always set - In create request: always set - In update request: never set
+        "state": "A String", # The initial state is IN_PROGRESS. The only legal state transitions are * IN_PROGRESS -> COMPLETE
+            #
+            # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+            #
+            # It is valid to create Step with a state set to COMPLETE. The state can only be set to COMPLETE once. A PRECONDITION_FAILED will be returned if the state is set to COMPLETE multiple times.
+            #
+            # - In response: always set - In create/update request: optional
+        "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step status was set to complete.
+            #
+            # This value will be set automatically when state transitions to COMPLETE.
+            #
+            # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+            #
+            # Example 1: Compute Timestamp from POSIX `time()`.
+            #
+            # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+            #
+            # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+            #
+            # struct timeval tv; gettimeofday(&tv, NULL);
+            #
+            # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+            #
+            # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+            #
+            # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+            #
+            # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+            #
+            # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+            #
+            # long millis = System.currentTimeMillis();
+            #
+            # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+            #
+            #
+            #
+            # Example 5: Compute Timestamp from current time in Python.
+            #
+            # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+          "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+          "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+        },
+        "dimensionValue": [ # If the execution containing this step has any dimension_definition set, then this field allows the child to specify the values of the dimensions.
+            #
+            # The keys must exactly match the dimension_definition of the execution.
+            #
+            # For example, if the execution has `dimension_definition = ['attempt', 'device']` then a step must define values for those dimensions, eg. `dimension_value = ['attempt': '1', 'device': 'Nexus 6']`
+            #
+            # If a step does not participate in one dimension of the matrix, the value for that dimension should be empty string. For example, if one of the tests is executed by a runner which does not support retries, the step could have `dimension_value = ['attempt': '', 'device': 'Nexus 6']`
+            #
+            # If the step does not participate in any dimensions of the matrix, it may leave dimension_value unset.
+            #
+            # A PRECONDITION_FAILED will be returned if any of the keys do not exist in the dimension_definition of the execution.
+            #
+            # A PRECONDITION_FAILED will be returned if another step in this execution already has the same name and dimension_value, but differs on other data fields, for example, step field is different.
+            #
+            # A PRECONDITION_FAILED will be returned if dimension_value is set, and there is a dimension_definition in the execution which is not specified as one of the keys.
+            #
+            # - In response: present if set by create - In create request: optional - In update request: never set
+          {
+            "value": "A String",
+            "key": "A String",
+          },
+        ],
+        "outcome": { # Interprets a result so that humans and machines can act on it. # Classification of the result, for example into SUCCESS or FAILURE
+            #
+            # - In response: present if set by create/update request - In create/update request: optional
+          "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+              #
+              # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+              #
+              # Optional
+            "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+                #
+                # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+            "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+                #
+                # For example, OpenGL crashed, but it is unclear if the app is responsible.
+            "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+          },
+          "skippedDetail": { # More information about a SKIPPED outcome.
+              #
+              # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+              #
+              # Optional
+            "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+            "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+            "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+          },
+          "successDetail": { # More information about a SUCCESS outcome.
+              #
+              # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+              #
+              # Optional
+            "otherNativeCrash": True or False, # If a native process other than the app crashed.
+          },
+          "failureDetail": { # More information about a FAILURE outcome.
+              #
+              # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+              #
+              # Optional
+            "otherNativeCrash": True or False, # If a native process other than the app crashed.
+            "crashed": True or False, # If the failure was severe because the system under test crashed.
+            "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+            "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+            "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+          },
+          "summary": "A String", # The simplest way to interpret a result.
+              #
+              # Required
+        },
+        "deviceUsageDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How much the device resource is used to perform the test.
+            #
+            # This is the device usage used for billing purpose, which is different from the run_duration, for example, infrastructure failure won't be charged for device usage.
+            #
+            # PRECONDITION_FAILED will be returned if one attempts to set a device_usage on a step which already has this field set.
+            #
+            # - In response: present if previously set. - In create request: optional - In update request: optional
+            #
+            # Example 1: Compute Duration from two Timestamps in pseudo code.
+            #
+            # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+            #
+            # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+            #
+            # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+            #
+            # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+            #
+            # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+            #
+            # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+            #
+            # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+          "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+          "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+        },
+        "hasImages": True or False, # Whether any of the outputs of this step are images whose thumbnails can be fetched with ListThumbnails.
+            #
+            # - In response: always set - In create/update request: never set
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+<div class="method">
+    <code class="details" id="patch">patch(projectId=None, historyId=None, executionId=None, stepId=None, body, requestId=None)</code>
+  <pre>Updates an existing Step with the supplied partial entity.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to write project - INVALID_ARGUMENT - if the request is malformed - FAILED_PRECONDITION - if the requested state transition is illegal (e.g try to upload a duplicate xml file), if the updated step is too large (more than 10Mib) - NOT_FOUND - if the containing Execution does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+  executionId: string, A Execution id.
+
+Required. (required)
+  stepId: string, A Step id.
+
+Required. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A Step represents a single operation performed as part of Execution. A step can be used to represent the execution of a tool ( for example a test runner execution or an execution of a compiler).
+    # 
+    # Steps can overlap (for instance two steps might have the same start time if some operations are done in parallel).
+    # 
+    # Here is an example, let's consider that we have a continuous build is executing a test runner for each iteration. The workflow would look like: - user creates a Execution with id 1 - user creates an TestExecutionStep with id 100 for Execution 1 - user update TestExecutionStep with id 100 to add a raw xml log + the service parses the xml logs and returns a TestExecutionStep with updated TestResult(s). - user update the status of TestExecutionStep with id 100 to COMPLETE
+    # 
+    # A Step can be updated until its state is set to COMPLETE at which points it becomes immutable.
+  "testExecutionStep": { # A step that represents running tests. # An execution of a test runner.
+      #
+      # It accepts ant-junit xml files which will be parsed into structured test results by the service. Xml file paths are updated in order to append more files, however they can't be deleted.
+      #
+      # Users can also add test results manually by using the test_result field.
+    "testTiming": { # Testing timing break down to know phases. # The timing break down of the test execution.
+        #
+        # - In response: present if set by create or update - In create/update request: optional
+      "testProcessDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took to run the test process.
+          #
+          # - In response: present if previously set. - In create/update request: optional
+          #
+          # Example 1: Compute Duration from two Timestamps in pseudo code.
+          #
+          # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+          #
+          # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+          #
+          # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+          #
+          # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+          #
+          # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+          #
+          # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+          #
+          # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+        "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+        "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+      },
+    },
+    "testSuiteOverviews": [ # List of test suite overview contents. This could be parsed from xUnit XML log by server, or uploaded directly by user. This references should only be called when test suites are fully parsed or uploaded.
+        #
+        # The maximum allowed number of test suite overviews per step is 1000.
+        #
+        # - In response: always set - In create request: optional - In update request: never (use publishXunitXmlFiles custom method instead)
+      { # A summary of a test suite result either parsed from XML or uploaded directly by a user.
+          #
+          # Note: the API related comments are for StepService only. This message is also being used in ExecutionService in a read only mode for the corresponding step.
+        "name": "A String", # The name of the test suite.
+            #
+            # - In create/response: always set - In update request: never
+        "errorCount": 42, # Number of test cases in error, typically set by the service by parsing the xml_source.
+            #
+            # - In create/response: always set - In update request: never
+        "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
+            #
+            # - In create/response: always set - In update request: never
+        "xmlSource": { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original XML file is stored.
+            #
+            # Note: Multiple test suites can share the same xml_source
+            #
+            # Returns INVALID_ARGUMENT if the uri format is not supported.
+            #
+            # - In create/response: optional - In update request: never
+          "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+              #
+              # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+              #
+              # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "failureCount": 42, # Number of failed test cases, typically set by the service by parsing the xml_source. May also be set by the user.
+            #
+            # - In create/response: always set - In update request: never
+        "skippedCount": 42, # Number of test cases not run, typically set by the service by parsing the xml_source.
+            #
+            # - In create/response: always set - In update request: never
+      },
+    ],
+    "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # Represents the execution of the test runner.
+        #
+        # The exit code of this tool will be used to determine if the test passed.
+        #
+        # - In response: always set - In create/update request: optional
+      "toolLogs": [ # References to any plain text logs output the tool execution.
+          #
+          # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+          #
+          # The maximum allowed number of tool logs per step is 1000.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+        { # A reference to a file.
+          "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+              #
+              # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+              #
+              # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+      ],
+      "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+        "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+            #
+            # - In response: always set - In create/update request: always set
+      },
+      "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+          #
+          # The maximum allowed number of tool outputs per step is 1000.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+        { # A reference to a ToolExecution output file.
+          "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+            "className": "A String", # The name of the class.
+            "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+            "name": "A String", # The name of the test case.
+                #
+                # Required.
+          },
+          "output": { # A reference to a file. # A FileReference to an output file.
+              #
+              # - In response: always set - In create/update request: always set
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+          "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Example 1: Compute Timestamp from POSIX `time()`.
+              #
+              # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+              #
+              # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+              #
+              # struct timeval tv; gettimeofday(&tv, NULL);
+              #
+              # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+              #
+              # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+              #
+              # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+              #
+              # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+              #
+              # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+              #
+              # long millis = System.currentTimeMillis();
+              #
+              # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+              #
+              #
+              #
+              # Example 5: Compute Timestamp from current time in Python.
+              #
+              # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+            "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+            "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+          },
+        },
+      ],
+      "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+          #
+          # - In response: present if set by create request - In create request: optional - In update request: never set
+        "A String",
+      ],
+    },
+    "testIssues": [ # Issues observed during the test execution.
+        #
+        # For example, if the mobile app under test crashed during the test, the error message and the stack trace content can be recorded here to assist debugging.
+        #
+        # - In response: present if set by create or update - In create/update request: optional
+      { # An abnormal event observed during the test execution.
+        "stackTrace": { # A stacktrace. # Optional.
+          "exception": "A String", # The stack trace message.
+              #
+              # Required
+        },
+        "errorMessage": "A String", # A brief human-readable message describing the abnormal event.
+            #
+            # Required.
+      },
+    ],
+  },
+  "toolExecutionStep": { # Generic tool step to be used for binaries we do not explicitly support. For example: running cp to copy artifacts from one location to another. # An execution of a tool (used for steps we don't explicitly support).
+    "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # A Tool execution.
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+      "toolLogs": [ # References to any plain text logs output the tool execution.
+          #
+          # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+          #
+          # The maximum allowed number of tool logs per step is 1000.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+        { # A reference to a file.
+          "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+              #
+              # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+              #
+              # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+      ],
+      "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+        "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+            #
+            # - In response: always set - In create/update request: always set
+      },
+      "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+          #
+          # The maximum allowed number of tool outputs per step is 1000.
+          #
+          # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+        { # A reference to a ToolExecution output file.
+          "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+            "className": "A String", # The name of the class.
+            "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+            "name": "A String", # The name of the test case.
+                #
+                # Required.
+          },
+          "output": { # A reference to a file. # A FileReference to an output file.
+              #
+              # - In response: always set - In create/update request: always set
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+          "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Example 1: Compute Timestamp from POSIX `time()`.
+              #
+              # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+              #
+              # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+              #
+              # struct timeval tv; gettimeofday(&tv, NULL);
+              #
+              # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+              #
+              # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+              #
+              # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+              #
+              # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+              #
+              # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+              #
+              # long millis = System.currentTimeMillis();
+              #
+              # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+              #
+              #
+              #
+              # Example 5: Compute Timestamp from current time in Python.
+              #
+              # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+            "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+            "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+          },
+        },
+      ],
+      "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+          #
+          # - In response: present if set by create request - In create request: optional - In update request: never set
+        "A String",
+      ],
+    },
+  },
+  "stepId": "A String", # A unique identifier within a Execution for this Step.
+      # 
+      # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+      # 
+      # - In response: always set - In create/update request: never set
+  "runDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took for this step to run.
+      # 
+      # If unset, this is set to the difference between creation_time and completion_time when the step is set to the COMPLETE state. In some cases, it is appropriate to set this value separately: For instance, if a step is created, but the operation it represents is queued for a few minutes before it executes, it would be appropriate not to include the time spent queued in its run_duration.
+      # 
+      # PRECONDITION_FAILED will be returned if one attempts to set a run_duration on a step which already has this field set.
+      # 
+      # - In response: present if previously set; always present on COMPLETE step - In create request: optional - In update request: optional
+      #
+      # Example 1: Compute Duration from two Timestamps in pseudo code.
+      #
+      # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+      #
+      # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+      #
+      # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+      #
+      # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+      #
+      # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+      #
+      # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+      #
+      # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+    "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+    "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+  },
+  "description": "A String", # A description of this tool For example: mvn clean package -D skipTests=true
+      # 
+      # - In response: present if set by create/update request - In create/update request: optional
+  "labels": [ # Arbitrary user-supplied key/value pairs that are associated with the step.
+      # 
+      # Users are responsible for managing the key namespace such that keys don't accidentally collide.
+      # 
+      # An INVALID_ARGUMENT will be returned if the number of labels exceeds 100 or if the length of any of the keys or values exceeds 100 characters.
+      # 
+      # - In response: always set - In create request: optional - In update request: optional; any new key/value pair will be added to the map, and any new value for an existing key will update that key's value
+    {
+      "value": "A String",
+      "key": "A String",
+    },
+  ],
+  "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step was created.
+      # 
+      # - In response: always set - In create/update request: never set
+      #
+      # Example 1: Compute Timestamp from POSIX `time()`.
+      #
+      # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+      #
+      # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+      #
+      # struct timeval tv; gettimeofday(&tv, NULL);
+      #
+      # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+      #
+      # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+      #
+      # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+      #
+      # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+      #
+      # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+      #
+      # long millis = System.currentTimeMillis();
+      #
+      # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+      #
+      #
+      #
+      # Example 5: Compute Timestamp from current time in Python.
+      #
+      # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+    "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+    "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+  },
+  "name": "A String", # A short human-readable name to display in the UI. Maximum of 100 characters. For example: Clean build
+      # 
+      # A PRECONDITION_FAILED will be returned upon creating a new step if it shares its name and dimension_value with an existing step. If two steps represent a similar action, but have different dimension values, they should share the same name. For instance, if the same set of tests is run on two different platforms, the two steps should have the same name.
+      # 
+      # - In response: always set - In create request: always set - In update request: never set
+  "state": "A String", # The initial state is IN_PROGRESS. The only legal state transitions are * IN_PROGRESS -> COMPLETE
+      # 
+      # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+      # 
+      # It is valid to create Step with a state set to COMPLETE. The state can only be set to COMPLETE once. A PRECONDITION_FAILED will be returned if the state is set to COMPLETE multiple times.
+      # 
+      # - In response: always set - In create/update request: optional
+  "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step status was set to complete.
+      # 
+      # This value will be set automatically when state transitions to COMPLETE.
+      # 
+      # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+      #
+      # Example 1: Compute Timestamp from POSIX `time()`.
+      #
+      # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+      #
+      # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+      #
+      # struct timeval tv; gettimeofday(&tv, NULL);
+      #
+      # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+      #
+      # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+      #
+      # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+      #
+      # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+      #
+      # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+      #
+      # long millis = System.currentTimeMillis();
+      #
+      # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+      #
+      #
+      #
+      # Example 5: Compute Timestamp from current time in Python.
+      #
+      # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+    "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+    "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+  },
+  "dimensionValue": [ # If the execution containing this step has any dimension_definition set, then this field allows the child to specify the values of the dimensions.
+      # 
+      # The keys must exactly match the dimension_definition of the execution.
+      # 
+      # For example, if the execution has `dimension_definition = ['attempt', 'device']` then a step must define values for those dimensions, eg. `dimension_value = ['attempt': '1', 'device': 'Nexus 6']`
+      # 
+      # If a step does not participate in one dimension of the matrix, the value for that dimension should be empty string. For example, if one of the tests is executed by a runner which does not support retries, the step could have `dimension_value = ['attempt': '', 'device': 'Nexus 6']`
+      # 
+      # If the step does not participate in any dimensions of the matrix, it may leave dimension_value unset.
+      # 
+      # A PRECONDITION_FAILED will be returned if any of the keys do not exist in the dimension_definition of the execution.
+      # 
+      # A PRECONDITION_FAILED will be returned if another step in this execution already has the same name and dimension_value, but differs on other data fields, for example, step field is different.
+      # 
+      # A PRECONDITION_FAILED will be returned if dimension_value is set, and there is a dimension_definition in the execution which is not specified as one of the keys.
+      # 
+      # - In response: present if set by create - In create request: optional - In update request: never set
+    {
+      "value": "A String",
+      "key": "A String",
+    },
+  ],
+  "outcome": { # Interprets a result so that humans and machines can act on it. # Classification of the result, for example into SUCCESS or FAILURE
+      # 
+      # - In response: present if set by create/update request - In create/update request: optional
+    "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+        #
+        # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+        #
+        # Optional
+      "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+          #
+          # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+      "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+          #
+          # For example, OpenGL crashed, but it is unclear if the app is responsible.
+      "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+    },
+    "skippedDetail": { # More information about a SKIPPED outcome.
+        #
+        # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+        #
+        # Optional
+      "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+      "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+      "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+    },
+    "successDetail": { # More information about a SUCCESS outcome.
+        #
+        # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+        #
+        # Optional
+      "otherNativeCrash": True or False, # If a native process other than the app crashed.
+    },
+    "failureDetail": { # More information about a FAILURE outcome.
+        #
+        # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+        #
+        # Optional
+      "otherNativeCrash": True or False, # If a native process other than the app crashed.
+      "crashed": True or False, # If the failure was severe because the system under test crashed.
+      "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+      "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+      "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+    },
+    "summary": "A String", # The simplest way to interpret a result.
+        #
+        # Required
+  },
+  "deviceUsageDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How much the device resource is used to perform the test.
+      # 
+      # This is the device usage used for billing purpose, which is different from the run_duration, for example, infrastructure failure won't be charged for device usage.
+      # 
+      # PRECONDITION_FAILED will be returned if one attempts to set a device_usage on a step which already has this field set.
+      # 
+      # - In response: present if previously set. - In create request: optional - In update request: optional
+      #
+      # Example 1: Compute Duration from two Timestamps in pseudo code.
+      #
+      # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+      #
+      # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+      #
+      # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+      #
+      # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+      #
+      # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+      #
+      # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+      #
+      # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+    "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+    "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+  },
+  "hasImages": True or False, # Whether any of the outputs of this step are images whose thumbnails can be fetched with ListThumbnails.
+      # 
+      # - In response: always set - In create/update request: never set
+}
+
+  requestId: string, A unique request ID for server to detect duplicated requests. For example, a UUID.
+
+Optional, but strongly recommended.
+
+Returns:
+  An object of the form:
+
+    { # A Step represents a single operation performed as part of Execution. A step can be used to represent the execution of a tool ( for example a test runner execution or an execution of a compiler).
+      #
+      # Steps can overlap (for instance two steps might have the same start time if some operations are done in parallel).
+      #
+      # Here is an example, let's consider that we have a continuous build is executing a test runner for each iteration. The workflow would look like: - user creates a Execution with id 1 - user creates an TestExecutionStep with id 100 for Execution 1 - user update TestExecutionStep with id 100 to add a raw xml log + the service parses the xml logs and returns a TestExecutionStep with updated TestResult(s). - user update the status of TestExecutionStep with id 100 to COMPLETE
+      #
+      # A Step can be updated until its state is set to COMPLETE at which points it becomes immutable.
+    "testExecutionStep": { # A step that represents running tests. # An execution of a test runner.
+        #
+        # It accepts ant-junit xml files which will be parsed into structured test results by the service. Xml file paths are updated in order to append more files, however they can't be deleted.
+        #
+        # Users can also add test results manually by using the test_result field.
+      "testTiming": { # Testing timing break down to know phases. # The timing break down of the test execution.
+          #
+          # - In response: present if set by create or update - In create/update request: optional
+        "testProcessDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took to run the test process.
+            #
+            # - In response: present if previously set. - In create/update request: optional
+            #
+            # Example 1: Compute Duration from two Timestamps in pseudo code.
+            #
+            # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+            #
+            # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+            #
+            # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+            #
+            # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+            #
+            # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+            #
+            # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+            #
+            # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+          "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+          "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+        },
+      },
+      "testSuiteOverviews": [ # List of test suite overview contents. This could be parsed from xUnit XML log by server, or uploaded directly by user. This references should only be called when test suites are fully parsed or uploaded.
+          #
+          # The maximum allowed number of test suite overviews per step is 1000.
+          #
+          # - In response: always set - In create request: optional - In update request: never (use publishXunitXmlFiles custom method instead)
+        { # A summary of a test suite result either parsed from XML or uploaded directly by a user.
+            #
+            # Note: the API related comments are for StepService only. This message is also being used in ExecutionService in a read only mode for the corresponding step.
+          "name": "A String", # The name of the test suite.
+              #
+              # - In create/response: always set - In update request: never
+          "errorCount": 42, # Number of test cases in error, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+          "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+          "xmlSource": { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original XML file is stored.
+              #
+              # Note: Multiple test suites can share the same xml_source
+              #
+              # Returns INVALID_ARGUMENT if the uri format is not supported.
+              #
+              # - In create/response: optional - In update request: never
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+          "failureCount": 42, # Number of failed test cases, typically set by the service by parsing the xml_source. May also be set by the user.
+              #
+              # - In create/response: always set - In update request: never
+          "skippedCount": 42, # Number of test cases not run, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+        },
+      ],
+      "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # Represents the execution of the test runner.
+          #
+          # The exit code of this tool will be used to determine if the test passed.
+          #
+          # - In response: always set - In create/update request: optional
+        "toolLogs": [ # References to any plain text logs output the tool execution.
+            #
+            # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+            #
+            # The maximum allowed number of tool logs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a file.
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+        ],
+        "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+          "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+            #
+            # The maximum allowed number of tool outputs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a ToolExecution output file.
+            "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+              "className": "A String", # The name of the class.
+              "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+              "name": "A String", # The name of the test case.
+                  #
+                  # Required.
+            },
+            "output": { # A reference to a file. # A FileReference to an output file.
+                #
+                # - In response: always set - In create/update request: always set
+              "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                  #
+                  # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                  #
+                  # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Example 1: Compute Timestamp from POSIX `time()`.
+                #
+                # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                #
+                # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                #
+                # struct timeval tv; gettimeofday(&tv, NULL);
+                #
+                # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                #
+                # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                #
+                # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                #
+                # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                #
+                # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                #
+                # long millis = System.currentTimeMillis();
+                #
+                # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                #
+                #
+                #
+                # Example 5: Compute Timestamp from current time in Python.
+                #
+                # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+              "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+              "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+            },
+          },
+        ],
+        "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+            #
+            # - In response: present if set by create request - In create request: optional - In update request: never set
+          "A String",
+        ],
+      },
+      "testIssues": [ # Issues observed during the test execution.
+          #
+          # For example, if the mobile app under test crashed during the test, the error message and the stack trace content can be recorded here to assist debugging.
+          #
+          # - In response: present if set by create or update - In create/update request: optional
+        { # An abnormal event observed during the test execution.
+          "stackTrace": { # A stacktrace. # Optional.
+            "exception": "A String", # The stack trace message.
+                #
+                # Required
+          },
+          "errorMessage": "A String", # A brief human-readable message describing the abnormal event.
+              #
+              # Required.
+        },
+      ],
+    },
+    "toolExecutionStep": { # Generic tool step to be used for binaries we do not explicitly support. For example: running cp to copy artifacts from one location to another. # An execution of a tool (used for steps we don't explicitly support).
+      "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # A Tool execution.
+          #
+          # - In response: present if set by create/update request - In create/update request: optional
+        "toolLogs": [ # References to any plain text logs output the tool execution.
+            #
+            # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+            #
+            # The maximum allowed number of tool logs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a file.
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+        ],
+        "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+          "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+            #
+            # The maximum allowed number of tool outputs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a ToolExecution output file.
+            "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+              "className": "A String", # The name of the class.
+              "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+              "name": "A String", # The name of the test case.
+                  #
+                  # Required.
+            },
+            "output": { # A reference to a file. # A FileReference to an output file.
+                #
+                # - In response: always set - In create/update request: always set
+              "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                  #
+                  # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                  #
+                  # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Example 1: Compute Timestamp from POSIX `time()`.
+                #
+                # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                #
+                # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                #
+                # struct timeval tv; gettimeofday(&tv, NULL);
+                #
+                # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                #
+                # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                #
+                # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                #
+                # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                #
+                # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                #
+                # long millis = System.currentTimeMillis();
+                #
+                # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                #
+                #
+                #
+                # Example 5: Compute Timestamp from current time in Python.
+                #
+                # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+              "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+              "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+            },
+          },
+        ],
+        "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+            #
+            # - In response: present if set by create request - In create request: optional - In update request: never set
+          "A String",
+        ],
+      },
+    },
+    "stepId": "A String", # A unique identifier within a Execution for this Step.
+        #
+        # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+        #
+        # - In response: always set - In create/update request: never set
+    "runDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took for this step to run.
+        #
+        # If unset, this is set to the difference between creation_time and completion_time when the step is set to the COMPLETE state. In some cases, it is appropriate to set this value separately: For instance, if a step is created, but the operation it represents is queued for a few minutes before it executes, it would be appropriate not to include the time spent queued in its run_duration.
+        #
+        # PRECONDITION_FAILED will be returned if one attempts to set a run_duration on a step which already has this field set.
+        #
+        # - In response: present if previously set; always present on COMPLETE step - In create request: optional - In update request: optional
+        #
+        # Example 1: Compute Duration from two Timestamps in pseudo code.
+        #
+        # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+        #
+        # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+        #
+        # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+        #
+        # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+        #
+        # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+        #
+        # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+        #
+        # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+      "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+      "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+    },
+    "description": "A String", # A description of this tool For example: mvn clean package -D skipTests=true
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+    "labels": [ # Arbitrary user-supplied key/value pairs that are associated with the step.
+        #
+        # Users are responsible for managing the key namespace such that keys don't accidentally collide.
+        #
+        # An INVALID_ARGUMENT will be returned if the number of labels exceeds 100 or if the length of any of the keys or values exceeds 100 characters.
+        #
+        # - In response: always set - In create request: optional - In update request: optional; any new key/value pair will be added to the map, and any new value for an existing key will update that key's value
+      {
+        "value": "A String",
+        "key": "A String",
+      },
+    ],
+    "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step was created.
+        #
+        # - In response: always set - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "name": "A String", # A short human-readable name to display in the UI. Maximum of 100 characters. For example: Clean build
+        #
+        # A PRECONDITION_FAILED will be returned upon creating a new step if it shares its name and dimension_value with an existing step. If two steps represent a similar action, but have different dimension values, they should share the same name. For instance, if the same set of tests is run on two different platforms, the two steps should have the same name.
+        #
+        # - In response: always set - In create request: always set - In update request: never set
+    "state": "A String", # The initial state is IN_PROGRESS. The only legal state transitions are * IN_PROGRESS -> COMPLETE
+        #
+        # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+        #
+        # It is valid to create Step with a state set to COMPLETE. The state can only be set to COMPLETE once. A PRECONDITION_FAILED will be returned if the state is set to COMPLETE multiple times.
+        #
+        # - In response: always set - In create/update request: optional
+    "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step status was set to complete.
+        #
+        # This value will be set automatically when state transitions to COMPLETE.
+        #
+        # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "dimensionValue": [ # If the execution containing this step has any dimension_definition set, then this field allows the child to specify the values of the dimensions.
+        #
+        # The keys must exactly match the dimension_definition of the execution.
+        #
+        # For example, if the execution has `dimension_definition = ['attempt', 'device']` then a step must define values for those dimensions, eg. `dimension_value = ['attempt': '1', 'device': 'Nexus 6']`
+        #
+        # If a step does not participate in one dimension of the matrix, the value for that dimension should be empty string. For example, if one of the tests is executed by a runner which does not support retries, the step could have `dimension_value = ['attempt': '', 'device': 'Nexus 6']`
+        #
+        # If the step does not participate in any dimensions of the matrix, it may leave dimension_value unset.
+        #
+        # A PRECONDITION_FAILED will be returned if any of the keys do not exist in the dimension_definition of the execution.
+        #
+        # A PRECONDITION_FAILED will be returned if another step in this execution already has the same name and dimension_value, but differs on other data fields, for example, step field is different.
+        #
+        # A PRECONDITION_FAILED will be returned if dimension_value is set, and there is a dimension_definition in the execution which is not specified as one of the keys.
+        #
+        # - In response: present if set by create - In create request: optional - In update request: never set
+      {
+        "value": "A String",
+        "key": "A String",
+      },
+    ],
+    "outcome": { # Interprets a result so that humans and machines can act on it. # Classification of the result, for example into SUCCESS or FAILURE
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+      "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+          #
+          # Optional
+        "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+            #
+            # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+        "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+            #
+            # For example, OpenGL crashed, but it is unclear if the app is responsible.
+        "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+      },
+      "skippedDetail": { # More information about a SKIPPED outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+          #
+          # Optional
+        "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+        "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+        "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+      },
+      "successDetail": { # More information about a SUCCESS outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+      },
+      "failureDetail": { # More information about a FAILURE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+        "crashed": True or False, # If the failure was severe because the system under test crashed.
+        "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+        "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+        "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+      },
+      "summary": "A String", # The simplest way to interpret a result.
+          #
+          # Required
+    },
+    "deviceUsageDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How much the device resource is used to perform the test.
+        #
+        # This is the device usage used for billing purpose, which is different from the run_duration, for example, infrastructure failure won't be charged for device usage.
+        #
+        # PRECONDITION_FAILED will be returned if one attempts to set a device_usage on a step which already has this field set.
+        #
+        # - In response: present if previously set. - In create request: optional - In update request: optional
+        #
+        # Example 1: Compute Duration from two Timestamps in pseudo code.
+        #
+        # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+        #
+        # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+        #
+        # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+        #
+        # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+        #
+        # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+        #
+        # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+        #
+        # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+      "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+      "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+    },
+    "hasImages": True or False, # Whether any of the outputs of this step are images whose thumbnails can be fetched with ListThumbnails.
+        #
+        # - In response: always set - In create/update request: never set
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="publishXunitXmlFiles">publishXunitXmlFiles(projectId=None, historyId=None, executionId=None, stepId=None, body)</code>
+  <pre>Publish xml files to an existing Step.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to write project - INVALID_ARGUMENT - if the request is malformed - FAILED_PRECONDITION - if the requested state transition is illegal, e.g try to upload a duplicate xml file or a file too large. - NOT_FOUND - if the containing Execution does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+  executionId: string, A Execution id.
+
+Required. (required)
+  stepId: string, A Step id. Note: This step must include a TestExecutionStep.
+
+Required. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Request message for StepService.PublishXunitXmlFiles.
+    "xunitXmlFiles": [ # URI of the Xunit XML files to publish.
+        # 
+        # The maximum size of the file this reference is pointing to is 50MB.
+        # 
+        # Required.
+      { # A reference to a file.
+        "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+            #
+            # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+            #
+            # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+            #
+            # - In response: always set - In create/update request: always set
+      },
+    ],
+  }
+
+
+Returns:
+  An object of the form:
+
+    { # A Step represents a single operation performed as part of Execution. A step can be used to represent the execution of a tool ( for example a test runner execution or an execution of a compiler).
+      #
+      # Steps can overlap (for instance two steps might have the same start time if some operations are done in parallel).
+      #
+      # Here is an example, let's consider that we have a continuous build is executing a test runner for each iteration. The workflow would look like: - user creates a Execution with id 1 - user creates an TestExecutionStep with id 100 for Execution 1 - user update TestExecutionStep with id 100 to add a raw xml log + the service parses the xml logs and returns a TestExecutionStep with updated TestResult(s). - user update the status of TestExecutionStep with id 100 to COMPLETE
+      #
+      # A Step can be updated until its state is set to COMPLETE at which points it becomes immutable.
+    "testExecutionStep": { # A step that represents running tests. # An execution of a test runner.
+        #
+        # It accepts ant-junit xml files which will be parsed into structured test results by the service. Xml file paths are updated in order to append more files, however they can't be deleted.
+        #
+        # Users can also add test results manually by using the test_result field.
+      "testTiming": { # Testing timing break down to know phases. # The timing break down of the test execution.
+          #
+          # - In response: present if set by create or update - In create/update request: optional
+        "testProcessDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took to run the test process.
+            #
+            # - In response: present if previously set. - In create/update request: optional
+            #
+            # Example 1: Compute Duration from two Timestamps in pseudo code.
+            #
+            # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+            #
+            # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+            #
+            # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+            #
+            # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+            #
+            # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+            #
+            # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+            #
+            # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+          "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+          "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+        },
+      },
+      "testSuiteOverviews": [ # List of test suite overview contents. This could be parsed from xUnit XML log by server, or uploaded directly by user. This references should only be called when test suites are fully parsed or uploaded.
+          #
+          # The maximum allowed number of test suite overviews per step is 1000.
+          #
+          # - In response: always set - In create request: optional - In update request: never (use publishXunitXmlFiles custom method instead)
+        { # A summary of a test suite result either parsed from XML or uploaded directly by a user.
+            #
+            # Note: the API related comments are for StepService only. This message is also being used in ExecutionService in a read only mode for the corresponding step.
+          "name": "A String", # The name of the test suite.
+              #
+              # - In create/response: always set - In update request: never
+          "errorCount": 42, # Number of test cases in error, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+          "totalCount": 42, # Number of test cases, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+          "xmlSource": { # A reference to a file. # If this test suite was parsed from XML, this is the URI where the original XML file is stored.
+              #
+              # Note: Multiple test suites can share the same xml_source
+              #
+              # Returns INVALID_ARGUMENT if the uri format is not supported.
+              #
+              # - In create/response: optional - In update request: never
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+          "failureCount": 42, # Number of failed test cases, typically set by the service by parsing the xml_source. May also be set by the user.
+              #
+              # - In create/response: always set - In update request: never
+          "skippedCount": 42, # Number of test cases not run, typically set by the service by parsing the xml_source.
+              #
+              # - In create/response: always set - In update request: never
+        },
+      ],
+      "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # Represents the execution of the test runner.
+          #
+          # The exit code of this tool will be used to determine if the test passed.
+          #
+          # - In response: always set - In create/update request: optional
+        "toolLogs": [ # References to any plain text logs output the tool execution.
+            #
+            # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+            #
+            # The maximum allowed number of tool logs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a file.
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+        ],
+        "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+          "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+            #
+            # The maximum allowed number of tool outputs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a ToolExecution output file.
+            "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+              "className": "A String", # The name of the class.
+              "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+              "name": "A String", # The name of the test case.
+                  #
+                  # Required.
+            },
+            "output": { # A reference to a file. # A FileReference to an output file.
+                #
+                # - In response: always set - In create/update request: always set
+              "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                  #
+                  # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                  #
+                  # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Example 1: Compute Timestamp from POSIX `time()`.
+                #
+                # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                #
+                # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                #
+                # struct timeval tv; gettimeofday(&tv, NULL);
+                #
+                # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                #
+                # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                #
+                # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                #
+                # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                #
+                # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                #
+                # long millis = System.currentTimeMillis();
+                #
+                # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                #
+                #
+                #
+                # Example 5: Compute Timestamp from current time in Python.
+                #
+                # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+              "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+              "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+            },
+          },
+        ],
+        "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+            #
+            # - In response: present if set by create request - In create request: optional - In update request: never set
+          "A String",
+        ],
+      },
+      "testIssues": [ # Issues observed during the test execution.
+          #
+          # For example, if the mobile app under test crashed during the test, the error message and the stack trace content can be recorded here to assist debugging.
+          #
+          # - In response: present if set by create or update - In create/update request: optional
+        { # An abnormal event observed during the test execution.
+          "stackTrace": { # A stacktrace. # Optional.
+            "exception": "A String", # The stack trace message.
+                #
+                # Required
+          },
+          "errorMessage": "A String", # A brief human-readable message describing the abnormal event.
+              #
+              # Required.
+        },
+      ],
+    },
+    "toolExecutionStep": { # Generic tool step to be used for binaries we do not explicitly support. For example: running cp to copy artifacts from one location to another. # An execution of a tool (used for steps we don't explicitly support).
+      "toolExecution": { # An execution of an arbitrary tool. It could be a test runner or a tool copying artifacts or deploying code. # A Tool execution.
+          #
+          # - In response: present if set by create/update request - In create/update request: optional
+        "toolLogs": [ # References to any plain text logs output the tool execution.
+            #
+            # This field can be set before the tool has exited in order to be able to have access to a live view of the logs while the tool is running.
+            #
+            # The maximum allowed number of tool logs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a file.
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+        ],
+        "exitCode": { # Exit code from a tool execution. # Tool execution exit code. This field will be set once the tool has exited.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, a FAILED_PRECONDITION error will be returned if an exit_code is already set.
+          "number": 42, # Tool execution exit code. A value of 0 means that the execution was successful.
+              #
+              # - In response: always set - In create/update request: always set
+        },
+        "toolOutputs": [ # References to opaque files of any format output by the tool execution.
+            #
+            # The maximum allowed number of tool outputs per step is 1000.
+            #
+            # - In response: present if set by create/update request - In create request: optional - In update request: optional, any value provided will be appended to the existing list
+          { # A reference to a ToolExecution output file.
+            "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+              "className": "A String", # The name of the class.
+              "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+              "name": "A String", # The name of the test case.
+                  #
+                  # Required.
+            },
+            "output": { # A reference to a file. # A FileReference to an output file.
+                #
+                # - In response: always set - In create/update request: always set
+              "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                  #
+                  # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                  #
+                  # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                  #
+                  # - In response: always set - In create/update request: always set
+            },
+            "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+                #
+                # - In response: present if set by create/update request - In create/update request: optional
+                #
+                # Example 1: Compute Timestamp from POSIX `time()`.
+                #
+                # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+                #
+                # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+                #
+                # struct timeval tv; gettimeofday(&tv, NULL);
+                #
+                # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+                #
+                # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+                #
+                # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+                #
+                # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+                #
+                # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+                #
+                # long millis = System.currentTimeMillis();
+                #
+                # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+                #
+                #
+                #
+                # Example 5: Compute Timestamp from current time in Python.
+                #
+                # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+              "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+              "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+            },
+          },
+        ],
+        "commandLineArguments": [ # The full tokenized command line including the program name (equivalent to argv in a C program).
+            #
+            # - In response: present if set by create request - In create request: optional - In update request: never set
+          "A String",
+        ],
+      },
+    },
+    "stepId": "A String", # A unique identifier within a Execution for this Step.
+        #
+        # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+        #
+        # - In response: always set - In create/update request: never set
+    "runDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How long it took for this step to run.
+        #
+        # If unset, this is set to the difference between creation_time and completion_time when the step is set to the COMPLETE state. In some cases, it is appropriate to set this value separately: For instance, if a step is created, but the operation it represents is queued for a few minutes before it executes, it would be appropriate not to include the time spent queued in its run_duration.
+        #
+        # PRECONDITION_FAILED will be returned if one attempts to set a run_duration on a step which already has this field set.
+        #
+        # - In response: present if previously set; always present on COMPLETE step - In create request: optional - In update request: optional
+        #
+        # Example 1: Compute Duration from two Timestamps in pseudo code.
+        #
+        # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+        #
+        # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+        #
+        # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+        #
+        # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+        #
+        # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+        #
+        # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+        #
+        # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+      "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+      "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+    },
+    "description": "A String", # A description of this tool For example: mvn clean package -D skipTests=true
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+    "labels": [ # Arbitrary user-supplied key/value pairs that are associated with the step.
+        #
+        # Users are responsible for managing the key namespace such that keys don't accidentally collide.
+        #
+        # An INVALID_ARGUMENT will be returned if the number of labels exceeds 100 or if the length of any of the keys or values exceeds 100 characters.
+        #
+        # - In response: always set - In create request: optional - In update request: optional; any new key/value pair will be added to the map, and any new value for an existing key will update that key's value
+      {
+        "value": "A String",
+        "key": "A String",
+      },
+    ],
+    "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step was created.
+        #
+        # - In response: always set - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "name": "A String", # A short human-readable name to display in the UI. Maximum of 100 characters. For example: Clean build
+        #
+        # A PRECONDITION_FAILED will be returned upon creating a new step if it shares its name and dimension_value with an existing step. If two steps represent a similar action, but have different dimension values, they should share the same name. For instance, if the same set of tests is run on two different platforms, the two steps should have the same name.
+        #
+        # - In response: always set - In create request: always set - In update request: never set
+    "state": "A String", # The initial state is IN_PROGRESS. The only legal state transitions are * IN_PROGRESS -> COMPLETE
+        #
+        # A PRECONDITION_FAILED will be returned if an invalid transition is requested.
+        #
+        # It is valid to create Step with a state set to COMPLETE. The state can only be set to COMPLETE once. A PRECONDITION_FAILED will be returned if the state is set to COMPLETE multiple times.
+        #
+        # - In response: always set - In create/update request: optional
+    "completionTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The time when the step status was set to complete.
+        #
+        # This value will be set automatically when state transitions to COMPLETE.
+        #
+        # - In response: set if the execution state is COMPLETE. - In create/update request: never set
+        #
+        # Example 1: Compute Timestamp from POSIX `time()`.
+        #
+        # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+        #
+        # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+        #
+        # struct timeval tv; gettimeofday(&tv, NULL);
+        #
+        # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+        #
+        # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+        #
+        # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+        #
+        # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+        #
+        # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+        #
+        # long millis = System.currentTimeMillis();
+        #
+        # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+        #
+        #
+        #
+        # Example 5: Compute Timestamp from current time in Python.
+        #
+        # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+      "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+      "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+    },
+    "dimensionValue": [ # If the execution containing this step has any dimension_definition set, then this field allows the child to specify the values of the dimensions.
+        #
+        # The keys must exactly match the dimension_definition of the execution.
+        #
+        # For example, if the execution has `dimension_definition = ['attempt', 'device']` then a step must define values for those dimensions, eg. `dimension_value = ['attempt': '1', 'device': 'Nexus 6']`
+        #
+        # If a step does not participate in one dimension of the matrix, the value for that dimension should be empty string. For example, if one of the tests is executed by a runner which does not support retries, the step could have `dimension_value = ['attempt': '', 'device': 'Nexus 6']`
+        #
+        # If the step does not participate in any dimensions of the matrix, it may leave dimension_value unset.
+        #
+        # A PRECONDITION_FAILED will be returned if any of the keys do not exist in the dimension_definition of the execution.
+        #
+        # A PRECONDITION_FAILED will be returned if another step in this execution already has the same name and dimension_value, but differs on other data fields, for example, step field is different.
+        #
+        # A PRECONDITION_FAILED will be returned if dimension_value is set, and there is a dimension_definition in the execution which is not specified as one of the keys.
+        #
+        # - In response: present if set by create - In create request: optional - In update request: never set
+      {
+        "value": "A String",
+        "key": "A String",
+      },
+    ],
+    "outcome": { # Interprets a result so that humans and machines can act on it. # Classification of the result, for example into SUCCESS or FAILURE
+        #
+        # - In response: present if set by create/update request - In create/update request: optional
+      "inconclusiveDetail": { # More information about an INCONCLUSIVE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not INCONCLUSIVE.
+          #
+          # Optional
+        "infrastructureFailure": True or False, # If the test runner could not determine success or failure because the test depends on a component other than the system under test which failed.
+            #
+            # For example, a mobile test requires provisioning a device where the test executes, and that provisioning can fail.
+        "nativeCrash": True or False, # A native process crashed on the device, producing a tombstone. It is unclear whether the crash was related to the app under test.
+            #
+            # For example, OpenGL crashed, but it is unclear if the app is responsible.
+        "abortedByUser": True or False, # If the end user aborted the test execution before a pass or fail could be determined. For example, the user pressed ctrl-c which sent a kill signal to the test runner while the test was running.
+      },
+      "skippedDetail": { # More information about a SKIPPED outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SKIPPED.
+          #
+          # Optional
+        "incompatibleAppVersion": True or False, # If the App doesn't support the specific API level.
+        "incompatibleArchitecture": True or False, # If the App doesn't run on the specific architecture, for example, x86.
+        "incompatibleDevice": True or False, # If the requested OS version doesn't run on the specific device model.
+      },
+      "successDetail": { # More information about a SUCCESS outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not SUCCESS.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+      },
+      "failureDetail": { # More information about a FAILURE outcome.
+          #
+          # Returns INVALID_ARGUMENT if this field is set but the summary is not FAILURE.
+          #
+          # Optional
+        "otherNativeCrash": True or False, # If a native process other than the app crashed.
+        "crashed": True or False, # If the failure was severe because the system under test crashed.
+        "unableToCrawl": True or False, # If the robo was unable to crawl the app; perhaps because the app did not start.
+        "notInstalled": True or False, # If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.
+        "timedOut": True or False, # If the test overran some time limit, and that is why it failed.
+      },
+      "summary": "A String", # The simplest way to interpret a result.
+          #
+          # Required
+    },
+    "deviceUsageDuration": { # A Duration represents a signed, fixed-length span of time represented as a count of seconds and fractions of seconds at nanosecond resolution. It is independent of any calendar and concepts like "day" or "month". It is related to Timestamp in that the difference between two Timestamp values is a Duration and it can be added or subtracted from a Timestamp. Range is approximately +-10,000 years. # How much the device resource is used to perform the test.
+        #
+        # This is the device usage used for billing purpose, which is different from the run_duration, for example, infrastructure failure won't be charged for device usage.
+        #
+        # PRECONDITION_FAILED will be returned if one attempts to set a device_usage on a step which already has this field set.
+        #
+        # - In response: present if previously set. - In create request: optional - In update request: optional
+        #
+        # Example 1: Compute Duration from two Timestamps in pseudo code.
+        #
+        # Timestamp start = ...; Timestamp end = ...; Duration duration = ...;
+        #
+        # duration.seconds = end.seconds - start.seconds; duration.nanos = end.nanos - start.nanos;
+        #
+        # if (duration.seconds  0) { duration.seconds += 1; duration.nanos -= 1000000000; } else if (durations.seconds > 0 && duration.nanos < 0) { duration.seconds -= 1; duration.nanos += 1000000000; }
+        #
+        # Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
+        #
+        # Timestamp start = ...; Duration duration = ...; Timestamp end = ...;
+        #
+        # end.seconds = start.seconds + duration.seconds; end.nanos = start.nanos + duration.nanos;
+        #
+        # if (end.nanos = 1000000000) { end.seconds += 1; end.nanos -= 1000000000; }
+      "nanos": 42, # Signed fractions of a second at nanosecond resolution of the span of time. Durations less than one second are represented with a 0 `seconds` field and a positive or negative `nanos` field. For durations of one second or more, a non-zero value for the `nanos` field must be of the same sign as the `seconds` field. Must be from -999,999,999 to +999,999,999 inclusive.
+      "seconds": "A String", # Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.
+    },
+    "hasImages": True or False, # Whether any of the outputs of this step are images whose thumbnails can be fetched with ListThumbnails.
+        #
+        # - In response: always set - In create/update request: never set
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/toolresults_v1beta3.projects.histories.executions.steps.thumbnails.html b/docs/dyn/toolresults_v1beta3.projects.histories.executions.steps.thumbnails.html
new file mode 100644
index 0000000..b4b5ed6
--- /dev/null
+++ b/docs/dyn/toolresults_v1beta3.projects.histories.executions.steps.thumbnails.html
@@ -0,0 +1,289 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="toolresults_v1beta3.html">Cloud Tool Results API</a> . <a href="toolresults_v1beta3.projects.html">projects</a> . <a href="toolresults_v1beta3.projects.histories.html">histories</a> . <a href="toolresults_v1beta3.projects.histories.executions.html">executions</a> . <a href="toolresults_v1beta3.projects.histories.executions.steps.html">steps</a> . <a href="toolresults_v1beta3.projects.histories.executions.steps.thumbnails.html">thumbnails</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#list">list(projectId=None, historyId=None, executionId=None, stepId=None, pageSize=None, pageToken=None)</a></code></p>
+<p class="firstline">Lists thumbnails of images attached to a step.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="list">list(projectId=None, historyId=None, executionId=None, stepId=None, pageSize=None, pageToken=None)</code>
+  <pre>Lists thumbnails of images attached to a step.
+
+May return any of the following canonical error codes: - PERMISSION_DENIED - if the user is not authorized to read from the project, or from any of the images - INVALID_ARGUMENT - if the request is malformed - NOT_FOUND - if the step does not exist, or if any of the images do not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+  executionId: string, An Execution id.
+
+Required. (required)
+  stepId: string, A Step id.
+
+Required. (required)
+  pageSize: integer, The maximum number of thumbnails to fetch.
+
+Default value: 50. The server will use this default if the field is not set or has a value of 0.
+
+Optional.
+  pageToken: string, A continuation token to resume the query at the next item.
+
+Optional.
+
+Returns:
+  An object of the form:
+
+    { # A response containing the thumbnails in a step.
+    "nextPageToken": "A String", # A continuation token to resume the query at the next item.
+        #
+        # If set, indicates that there are more thumbnails to read, by calling list again with this value in the page_token field.
+    "thumbnails": [ # A list of image data.
+        #
+        # Images are returned in a deterministic order; they are ordered by these factors, in order of importance: * First, by their associated test case. Images without a test case are considered greater than images with one. * Second, by their creation time. Images without a creation time are greater than images with one. * Third, by the order in which they were added to the step (by calls to CreateStep or UpdateStep).
+      { # An image, with a link to the main image and a thumbnail.
+        "thumbnail": { # A single thumbnail, with its size and format. # The thumbnail.
+          "data": "A String", # The thumbnail file itself.
+              #
+              # That is, the bytes here are precisely the bytes that make up the thumbnail file; they can be served as an image as-is (with the appropriate content type.)
+              #
+              # Always set.
+          "widthPx": 42, # The width of the thumbnail, in pixels.
+              #
+              # Always set.
+          "contentType": "A String", # The thumbnail's content type, i.e. "image/png".
+              #
+              # Always set.
+          "heightPx": 42, # The height of the thumbnail, in pixels.
+              #
+              # Always set.
+        },
+        "stepId": "A String", # The step to which the image is attached.
+            #
+            # Always set.
+        "sourceImage": { # A reference to a ToolExecution output file. # A reference to the full-size, original image.
+            #
+            # This is the same as the tool_outputs entry for the image under its Step.
+            #
+            # Always set.
+          "testCase": { # A reference to a test case. # The test case to which this output file belongs.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Test case references are canonically ordered lexicographically by these three factors: * First, by test_suite_name. * Second, by class_name. * Third, by name.
+            "className": "A String", # The name of the class.
+            "testSuiteName": "A String", # The name of the test suite to which this test case belongs.
+            "name": "A String", # The name of the test case.
+                #
+                # Required.
+          },
+          "output": { # A reference to a file. # A FileReference to an output file.
+              #
+              # - In response: always set - In create/update request: always set
+            "fileUri": "A String", # The URI of a file stored in Google Cloud Storage.
+                #
+                # For example: http://storage.googleapis.com/mybucket/path/to/test.xml or in gsutil format: gs://mybucket/path/to/test.xml with version-specific info, gs://mybucket/path/to/test.xml#1360383693690000
+                #
+                # An INVALID_ARGUMENT error will be returned if the URI format is not supported.
+                #
+                # - In response: always set - In create/update request: always set
+          },
+          "creationTime": { # A Timestamp represents a point in time independent of any time zone or calendar, represented as seconds and fractions of seconds at nanosecond resolution in UTC Epoch time. It is encoded using the Proleptic Gregorian Calendar which extends the Gregorian calendar backwards to year one. It is encoded assuming all minutes are 60 seconds long, i.e. leap seconds are "smeared" so that no leap second table is needed for interpretation. Range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from RFC 3339 date strings. See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). # The creation time of the file.
+              #
+              # - In response: present if set by create/update request - In create/update request: optional
+              #
+              # Example 1: Compute Timestamp from POSIX `time()`.
+              #
+              # Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
+              #
+              # Example 2: Compute Timestamp from POSIX `gettimeofday()`.
+              #
+              # struct timeval tv; gettimeofday(&tv, NULL);
+              #
+              # Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
+              #
+              # Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
+              #
+              # FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
+              #
+              # // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
+              #
+              # Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
+              #
+              # long millis = System.currentTimeMillis();
+              #
+              # Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build();
+              #
+              #
+              #
+              # Example 5: Compute Timestamp from current time in Python.
+              #
+              # now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) timestamp = Timestamp(seconds=seconds, nanos=nanos)
+            "nanos": 42, # Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.
+            "seconds": "A String", # Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.
+          },
+        },
+        "error": { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model is designed to be: # An error explaining why the thumbnail could not be rendered.
+            #
+            # - Simple to use and understand for most users - Flexible enough to meet unexpected needs
+            #
+            # # Overview
+            #
+            # The `Status` message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of [google.rpc.Code][], but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers *understand* and *resolve* the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package `google.rpc` which can be used for common error conditions.
+            #
+            # # Language mapping
+            #
+            # The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire format. When the `Status` message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.
+            #
+            # # Other uses
+            #
+            # The error model and the `Status` message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.
+            #
+            # Example uses of this error model include:
+            #
+            # - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the normal response to indicate the partial errors.
+            #
+            # - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error reporting purpose.
+            #
+            # - Batch operations. If a client uses batch request and batch response, the `Status` message should be used directly inside batch response, one for each error sub-response.
+            #
+            # - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the `Status` message.
+            #
+            # - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any stripping needed for security/privacy reasons.
+          "message": "A String", # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][] field, or localized by the client.
+          "code": 42, # The status code, which should be an enum value of [google.rpc.Code][].
+          "details": [ # A list of messages that carry the error details. There will be a common set of message types for APIs to use.
+            { # `Any` contains an arbitrary serialized protocol buffer message along with a URL that describes the type of the serialized message.
+                #
+                # Protobuf library provides support to pack/unpack Any values in the form of utility functions or additional generated methods of the Any type.
+                #
+                # Example 1: Pack and unpack a message in C++.
+                #
+                # Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... }
+                #
+                # Example 2: Pack and unpack a message in Java.
+                #
+                # Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); }
+                #
+                # The pack methods provided by protobuf library will by default use 'type.googleapis.com/full.type.name' as the type URL and the unpack methods only use the fully qualified type name after the last '/' in the type URL, for example "foo.bar.com/x/y.z" will yield type name "y.z".
+                #
+                #
+                #
+                # JSON ==== The JSON representation of an `Any` value uses the regular representation of the deserialized, embedded message, with an additional field `@type` which contains the type URL. Example:
+                #
+                # package google.profile; message Person { string first_name = 1; string last_name = 2; }
+                #
+                # { "@type": "type.googleapis.com/google.profile.Person", "firstName": , "lastName":  }
+                #
+                # If the embedded message type is well-known and has a custom JSON representation, that representation will be embedded adding a field `value` which holds the custom JSON in addition to the `@type` field. Example (for message [google.protobuf.Duration][]):
+                #
+                # { "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" }
+              "typeUrl": "A String", # A URL/resource name whose content describes the type of the serialized protocol buffer message.
+                  #
+                  # For URLs which use the schema `http`, `https`, or no schema, the following restrictions and interpretations apply:
+                  #
+                  # * If no schema is provided, `https` is assumed. * The last segment of the URL's path must represent the fully qualified name of the type (as in `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading "." is not accepted). * An HTTP GET on the URL must yield a [google.protobuf.Type][] value in binary format, or produce an error. * Applications are allowed to cache lookup results based on the URL, or have them precompiled into a binary to avoid any lookup. Therefore, binary compatibility needs to be preserved on changes to types. (Use versioned type names to manage breaking changes.)
+                  #
+                  # Schemas other than `http`, `https` (or the empty schema) might be used with implementation specific semantics.
+              "value": "A String", # Must be a valid serialized protocol buffer of the above specified type.
+            },
+          ],
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/toolresults_v1beta3.projects.histories.html b/docs/dyn/toolresults_v1beta3.projects.histories.html
new file mode 100644
index 0000000..6e2a48c
--- /dev/null
+++ b/docs/dyn/toolresults_v1beta3.projects.histories.html
@@ -0,0 +1,257 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="toolresults_v1beta3.html">Cloud Tool Results API</a> . <a href="toolresults_v1beta3.projects.html">projects</a> . <a href="toolresults_v1beta3.projects.histories.html">histories</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="toolresults_v1beta3.projects.histories.executions.html">executions()</a></code>
+</p>
+<p class="firstline">Returns the executions Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#create">create(projectId=None, body, requestId=None)</a></code></p>
+<p class="firstline">Creates a History.</p>
+<p class="toc_element">
+  <code><a href="#get">get(projectId=None, historyId=None)</a></code></p>
+<p class="firstline">Gets a History.</p>
+<p class="toc_element">
+  <code><a href="#list">list(projectId=None, pageToken=None, pageSize=None, filterByName=None)</a></code></p>
+<p class="firstline">Lists Histories for a given Project.</p>
+<p class="toc_element">
+  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
+<p class="firstline">Retrieves the next page of results.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="create">create(projectId=None, body, requestId=None)</code>
+  <pre>Creates a History.
+
+The returned History will have the id set.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to write to project - INVALID_ARGUMENT - if the request is malformed - NOT_FOUND - if the containing project does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # A History represents a sorted list of Executions ordered by the start_timestamp_millis field (descending). It can be used to group all the Executions of a continuous build.
+      # 
+      # Note that the ordering only operates on one-dimension. If a repository has multiple branches, it means that multiple histories will need to be used in order to order Executions per branch.
+    "displayName": "A String", # A short human-readable (plain text) name to display in the UI. Maximum of 100 characters.
+        # 
+        # - In response: present if set during create. - In create request: optional
+    "name": "A String", # A name to uniquely identify a history within a project. Maximum of 100 characters.
+        # 
+        # - In response always set - In create request: always set
+    "historyId": "A String", # A unique identifier within a project for this History.
+        # 
+        # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+        # 
+        # - In response always set - In create request: never set
+  }
+
+  requestId: string, A unique request ID for server to detect duplicated requests. For example, a UUID.
+
+Optional, but strongly recommended.
+
+Returns:
+  An object of the form:
+
+    { # A History represents a sorted list of Executions ordered by the start_timestamp_millis field (descending). It can be used to group all the Executions of a continuous build.
+        #
+        # Note that the ordering only operates on one-dimension. If a repository has multiple branches, it means that multiple histories will need to be used in order to order Executions per branch.
+      "displayName": "A String", # A short human-readable (plain text) name to display in the UI. Maximum of 100 characters.
+          #
+          # - In response: present if set during create. - In create request: optional
+      "name": "A String", # A name to uniquely identify a history within a project. Maximum of 100 characters.
+          #
+          # - In response always set - In create request: always set
+      "historyId": "A String", # A unique identifier within a project for this History.
+          #
+          # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+          #
+          # - In response always set - In create request: never set
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="get">get(projectId=None, historyId=None)</code>
+  <pre>Gets a History.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to read project - INVALID_ARGUMENT - if the request is malformed - NOT_FOUND - if the History does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  historyId: string, A History id.
+
+Required. (required)
+
+Returns:
+  An object of the form:
+
+    { # A History represents a sorted list of Executions ordered by the start_timestamp_millis field (descending). It can be used to group all the Executions of a continuous build.
+        #
+        # Note that the ordering only operates on one-dimension. If a repository has multiple branches, it means that multiple histories will need to be used in order to order Executions per branch.
+      "displayName": "A String", # A short human-readable (plain text) name to display in the UI. Maximum of 100 characters.
+          #
+          # - In response: present if set during create. - In create request: optional
+      "name": "A String", # A name to uniquely identify a history within a project. Maximum of 100 characters.
+          #
+          # - In response always set - In create request: always set
+      "historyId": "A String", # A unique identifier within a project for this History.
+          #
+          # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+          #
+          # - In response always set - In create request: never set
+    }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list">list(projectId=None, pageToken=None, pageSize=None, filterByName=None)</code>
+  <pre>Lists Histories for a given Project.
+
+The histories are sorted by modification time in descending order. The history_id key will be used to order the history with the same modification time.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to read project - INVALID_ARGUMENT - if the request is malformed - NOT_FOUND - if the History does not exist
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+  pageToken: string, A continuation token to resume the query at the next item.
+
+Optional.
+  pageSize: integer, The maximum number of Histories to fetch.
+
+Default value: 20. The server will use this default if the field is not set or has a value of 0. Any value greater than 100 will be treated as 100.
+
+Optional.
+  filterByName: string, If set, only return histories with the given name.
+
+Optional.
+
+Returns:
+  An object of the form:
+
+    { # Response message for HistoryService.List
+    "nextPageToken": "A String", # A continuation token to resume the query at the next item.
+        #
+        # Will only be set if there are more histories to fetch.
+        #
+        # Tokens are valid for up to one hour from the time of the first list request. For instance, if you make a list request at 1PM and use the token from this first request 10 minutes later, the token from this second response will only be valid for 50 minutes.
+    "histories": [ # Histories.
+      { # A History represents a sorted list of Executions ordered by the start_timestamp_millis field (descending). It can be used to group all the Executions of a continuous build.
+            #
+            # Note that the ordering only operates on one-dimension. If a repository has multiple branches, it means that multiple histories will need to be used in order to order Executions per branch.
+          "displayName": "A String", # A short human-readable (plain text) name to display in the UI. Maximum of 100 characters.
+              #
+              # - In response: present if set during create. - In create request: optional
+          "name": "A String", # A name to uniquely identify a history within a project. Maximum of 100 characters.
+              #
+              # - In response always set - In create request: always set
+          "historyId": "A String", # A unique identifier within a project for this History.
+              #
+              # Returns INVALID_ARGUMENT if this field is set or overwritten by the caller.
+              #
+              # - In response always set - In create request: never set
+        },
+    ],
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
+  <pre>Retrieves the next page of results.
+
+Args:
+  previous_request: The request for the previous page. (required)
+  previous_response: The response from the request for the previous page. (required)
+
+Returns:
+  A request object that you can call 'execute()' on to request the next
+  page. Returns None if there are no more items in the collection.
+    </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/toolresults_v1beta3.projects.html b/docs/dyn/toolresults_v1beta3.projects.html
new file mode 100644
index 0000000..a563198
--- /dev/null
+++ b/docs/dyn/toolresults_v1beta3.projects.html
@@ -0,0 +1,155 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="toolresults_v1beta3.html">Cloud Tool Results API</a> . <a href="toolresults_v1beta3.projects.html">projects</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="toolresults_v1beta3.projects.histories.html">histories()</a></code>
+</p>
+<p class="firstline">Returns the histories Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#getSettings">getSettings(projectId=None)</a></code></p>
+<p class="firstline">Gets the Tool Results settings for a project.</p>
+<p class="toc_element">
+  <code><a href="#initializeSettings">initializeSettings(projectId=None)</a></code></p>
+<p class="firstline">Creates resources for settings which have not yet been set.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="getSettings">getSettings(projectId=None)</code>
+  <pre>Gets the Tool Results settings for a project.
+
+May return any of the following canonical error codes:
+
+- PERMISSION_DENIED - if the user is not authorized to read from project
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+
+Returns:
+  An object of the form:
+
+    { # Per-project settings for the Tool Results service.
+    "defaultBucket": "A String", # The name of the Google Cloud Storage bucket to which results are written.
+        #
+        # By default, this is unset.
+        #
+        # In update request: optional In response: optional
+    "name": "A String", # The name of the project's settings.
+        #
+        # Always of the form: projects/{project-id}/settings
+        #
+        # In update request: never set In response: always set
+  }</pre>
+</div>
+
+<div class="method">
+    <code class="details" id="initializeSettings">initializeSettings(projectId=None)</code>
+  <pre>Creates resources for settings which have not yet been set.
+
+Currently, this creates a single resource: a Google Cloud Storage bucket, to be used as the default bucket for this project. The bucket is created in the name of the user calling. Except in rare cases, calling this method in parallel from multiple clients will only create a single bucket. In order to avoid unnecessary storage charges, the bucket is configured to automatically delete objects older than 90 days.
+
+The bucket is created with the project-private ACL: All project team members are given permissions to the bucket and objects created within it according to their roles. Project owners have owners rights, and so on. The default ACL on objects created in the bucket is project-private as well. See Google Cloud Storage documentation for more details.
+
+If there is already a default bucket set and the project can access the bucket, this call does nothing. However, if the project doesn't have the permission to access the bucket or the bucket is deteleted, a new bucket will be created.
+
+May return any canonical error codes, including the following:
+
+- PERMISSION_DENIED - if the user is not authorized to write to project - Any error code raised by Google Cloud Storage
+
+Args:
+  projectId: string, A Project id.
+
+Required. (required)
+
+Returns:
+  An object of the form:
+
+    { # Per-project settings for the Tool Results service.
+    "defaultBucket": "A String", # The name of the Google Cloud Storage bucket to which results are written.
+        #
+        # By default, this is unset.
+        #
+        # In update request: optional In response: optional
+    "name": "A String", # The name of the project's settings.
+        #
+        # Always of the form: projects/{project-id}/settings
+        #
+        # In update request: never set In response: always set
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/vision_v1.html b/docs/dyn/vision_v1.html
new file mode 100644
index 0000000..39807de
--- /dev/null
+++ b/docs/dyn/vision_v1.html
@@ -0,0 +1,103 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="vision_v1.html">Google Cloud Vision API</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="vision_v1.images.html">images()</a></code>
+</p>
+<p class="firstline">Returns the images Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#new_batch_http_request">new_batch_http_request()</a></code></p>
+<p class="firstline">Create a BatchHttpRequest object based on the discovery document.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="new_batch_http_request">new_batch_http_request()</code>
+  <pre>Create a BatchHttpRequest object based on the discovery document.
+
+        Args:
+          callback: callable, A callback to be called for each response, of the
+            form callback(id, response, exception). The first parameter is the
+            request id, and the second is the deserialized response object. The
+            third is an apiclient.errors.HttpError exception object if an HTTP
+            error occurred while processing the request, or None if no error
+            occurred.
+
+        Returns:
+          A BatchHttpRequest object based on the discovery document.
+        </pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/vision_v1.images.html b/docs/dyn/vision_v1.images.html
new file mode 100644
index 0000000..6a4fded
--- /dev/null
+++ b/docs/dyn/vision_v1.images.html
@@ -0,0 +1,869 @@
+<html><body>
+<style>
+
+body, h1, h2, h3, div, span, p, pre, a {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-weight: inherit;
+  font-style: inherit;
+  font-size: 100%;
+  font-family: inherit;
+  vertical-align: baseline;
+}
+
+body {
+  font-size: 13px;
+  padding: 1em;
+}
+
+h1 {
+  font-size: 26px;
+  margin-bottom: 1em;
+}
+
+h2 {
+  font-size: 24px;
+  margin-bottom: 1em;
+}
+
+h3 {
+  font-size: 20px;
+  margin-bottom: 1em;
+  margin-top: 1em;
+}
+
+pre, code {
+  line-height: 1.5;
+  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
+}
+
+pre {
+  margin-top: 0.5em;
+}
+
+h1, h2, h3, p {
+  font-family: Arial, sans serif;
+}
+
+h1, h2, h3 {
+  border-bottom: solid #CCC 1px;
+}
+
+.toc_element {
+  margin-top: 0.5em;
+}
+
+.firstline {
+  margin-left: 2 em;
+}
+
+.method  {
+  margin-top: 1em;
+  border: solid 1px #CCC;
+  padding: 1em;
+  background: #EEE;
+}
+
+.details {
+  font-weight: bold;
+  font-size: 14px;
+}
+
+</style>
+
+<h1><a href="vision_v1.html">Google Cloud Vision API</a> . <a href="vision_v1.images.html">images</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="#annotate">annotate(body, x__xgafv=None)</a></code></p>
+<p class="firstline">Run image detection and annotation for a batch of images.</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="annotate">annotate(body, x__xgafv=None)</code>
+  <pre>Run image detection and annotation for a batch of images.
+
+Args:
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # Multiple image annotation requests are batched into a single service call.
+    "requests": [ # Individual image annotation requests for this batch.
+      { # Request for performing Google Cloud Vision API tasks over a user-provided
+          # image, with user-requested features.
+        "imageContext": { # Image context. # Additional context that may accompany the image.
+          "latLongRect": { # Rectangle determined by min and max LatLng pairs. # Lat/long rectangle that specifies the location of the image.
+            "minLatLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Min lat/long pair.
+                # of doubles representing degrees latitude and degrees longitude. Unless
+                # specified otherwise, this must conform to the
+                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                # standard</a>. Values must be within normalized ranges.
+                #
+                # Example of normalization code in Python:
+                #
+                #     def NormalizeLongitude(longitude):
+                #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                #       q, r = divmod(longitude, 360.0)
+                #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                #         return r - 360.0
+                #       return r
+                #
+                #     def NormalizeLatLng(latitude, longitude):
+                #       """Wraps decimal degrees latitude and longitude to
+                #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
+                #       r = latitude % 360.0
+                #       if r <= 90.0:
+                #         return r, NormalizeLongitude(longitude)
+                #       elif r >= 270.0:
+                #         return r - 360, NormalizeLongitude(longitude)
+                #       else:
+                #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                #
+                #     assert 180.0 == NormalizeLongitude(180.0)
+                #     assert -180.0 == NormalizeLongitude(-180.0)
+                #     assert -179.0 == NormalizeLongitude(181.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+            },
+            "maxLatLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Max lat/long pair.
+                # of doubles representing degrees latitude and degrees longitude. Unless
+                # specified otherwise, this must conform to the
+                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                # standard</a>. Values must be within normalized ranges.
+                #
+                # Example of normalization code in Python:
+                #
+                #     def NormalizeLongitude(longitude):
+                #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                #       q, r = divmod(longitude, 360.0)
+                #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                #         return r - 360.0
+                #       return r
+                #
+                #     def NormalizeLatLng(latitude, longitude):
+                #       """Wraps decimal degrees latitude and longitude to
+                #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
+                #       r = latitude % 360.0
+                #       if r <= 90.0:
+                #         return r, NormalizeLongitude(longitude)
+                #       elif r >= 270.0:
+                #         return r - 360, NormalizeLongitude(longitude)
+                #       else:
+                #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                #
+                #     assert 180.0 == NormalizeLongitude(180.0)
+                #     assert -180.0 == NormalizeLongitude(-180.0)
+                #     assert -179.0 == NormalizeLongitude(181.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+            },
+          },
+          "languageHints": [ # List of languages to use for TEXT_DETECTION. In most cases, an empty value
+              # will yield the best results as it will allow text detection to
+              # automatically detect the text language. For languages based on the latin
+              # alphabet a hint is not needed. In rare cases, when the language of
+              # the text in the image is known in advance, setting this hint will help get
+              # better results (although it will hurt a great deal if the hint is wrong).
+              # Text detection will return an error if one or more of the languages
+              # specified here are not supported. The exact list of supported languages are
+              # specified here:
+              # https://cloud.google.com/translate/v2/using_rest#language-params
+            "A String",
+          ],
+        },
+        "image": { # Client image to perform Google Cloud Vision API tasks over. # The image to be processed.
+          "content": "A String", # Image content, represented as a stream of bytes.
+          "source": { # External image source (Google Cloud Storage image location). # Google Cloud Storage image location. If both 'content' and 'source'
+              # are filled for an image, 'content' takes precedence and it will be
+              # used for performing the image annotation request.
+            "gcsImageUri": "A String", # Google Cloud Storage image URI. It must be in the following form:
+                # `gs://bucket_name/object_name`. For more
+                # details, please see: https://cloud.google.com/storage/docs/reference-uris.
+                # NOTE: Cloud Storage object versioning is not supported!
+          },
+        },
+        "features": [ # Requested features.
+          { # The <em>Feature</em> indicates what type of image detection task to perform.
+              # Users describe the type of Google Cloud Vision API tasks to perform over
+              # images by using <em>Feature</em>s. Features encode the Cloud Vision API
+              # vertical to operate on and the number of top-scoring results to return.
+            "type": "A String", # The feature type.
+            "maxResults": 42, # Maximum number of results of this type.
+          },
+        ],
+      },
+    ],
+  }
+
+  x__xgafv: string, V1 error format.
+    Allowed values
+      1 - v1 error format
+      2 - v2 error format
+
+Returns:
+  An object of the form:
+
+    { # Response to a batch image annotation request.
+    "responses": [ # Individual responses to image annotation requests within the batch.
+      { # Response to an image annotation request.
+        "safeSearchAnnotation": { # Set of features pertaining to the image, computed by various computer vision # If present, safe-search annotation completed successfully.
+            # methods over safe-search verticals (for example, adult, spoof, medical,
+            # violence).
+          "medical": "A String", # Likelihood this is a medical image.
+          "violence": "A String", # Violence likelihood.
+          "spoof": "A String", # Spoof likelihood. The likelihood that an obvious modification
+              # was made to the image's canonical version to make it appear
+              # funny or offensive.
+          "adult": "A String", # Represents the adult contents likelihood for the image.
+        },
+        "textAnnotations": [ # If present, text (OCR) detection completed successfully.
+          { # Set of detected entity features.
+            "confidence": 3.14, # The accuracy of the entity detection in an image.
+                # For example, for an image containing 'Eiffel Tower,' this field represents
+                # the confidence that there is a tower in the query image. Range [0, 1].
+            "description": "A String", # Entity textual description, expressed in its <code>locale</code> language.
+            "locale": "A String", # The language code for the locale in which the entity textual
+                # <code>description</code> (next field) is expressed.
+            "topicality": 3.14, # The relevancy of the ICA (Image Content Annotation) label to the
+                # image. For example, the relevancy of 'tower' to an image containing
+                # 'Eiffel Tower' is likely higher than an image containing a distant towering
+                # building, though the confidence that there is a tower may be the same.
+                # Range [0, 1].
+            "mid": "A String", # Opaque entity ID. Some IDs might be available in Knowledge Graph(KG).
+                # For more details on KG please see:
+                # https://developers.google.com/knowledge-graph/
+            "locations": [ # The location information for the detected entity. Multiple
+                # <code>LocationInfo</code> elements can be present since one location may
+                # indicate the location of the scene in the query image, and another the
+                # location of the place where the query image was taken. Location information
+                # is usually present for landmarks.
+              { # Detected entity location information.
+                "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Lat - long location coordinates.
+                    # of doubles representing degrees latitude and degrees longitude. Unless
+                    # specified otherwise, this must conform to the
+                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                    # standard</a>. Values must be within normalized ranges.
+                    #
+                    # Example of normalization code in Python:
+                    #
+                    #     def NormalizeLongitude(longitude):
+                    #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                    #       q, r = divmod(longitude, 360.0)
+                    #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                    #         return r - 360.0
+                    #       return r
+                    #
+                    #     def NormalizeLatLng(latitude, longitude):
+                    #       """Wraps decimal degrees latitude and longitude to
+                    #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
+                    #       r = latitude % 360.0
+                    #       if r <= 90.0:
+                    #         return r, NormalizeLongitude(longitude)
+                    #       elif r >= 270.0:
+                    #         return r - 360, NormalizeLongitude(longitude)
+                    #       else:
+                    #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                    #
+                    #     assert 180.0 == NormalizeLongitude(180.0)
+                    #     assert -180.0 == NormalizeLongitude(-180.0)
+                    #     assert -179.0 == NormalizeLongitude(181.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                    #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                    #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                    #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                    #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+                },
+              },
+            ],
+            "score": 3.14, # Overall score of the result. Range [0, 1].
+            "boundingPoly": { # A bounding polygon for the detected image annotation. # Image region to which this entity belongs. Not filled currently
+                # for `LABEL_DETECTION` features. For `TEXT_DETECTION` (OCR), `boundingPoly`s
+                # are produced for the entire text detected in an image region, followed by
+                # `boundingPoly`s for each word within the detected text.
+              "vertices": [ # The bounding polygon vertices.
+                { # A vertex represents a 2D point in the image.
+                    # NOTE: the vertex coordinates are in the same scale as the original image.
+                  "y": 42, # Y coordinate.
+                  "x": 42, # X coordinate.
+                },
+              ],
+            },
+            "properties": [ # Some entities can have additional optional <code>Property</code> fields.
+                # For example a different kind of score or string that qualifies the entity.
+              { # Arbitrary name/value pair.
+                "name": "A String", # Name of the property.
+                "value": "A String", # Value of the property.
+              },
+            ],
+          },
+        ],
+        "labelAnnotations": [ # If present, label detection completed successfully.
+          { # Set of detected entity features.
+            "confidence": 3.14, # The accuracy of the entity detection in an image.
+                # For example, for an image containing 'Eiffel Tower,' this field represents
+                # the confidence that there is a tower in the query image. Range [0, 1].
+            "description": "A String", # Entity textual description, expressed in its <code>locale</code> language.
+            "locale": "A String", # The language code for the locale in which the entity textual
+                # <code>description</code> (next field) is expressed.
+            "topicality": 3.14, # The relevancy of the ICA (Image Content Annotation) label to the
+                # image. For example, the relevancy of 'tower' to an image containing
+                # 'Eiffel Tower' is likely higher than an image containing a distant towering
+                # building, though the confidence that there is a tower may be the same.
+                # Range [0, 1].
+            "mid": "A String", # Opaque entity ID. Some IDs might be available in Knowledge Graph(KG).
+                # For more details on KG please see:
+                # https://developers.google.com/knowledge-graph/
+            "locations": [ # The location information for the detected entity. Multiple
+                # <code>LocationInfo</code> elements can be present since one location may
+                # indicate the location of the scene in the query image, and another the
+                # location of the place where the query image was taken. Location information
+                # is usually present for landmarks.
+              { # Detected entity location information.
+                "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Lat - long location coordinates.
+                    # of doubles representing degrees latitude and degrees longitude. Unless
+                    # specified otherwise, this must conform to the
+                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                    # standard</a>. Values must be within normalized ranges.
+                    #
+                    # Example of normalization code in Python:
+                    #
+                    #     def NormalizeLongitude(longitude):
+                    #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                    #       q, r = divmod(longitude, 360.0)
+                    #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                    #         return r - 360.0
+                    #       return r
+                    #
+                    #     def NormalizeLatLng(latitude, longitude):
+                    #       """Wraps decimal degrees latitude and longitude to
+                    #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
+                    #       r = latitude % 360.0
+                    #       if r <= 90.0:
+                    #         return r, NormalizeLongitude(longitude)
+                    #       elif r >= 270.0:
+                    #         return r - 360, NormalizeLongitude(longitude)
+                    #       else:
+                    #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                    #
+                    #     assert 180.0 == NormalizeLongitude(180.0)
+                    #     assert -180.0 == NormalizeLongitude(-180.0)
+                    #     assert -179.0 == NormalizeLongitude(181.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                    #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                    #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                    #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                    #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+                },
+              },
+            ],
+            "score": 3.14, # Overall score of the result. Range [0, 1].
+            "boundingPoly": { # A bounding polygon for the detected image annotation. # Image region to which this entity belongs. Not filled currently
+                # for `LABEL_DETECTION` features. For `TEXT_DETECTION` (OCR), `boundingPoly`s
+                # are produced for the entire text detected in an image region, followed by
+                # `boundingPoly`s for each word within the detected text.
+              "vertices": [ # The bounding polygon vertices.
+                { # A vertex represents a 2D point in the image.
+                    # NOTE: the vertex coordinates are in the same scale as the original image.
+                  "y": 42, # Y coordinate.
+                  "x": 42, # X coordinate.
+                },
+              ],
+            },
+            "properties": [ # Some entities can have additional optional <code>Property</code> fields.
+                # For example a different kind of score or string that qualifies the entity.
+              { # Arbitrary name/value pair.
+                "name": "A String", # Name of the property.
+                "value": "A String", # Value of the property.
+              },
+            ],
+          },
+        ],
+        "imagePropertiesAnnotation": { # Stores image properties (e.g. dominant colors). # If present, image properties were extracted successfully.
+          "dominantColors": { # Set of dominant colors and their corresponding scores. # If present, dominant colors completed successfully.
+            "colors": [ # RGB color values, with their score and pixel fraction.
+              { # Color information consists of RGB channels, score and fraction of
+                  # image the color occupies in the image.
+                "color": { # Represents a color in the RGBA color space. This representation is designed # RGB components of the color.
+                    # 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].
+                },
+                "pixelFraction": 3.14, # Stores the fraction of pixels the color occupies in the image.
+                    # Value in range [0, 1].
+                "score": 3.14, # Image-specific score for this color. Value in range [0, 1].
+              },
+            ],
+          },
+        },
+        "faceAnnotations": [ # If present, face detection completed successfully.
+          { # A face annotation object contains the results of face detection.
+            "panAngle": 3.14, # Yaw angle. Indicates the leftward/rightward angle that the face is
+                # pointing, relative to the vertical plane perpendicular to the image. Range
+                # [-180,180].
+            "sorrowLikelihood": "A String", # Sorrow likelihood.
+            "underExposedLikelihood": "A String", # Under-exposed likelihood.
+            "detectionConfidence": 3.14, # Detection confidence. Range [0, 1].
+            "joyLikelihood": "A String", # Joy likelihood.
+            "landmarks": [ # Detected face landmarks.
+              { # A face-specific landmark (for example, a face feature).
+                  # Landmark positions may fall outside the bounds of the image
+                  # when the face is near one or more edges of the image.
+                  # Therefore it is NOT guaranteed that 0 <= x < width or 0 <= y < height.
+                "position": { # A 3D position in the image, used primarily for Face detection landmarks. # Face landmark position.
+                    # A valid Position must have both x and y coordinates.
+                    # The position coordinates are in the same scale as the original image.
+                  "y": 3.14, # Y coordinate.
+                  "x": 3.14, # X coordinate.
+                  "z": 3.14, # Z coordinate (or depth).
+                },
+                "type": "A String", # Face landmark type.
+              },
+            ],
+            "surpriseLikelihood": "A String", # Surprise likelihood.
+            "blurredLikelihood": "A String", # Blurred likelihood.
+            "tiltAngle": 3.14, # Pitch angle. Indicates the upwards/downwards angle that the face is
+                # pointing
+                # relative to the image's horizontal plane. Range [-180,180].
+            "angerLikelihood": "A String", # Anger likelihood.
+            "boundingPoly": { # A bounding polygon for the detected image annotation. # The bounding polygon around the face. The coordinates of the bounding box
+                # are in the original image's scale, as returned in ImageParams.
+                # The bounding box is computed to "frame" the face in accordance with human
+                # expectations. It is based on the landmarker results.
+                # Note that one or more x and/or y coordinates may not be generated in the
+                # BoundingPoly (the polygon will be unbounded) if only a partial face appears in
+                # the image to be annotated.
+              "vertices": [ # The bounding polygon vertices.
+                { # A vertex represents a 2D point in the image.
+                    # NOTE: the vertex coordinates are in the same scale as the original image.
+                  "y": 42, # Y coordinate.
+                  "x": 42, # X coordinate.
+                },
+              ],
+            },
+            "rollAngle": 3.14, # Roll angle. Indicates the amount of clockwise/anti-clockwise rotation of
+                # the
+                # face relative to the image vertical, about the axis perpendicular to the
+                # face. Range [-180,180].
+            "headwearLikelihood": "A String", # Headwear likelihood.
+            "fdBoundingPoly": { # A bounding polygon for the detected image annotation. # This bounding polygon is tighter than the previous
+                # <code>boundingPoly</code>, and
+                # encloses only the skin part of the face. Typically, it is used to
+                # eliminate the face from any image analysis that detects the
+                # "amount of skin" visible in an image. It is not based on the
+                # landmarker results, only on the initial face detection, hence
+                # the <code>fd</code> (face detection) prefix.
+              "vertices": [ # The bounding polygon vertices.
+                { # A vertex represents a 2D point in the image.
+                    # NOTE: the vertex coordinates are in the same scale as the original image.
+                  "y": 42, # Y coordinate.
+                  "x": 42, # X coordinate.
+                },
+              ],
+            },
+            "landmarkingConfidence": 3.14, # Face landmarking confidence. Range [0, 1].
+          },
+        ],
+        "logoAnnotations": [ # If present, logo detection completed successfully.
+          { # Set of detected entity features.
+            "confidence": 3.14, # The accuracy of the entity detection in an image.
+                # For example, for an image containing 'Eiffel Tower,' this field represents
+                # the confidence that there is a tower in the query image. Range [0, 1].
+            "description": "A String", # Entity textual description, expressed in its <code>locale</code> language.
+            "locale": "A String", # The language code for the locale in which the entity textual
+                # <code>description</code> (next field) is expressed.
+            "topicality": 3.14, # The relevancy of the ICA (Image Content Annotation) label to the
+                # image. For example, the relevancy of 'tower' to an image containing
+                # 'Eiffel Tower' is likely higher than an image containing a distant towering
+                # building, though the confidence that there is a tower may be the same.
+                # Range [0, 1].
+            "mid": "A String", # Opaque entity ID. Some IDs might be available in Knowledge Graph(KG).
+                # For more details on KG please see:
+                # https://developers.google.com/knowledge-graph/
+            "locations": [ # The location information for the detected entity. Multiple
+                # <code>LocationInfo</code> elements can be present since one location may
+                # indicate the location of the scene in the query image, and another the
+                # location of the place where the query image was taken. Location information
+                # is usually present for landmarks.
+              { # Detected entity location information.
+                "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Lat - long location coordinates.
+                    # of doubles representing degrees latitude and degrees longitude. Unless
+                    # specified otherwise, this must conform to the
+                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                    # standard</a>. Values must be within normalized ranges.
+                    #
+                    # Example of normalization code in Python:
+                    #
+                    #     def NormalizeLongitude(longitude):
+                    #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                    #       q, r = divmod(longitude, 360.0)
+                    #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                    #         return r - 360.0
+                    #       return r
+                    #
+                    #     def NormalizeLatLng(latitude, longitude):
+                    #       """Wraps decimal degrees latitude and longitude to
+                    #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
+                    #       r = latitude % 360.0
+                    #       if r <= 90.0:
+                    #         return r, NormalizeLongitude(longitude)
+                    #       elif r >= 270.0:
+                    #         return r - 360, NormalizeLongitude(longitude)
+                    #       else:
+                    #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                    #
+                    #     assert 180.0 == NormalizeLongitude(180.0)
+                    #     assert -180.0 == NormalizeLongitude(-180.0)
+                    #     assert -179.0 == NormalizeLongitude(181.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                    #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                    #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                    #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                    #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+                },
+              },
+            ],
+            "score": 3.14, # Overall score of the result. Range [0, 1].
+            "boundingPoly": { # A bounding polygon for the detected image annotation. # Image region to which this entity belongs. Not filled currently
+                # for `LABEL_DETECTION` features. For `TEXT_DETECTION` (OCR), `boundingPoly`s
+                # are produced for the entire text detected in an image region, followed by
+                # `boundingPoly`s for each word within the detected text.
+              "vertices": [ # The bounding polygon vertices.
+                { # A vertex represents a 2D point in the image.
+                    # NOTE: the vertex coordinates are in the same scale as the original image.
+                  "y": 42, # Y coordinate.
+                  "x": 42, # X coordinate.
+                },
+              ],
+            },
+            "properties": [ # Some entities can have additional optional <code>Property</code> fields.
+                # For example a different kind of score or string that qualifies the entity.
+              { # Arbitrary name/value pair.
+                "name": "A String", # Name of the property.
+                "value": "A String", # Value of the property.
+              },
+            ],
+          },
+        ],
+        "landmarkAnnotations": [ # If present, landmark detection completed successfully.
+          { # Set of detected entity features.
+            "confidence": 3.14, # The accuracy of the entity detection in an image.
+                # For example, for an image containing 'Eiffel Tower,' this field represents
+                # the confidence that there is a tower in the query image. Range [0, 1].
+            "description": "A String", # Entity textual description, expressed in its <code>locale</code> language.
+            "locale": "A String", # The language code for the locale in which the entity textual
+                # <code>description</code> (next field) is expressed.
+            "topicality": 3.14, # The relevancy of the ICA (Image Content Annotation) label to the
+                # image. For example, the relevancy of 'tower' to an image containing
+                # 'Eiffel Tower' is likely higher than an image containing a distant towering
+                # building, though the confidence that there is a tower may be the same.
+                # Range [0, 1].
+            "mid": "A String", # Opaque entity ID. Some IDs might be available in Knowledge Graph(KG).
+                # For more details on KG please see:
+                # https://developers.google.com/knowledge-graph/
+            "locations": [ # The location information for the detected entity. Multiple
+                # <code>LocationInfo</code> elements can be present since one location may
+                # indicate the location of the scene in the query image, and another the
+                # location of the place where the query image was taken. Location information
+                # is usually present for landmarks.
+              { # Detected entity location information.
+                "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Lat - long location coordinates.
+                    # of doubles representing degrees latitude and degrees longitude. Unless
+                    # specified otherwise, this must conform to the
+                    # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
+                    # standard</a>. Values must be within normalized ranges.
+                    #
+                    # Example of normalization code in Python:
+                    #
+                    #     def NormalizeLongitude(longitude):
+                    #       """Wraps decimal degrees longitude to [-180.0, 180.0]."""
+                    #       q, r = divmod(longitude, 360.0)
+                    #       if r > 180.0 or (r == 180.0 and q <= -1.0):
+                    #         return r - 360.0
+                    #       return r
+                    #
+                    #     def NormalizeLatLng(latitude, longitude):
+                    #       """Wraps decimal degrees latitude and longitude to
+                    #       [-90.0, 90.0] and [-180.0, 180.0], respectively."""
+                    #       r = latitude % 360.0
+                    #       if r <= 90.0:
+                    #         return r, NormalizeLongitude(longitude)
+                    #       elif r >= 270.0:
+                    #         return r - 360, NormalizeLongitude(longitude)
+                    #       else:
+                    #         return 180 - r, NormalizeLongitude(longitude + 180.0)
+                    #
+                    #     assert 180.0 == NormalizeLongitude(180.0)
+                    #     assert -180.0 == NormalizeLongitude(-180.0)
+                    #     assert -179.0 == NormalizeLongitude(181.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)
+                    #     assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)
+                    #     assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)
+                    #     assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)
+                    #     assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)
+                    #     assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)
+                    #     assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)
+                    #     assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)
+                  "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
+                  "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
+                },
+              },
+            ],
+            "score": 3.14, # Overall score of the result. Range [0, 1].
+            "boundingPoly": { # A bounding polygon for the detected image annotation. # Image region to which this entity belongs. Not filled currently
+                # for `LABEL_DETECTION` features. For `TEXT_DETECTION` (OCR), `boundingPoly`s
+                # are produced for the entire text detected in an image region, followed by
+                # `boundingPoly`s for each word within the detected text.
+              "vertices": [ # The bounding polygon vertices.
+                { # A vertex represents a 2D point in the image.
+                    # NOTE: the vertex coordinates are in the same scale as the original image.
+                  "y": 42, # Y coordinate.
+                  "x": 42, # X coordinate.
+                },
+              ],
+            },
+            "properties": [ # Some entities can have additional optional <code>Property</code> fields.
+                # For example a different kind of score or string that qualifies the entity.
+              { # Arbitrary name/value pair.
+                "name": "A String", # Name of the property.
+                "value": "A String", # Value of the property.
+              },
+            ],
+          },
+        ],
+        "error": { # The `Status` type defines a logical error model that is suitable for different # If set, represents the error message for the operation.
+            # Note that filled-in mage annotations are guaranteed to be
+            # correct, even when <code>error</code> is non-empty.
+            # programming environments, including REST APIs and RPC APIs. It is used by
+            # [gRPC](https://github.com/grpc). The error model is designed to be:
+            #
+            # - Simple to use and understand for most users
+            # - Flexible enough to meet unexpected needs
+            #
+            # # Overview
+            #
+            # The `Status` message contains three pieces of data: error code, error message,
+            # and error details. The error code should be an enum value of
+            # google.rpc.Code, but it may accept additional error codes if needed.  The
+            # error message should be a developer-facing English message that helps
+            # developers *understand* and *resolve* the error. If a localized user-facing
+            # error message is needed, put the localized message in the error details or
+            # localize it in the client. The optional error details may contain arbitrary
+            # information about the error. There is a predefined set of error detail types
+            # in the package `google.rpc` which can be used for common error conditions.
+            #
+            # # Language mapping
+            #
+            # The `Status` message is the logical representation of the error model, but it
+            # is not necessarily the actual wire format. When the `Status` message is
+            # exposed in different client libraries and different wire protocols, it can be
+            # mapped differently. For example, it will likely be mapped to some exceptions
+            # in Java, but more likely mapped to some error codes in C.
+            #
+            # # Other uses
+            #
+            # The error model and the `Status` message can be used in a variety of
+            # environments, either with or without APIs, to provide a
+            # consistent developer experience across different environments.
+            #
+            # Example uses of this error model include:
+            #
+            # - Partial errors. If a service needs to return partial errors to the client,
+            #     it may embed the `Status` in the normal response to indicate the partial
+            #     errors.
+            #
+            # - Workflow errors. A typical workflow has multiple steps. Each step may
+            #     have a `Status` message for error reporting purpose.
+            #
+            # - Batch operations. If a client uses batch request and batch response, the
+            #     `Status` message should be used directly inside batch response, one for
+            #     each error sub-response.
+            #
+            # - Asynchronous operations. If an API call embeds asynchronous operation
+            #     results in its response, the status of those operations should be
+            #     represented directly using the `Status` message.
+            #
+            # - Logging. If some API errors are stored in logs, the message `Status` could
+            #     be used directly after any stripping needed for security/privacy reasons.
+          "message": "A String", # A developer-facing error message, which should be in English. Any
+              # user-facing error message should be localized and sent in the
+              # google.rpc.Status.details field, or localized by the client.
+          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+          "details": [ # A list of messages that carry the error details.  There will be a
+              # common set of message types for APIs to use.
+            {
+              "a_key": "", # Properties of the object. Contains field @ype with type URL.
+            },
+          ],
+        },
+      },
+    ],
+  }</pre>
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/docs/dyn/webmasters_v3.searchanalytics.html b/docs/dyn/webmasters_v3.searchanalytics.html
index a6bede5..d5f743b 100644
--- a/docs/dyn/webmasters_v3.searchanalytics.html
+++ b/docs/dyn/webmasters_v3.searchanalytics.html
@@ -108,6 +108,7 @@
         ],
       },
     ],
+    "startRow": 42, # [Optional; Default is 0] Zero-based index of the first row in the response. Must be a non-negative number.
     "rowLimit": 42, # [Optional; Default is 1000] The maximum number of rows to return. Must be a number from 1 to 5,000 (inclusive).
     "aggregationType": "A String", # [Optional; Default is "auto"] How data is aggregated. If aggregated by property, all data for the same property is aggregated; if aggregated by page, all data is aggregated by canonical URI. If you filter or group by page, choose AUTO; otherwise you can aggregate either by property or by page, depending on how you want your data calculated; see  the help documentation to learn how data is calculated differently by site versus by page.
         # 
diff --git a/docs/dyn/webmasters_v3.urlcrawlerrorscounts.html b/docs/dyn/webmasters_v3.urlcrawlerrorscounts.html
index a0c8275..2fc96af 100644
--- a/docs/dyn/webmasters_v3.urlcrawlerrorscounts.html
+++ b/docs/dyn/webmasters_v3.urlcrawlerrorscounts.html
@@ -87,6 +87,7 @@
   category: string, The crawl error category. For example: serverError. If not specified, returns results for all categories.
     Allowed values
       authPermissions - 
+      flashContent - 
       manyToOneRedirect - 
       notFollowed - 
       notFound - 
diff --git a/docs/dyn/webmasters_v3.urlcrawlerrorssamples.html b/docs/dyn/webmasters_v3.urlcrawlerrorssamples.html
index cc302ae..1771dbf 100644
--- a/docs/dyn/webmasters_v3.urlcrawlerrorssamples.html
+++ b/docs/dyn/webmasters_v3.urlcrawlerrorssamples.html
@@ -94,6 +94,7 @@
   category: string, The crawl error category. For example: authPermissions (required)
     Allowed values
       authPermissions - 
+      flashContent - 
       manyToOneRedirect - 
       notFollowed - 
       notFound - 
@@ -135,6 +136,7 @@
   category: string, The crawl error category. For example: authPermissions (required)
     Allowed values
       authPermissions - 
+      flashContent - 
       manyToOneRedirect - 
       notFollowed - 
       notFound - 
@@ -181,6 +183,7 @@
   category: string, The crawl error category. For example: authPermissions (required)
     Allowed values
       authPermissions - 
+      flashContent - 
       manyToOneRedirect - 
       notFollowed - 
       notFound - 
diff --git a/docs/dyn/youtube_v3.channels.html b/docs/dyn/youtube_v3.channels.html
index 5961210..05d1ed3 100644
--- a/docs/dyn/youtube_v3.channels.html
+++ b/docs/dyn/youtube_v3.channels.html
@@ -258,7 +258,7 @@
             "bannerTabletExtraHdImageUrl": "A String", # Banner image. Tablet size extra high resolution (2560x424).
             "bannerMobileHdImageUrl": "A String", # Banner image. Mobile size high resolution (1280x360).
           },
-          "watch": { # Branding properties for the watch. # Branding properties for the watch page.
+          "watch": { # Branding properties for the watch. All deprecated. # Branding properties for the watch page.
             "textColor": "A String", # The background color for the video watch page's branded area.
             "featuredPlaylistId": "A String", # An ID that uniquely identifies a playlist that displays next to the video player.
             "backgroundColor": "A String", # The text color for the video watch page's branded area.
@@ -296,7 +296,17 @@
             },
           ],
         },
-        "snippet": { # Basic details about a channel, including title, description and thumbnails. # The snippet object contains basic details about the channel, such as its title, description, and thumbnail images.
+        "snippet": { # Basic details about a channel, including title, description and thumbnails. Next available id: 15. # The snippet object contains basic details about the channel, such as its title, description, and thumbnail images.
+          "description": "A String", # The description of the channel.
+          "title": "A String", # The channel's title.
+          "country": "A String", # The country of the channel.
+          "customUrl": "A String", # The custom url of the channel.
+          "publishedAt": "A String", # The date and time that the channel was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+          "defaultLanguage": "A String", # The language of the channel's default title and description.
+          "localized": { # Channel localization setting # Localized title and description, read-only.
+            "description": "A String", # The localized strings for channel's description.
+            "title": "A String", # The localized strings for channel's title.
+          },
           "thumbnails": { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the channel. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
             "default": { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
               "url": "A String", # The thumbnail image's URL.
@@ -324,15 +334,6 @@
               "height": 42, # (Optional) Height of the thumbnail image.
             },
           },
-          "title": "A String", # The channel's title.
-          "country": "A String", # The country of the channel.
-          "defaultLanguage": "A String", # The language of the channel's default title and description.
-          "publishedAt": "A String", # The date and time that the channel was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
-          "localized": { # Channel localization setting # Localized title and description, read-only.
-            "description": "A String", # The localized strings for channel's description.
-            "title": "A String", # The localized strings for channel's title.
-          },
-          "description": "A String", # The description of the channel.
         },
         "auditDetails": { # The auditDetails object encapsulates channel data that is relevant for YouTube Partners during the audit process. # The auditionDetails object encapsulates channel data that is relevant for YouTube Partners during the audition process.
           "communityGuidelinesGoodStanding": True or False, # Whether or not the channel respects the community guidelines.
@@ -530,7 +531,7 @@
       "bannerTabletExtraHdImageUrl": "A String", # Banner image. Tablet size extra high resolution (2560x424).
       "bannerMobileHdImageUrl": "A String", # Banner image. Mobile size high resolution (1280x360).
     },
-    "watch": { # Branding properties for the watch. # Branding properties for the watch page.
+    "watch": { # Branding properties for the watch. All deprecated. # Branding properties for the watch page.
       "textColor": "A String", # The background color for the video watch page's branded area.
       "featuredPlaylistId": "A String", # An ID that uniquely identifies a playlist that displays next to the video player.
       "backgroundColor": "A String", # The text color for the video watch page's branded area.
@@ -568,7 +569,17 @@
       },
     ],
   },
-  "snippet": { # Basic details about a channel, including title, description and thumbnails. # The snippet object contains basic details about the channel, such as its title, description, and thumbnail images.
+  "snippet": { # Basic details about a channel, including title, description and thumbnails. Next available id: 15. # The snippet object contains basic details about the channel, such as its title, description, and thumbnail images.
+    "description": "A String", # The description of the channel.
+    "title": "A String", # The channel's title.
+    "country": "A String", # The country of the channel.
+    "customUrl": "A String", # The custom url of the channel.
+    "publishedAt": "A String", # The date and time that the channel was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+    "defaultLanguage": "A String", # The language of the channel's default title and description.
+    "localized": { # Channel localization setting # Localized title and description, read-only.
+      "description": "A String", # The localized strings for channel's description.
+      "title": "A String", # The localized strings for channel's title.
+    },
     "thumbnails": { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the channel. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
       "default": { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
         "url": "A String", # The thumbnail image's URL.
@@ -596,15 +607,6 @@
         "height": 42, # (Optional) Height of the thumbnail image.
       },
     },
-    "title": "A String", # The channel's title.
-    "country": "A String", # The country of the channel.
-    "defaultLanguage": "A String", # The language of the channel's default title and description.
-    "publishedAt": "A String", # The date and time that the channel was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
-    "localized": { # Channel localization setting # Localized title and description, read-only.
-      "description": "A String", # The localized strings for channel's description.
-      "title": "A String", # The localized strings for channel's title.
-    },
-    "description": "A String", # The description of the channel.
   },
   "auditDetails": { # The auditDetails object encapsulates channel data that is relevant for YouTube Partners during the audit process. # The auditionDetails object encapsulates channel data that is relevant for YouTube Partners during the audition process.
     "communityGuidelinesGoodStanding": True or False, # Whether or not the channel respects the community guidelines.
@@ -769,7 +771,7 @@
         "bannerTabletExtraHdImageUrl": "A String", # Banner image. Tablet size extra high resolution (2560x424).
         "bannerMobileHdImageUrl": "A String", # Banner image. Mobile size high resolution (1280x360).
       },
-      "watch": { # Branding properties for the watch. # Branding properties for the watch page.
+      "watch": { # Branding properties for the watch. All deprecated. # Branding properties for the watch page.
         "textColor": "A String", # The background color for the video watch page's branded area.
         "featuredPlaylistId": "A String", # An ID that uniquely identifies a playlist that displays next to the video player.
         "backgroundColor": "A String", # The text color for the video watch page's branded area.
@@ -807,7 +809,17 @@
         },
       ],
     },
-    "snippet": { # Basic details about a channel, including title, description and thumbnails. # The snippet object contains basic details about the channel, such as its title, description, and thumbnail images.
+    "snippet": { # Basic details about a channel, including title, description and thumbnails. Next available id: 15. # The snippet object contains basic details about the channel, such as its title, description, and thumbnail images.
+      "description": "A String", # The description of the channel.
+      "title": "A String", # The channel's title.
+      "country": "A String", # The country of the channel.
+      "customUrl": "A String", # The custom url of the channel.
+      "publishedAt": "A String", # The date and time that the channel was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+      "defaultLanguage": "A String", # The language of the channel's default title and description.
+      "localized": { # Channel localization setting # Localized title and description, read-only.
+        "description": "A String", # The localized strings for channel's description.
+        "title": "A String", # The localized strings for channel's title.
+      },
       "thumbnails": { # Internal representation of thumbnails for a YouTube resource. # A map of thumbnail images associated with the channel. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail.
         "default": { # A thumbnail is an image representing a YouTube resource. # The default image for this resource.
           "url": "A String", # The thumbnail image's URL.
@@ -835,15 +847,6 @@
           "height": 42, # (Optional) Height of the thumbnail image.
         },
       },
-      "title": "A String", # The channel's title.
-      "country": "A String", # The country of the channel.
-      "defaultLanguage": "A String", # The language of the channel's default title and description.
-      "publishedAt": "A String", # The date and time that the channel was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
-      "localized": { # Channel localization setting # Localized title and description, read-only.
-        "description": "A String", # The localized strings for channel's description.
-        "title": "A String", # The localized strings for channel's title.
-      },
-      "description": "A String", # The description of the channel.
     },
     "auditDetails": { # The auditDetails object encapsulates channel data that is relevant for YouTube Partners during the audit process. # The auditionDetails object encapsulates channel data that is relevant for YouTube Partners during the audition process.
       "communityGuidelinesGoodStanding": True or False, # Whether or not the channel respects the community guidelines.
diff --git a/docs/dyn/youtube_v3.liveBroadcasts.html b/docs/dyn/youtube_v3.liveBroadcasts.html
index fd6d1a3..f818a0f 100644
--- a/docs/dyn/youtube_v3.liveBroadcasts.html
+++ b/docs/dyn/youtube_v3.liveBroadcasts.html
@@ -144,7 +144,17 @@
       "totalChatCount": "A String", # The total number of live chat messages currently on the broadcast. The property and its value will be present if the broadcast is public, has the live chat feature enabled, and has at least one message. Note that this field will not be filled after the broadcast ends. So this property would not identify the number of chat messages for an archived video of a completed live broadcast.
     },
     "contentDetails": { # Detailed settings of a broadcast. # The contentDetails object contains information about the event's video content, such as whether the content can be shown in an embedded video player or if it will be archived and therefore available for viewing after the event has concluded.
+      "projection": "A String", # The projection format of this broadcast. This defaults to rectangular.
       "enableLowLatency": True or False, # Indicates whether this broadcast has low latency enabled.
+      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
+        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
+        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
+        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
+            #
+            # You need to set this value to true if you intend to have a broadcast delay for your event.
+            #
+            # Note: This property cannot be updated once the broadcast is in the testing or live state.
+      },
       "boundStreamId": "A String", # This value uniquely identifies the live stream bound to the broadcast.
       "enableEmbed": True or False, # This setting indicates whether the broadcast video can be played in an embedded player. If you choose to archive the video (using the enableArchive property), this setting will also apply to the archived video.
       "enableClosedCaptions": True or False, # This setting indicates whether HTTP POST closed captioning is enabled for this broadcast. The ingestion URL of the closed captions is returned through the liveStreams API. This is mutually exclusive with using the closed_captions_type property, and is equivalent to setting closed_captions_type to CLOSED_CAPTIONS_HTTP_POST.
@@ -161,15 +171,7 @@
           #
           #
           # Important: You must set the value to true and also set the enableArchive property's value to true if you want to make playback available immediately after the broadcast ends.
-      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
-        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
-        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
-        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
-            #
-            # You need to set this value to true if you intend to have a broadcast delay for your event.
-            #
-            # Note: This property cannot be updated once the broadcast is in the testing or live state.
-      },
+      "boundStreamLastUpdateTimeMs": "A String", # The date and time that the live stream referenced by boundStreamId was last updated.
     },
     "snippet": { # The snippet object contains basic details about the event, including its title, description, start time, and end time.
       "actualEndTime": "A String", # The date and time that the broadcast actually ended. This information is only available once the broadcast's state is complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
@@ -266,7 +268,17 @@
       "totalChatCount": "A String", # The total number of live chat messages currently on the broadcast. The property and its value will be present if the broadcast is public, has the live chat feature enabled, and has at least one message. Note that this field will not be filled after the broadcast ends. So this property would not identify the number of chat messages for an archived video of a completed live broadcast.
     },
     "contentDetails": { # Detailed settings of a broadcast. # The contentDetails object contains information about the event's video content, such as whether the content can be shown in an embedded video player or if it will be archived and therefore available for viewing after the event has concluded.
+      "projection": "A String", # The projection format of this broadcast. This defaults to rectangular.
       "enableLowLatency": True or False, # Indicates whether this broadcast has low latency enabled.
+      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
+        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
+        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
+        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
+            #
+            # You need to set this value to true if you intend to have a broadcast delay for your event.
+            #
+            # Note: This property cannot be updated once the broadcast is in the testing or live state.
+      },
       "boundStreamId": "A String", # This value uniquely identifies the live stream bound to the broadcast.
       "enableEmbed": True or False, # This setting indicates whether the broadcast video can be played in an embedded player. If you choose to archive the video (using the enableArchive property), this setting will also apply to the archived video.
       "enableClosedCaptions": True or False, # This setting indicates whether HTTP POST closed captioning is enabled for this broadcast. The ingestion URL of the closed captions is returned through the liveStreams API. This is mutually exclusive with using the closed_captions_type property, and is equivalent to setting closed_captions_type to CLOSED_CAPTIONS_HTTP_POST.
@@ -283,15 +295,7 @@
           #
           #
           # Important: You must set the value to true and also set the enableArchive property's value to true if you want to make playback available immediately after the broadcast ends.
-      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
-        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
-        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
-        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
-            #
-            # You need to set this value to true if you intend to have a broadcast delay for your event.
-            #
-            # Note: This property cannot be updated once the broadcast is in the testing or live state.
-      },
+      "boundStreamLastUpdateTimeMs": "A String", # The date and time that the live stream referenced by boundStreamId was last updated.
     },
     "snippet": { # The snippet object contains basic details about the event, including its title, description, start time, and end time.
       "actualEndTime": "A String", # The date and time that the broadcast actually ended. This information is only available once the broadcast's state is complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
@@ -390,7 +394,17 @@
     "totalChatCount": "A String", # The total number of live chat messages currently on the broadcast. The property and its value will be present if the broadcast is public, has the live chat feature enabled, and has at least one message. Note that this field will not be filled after the broadcast ends. So this property would not identify the number of chat messages for an archived video of a completed live broadcast.
   },
   "contentDetails": { # Detailed settings of a broadcast. # The contentDetails object contains information about the event's video content, such as whether the content can be shown in an embedded video player or if it will be archived and therefore available for viewing after the event has concluded.
+    "projection": "A String", # The projection format of this broadcast. This defaults to rectangular.
     "enableLowLatency": True or False, # Indicates whether this broadcast has low latency enabled.
+    "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
+      "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
+      "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
+      "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
+          #
+          # You need to set this value to true if you intend to have a broadcast delay for your event.
+          #
+          # Note: This property cannot be updated once the broadcast is in the testing or live state.
+    },
     "boundStreamId": "A String", # This value uniquely identifies the live stream bound to the broadcast.
     "enableEmbed": True or False, # This setting indicates whether the broadcast video can be played in an embedded player. If you choose to archive the video (using the enableArchive property), this setting will also apply to the archived video.
     "enableClosedCaptions": True or False, # This setting indicates whether HTTP POST closed captioning is enabled for this broadcast. The ingestion URL of the closed captions is returned through the liveStreams API. This is mutually exclusive with using the closed_captions_type property, and is equivalent to setting closed_captions_type to CLOSED_CAPTIONS_HTTP_POST.
@@ -407,15 +421,7 @@
         #
         #
         # Important: You must set the value to true and also set the enableArchive property's value to true if you want to make playback available immediately after the broadcast ends.
-    "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
-      "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
-      "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
-      "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
-          #
-          # You need to set this value to true if you intend to have a broadcast delay for your event.
-          #
-          # Note: This property cannot be updated once the broadcast is in the testing or live state.
-    },
+    "boundStreamLastUpdateTimeMs": "A String", # The date and time that the live stream referenced by boundStreamId was last updated.
   },
   "snippet": { # The snippet object contains basic details about the event, including its title, description, start time, and end time.
     "actualEndTime": "A String", # The date and time that the broadcast actually ended. This information is only available once the broadcast's state is complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
@@ -497,7 +503,17 @@
       "totalChatCount": "A String", # The total number of live chat messages currently on the broadcast. The property and its value will be present if the broadcast is public, has the live chat feature enabled, and has at least one message. Note that this field will not be filled after the broadcast ends. So this property would not identify the number of chat messages for an archived video of a completed live broadcast.
     },
     "contentDetails": { # Detailed settings of a broadcast. # The contentDetails object contains information about the event's video content, such as whether the content can be shown in an embedded video player or if it will be archived and therefore available for viewing after the event has concluded.
+      "projection": "A String", # The projection format of this broadcast. This defaults to rectangular.
       "enableLowLatency": True or False, # Indicates whether this broadcast has low latency enabled.
+      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
+        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
+        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
+        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
+            #
+            # You need to set this value to true if you intend to have a broadcast delay for your event.
+            #
+            # Note: This property cannot be updated once the broadcast is in the testing or live state.
+      },
       "boundStreamId": "A String", # This value uniquely identifies the live stream bound to the broadcast.
       "enableEmbed": True or False, # This setting indicates whether the broadcast video can be played in an embedded player. If you choose to archive the video (using the enableArchive property), this setting will also apply to the archived video.
       "enableClosedCaptions": True or False, # This setting indicates whether HTTP POST closed captioning is enabled for this broadcast. The ingestion URL of the closed captions is returned through the liveStreams API. This is mutually exclusive with using the closed_captions_type property, and is equivalent to setting closed_captions_type to CLOSED_CAPTIONS_HTTP_POST.
@@ -514,15 +530,7 @@
           #
           #
           # Important: You must set the value to true and also set the enableArchive property's value to true if you want to make playback available immediately after the broadcast ends.
-      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
-        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
-        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
-        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
-            #
-            # You need to set this value to true if you intend to have a broadcast delay for your event.
-            #
-            # Note: This property cannot be updated once the broadcast is in the testing or live state.
-      },
+      "boundStreamLastUpdateTimeMs": "A String", # The date and time that the live stream referenced by boundStreamId was last updated.
     },
     "snippet": { # The snippet object contains basic details about the event, including its title, description, start time, and end time.
       "actualEndTime": "A String", # The date and time that the broadcast actually ended. This information is only available once the broadcast's state is complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
@@ -632,7 +640,17 @@
           "totalChatCount": "A String", # The total number of live chat messages currently on the broadcast. The property and its value will be present if the broadcast is public, has the live chat feature enabled, and has at least one message. Note that this field will not be filled after the broadcast ends. So this property would not identify the number of chat messages for an archived video of a completed live broadcast.
         },
         "contentDetails": { # Detailed settings of a broadcast. # The contentDetails object contains information about the event's video content, such as whether the content can be shown in an embedded video player or if it will be archived and therefore available for viewing after the event has concluded.
+          "projection": "A String", # The projection format of this broadcast. This defaults to rectangular.
           "enableLowLatency": True or False, # Indicates whether this broadcast has low latency enabled.
+          "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
+            "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
+            "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
+            "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
+                #
+                # You need to set this value to true if you intend to have a broadcast delay for your event.
+                #
+                # Note: This property cannot be updated once the broadcast is in the testing or live state.
+          },
           "boundStreamId": "A String", # This value uniquely identifies the live stream bound to the broadcast.
           "enableEmbed": True or False, # This setting indicates whether the broadcast video can be played in an embedded player. If you choose to archive the video (using the enableArchive property), this setting will also apply to the archived video.
           "enableClosedCaptions": True or False, # This setting indicates whether HTTP POST closed captioning is enabled for this broadcast. The ingestion URL of the closed captions is returned through the liveStreams API. This is mutually exclusive with using the closed_captions_type property, and is equivalent to setting closed_captions_type to CLOSED_CAPTIONS_HTTP_POST.
@@ -649,15 +667,7 @@
               #
               #
               # Important: You must set the value to true and also set the enableArchive property's value to true if you want to make playback available immediately after the broadcast ends.
-          "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
-            "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
-            "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
-            "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
-                #
-                # You need to set this value to true if you intend to have a broadcast delay for your event.
-                #
-                # Note: This property cannot be updated once the broadcast is in the testing or live state.
-          },
+          "boundStreamLastUpdateTimeMs": "A String", # The date and time that the live stream referenced by boundStreamId was last updated.
         },
         "snippet": { # The snippet object contains basic details about the event, including its title, description, start time, and end time.
           "actualEndTime": "A String", # The date and time that the broadcast actually ended. This information is only available once the broadcast's state is complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
@@ -776,7 +786,17 @@
       "totalChatCount": "A String", # The total number of live chat messages currently on the broadcast. The property and its value will be present if the broadcast is public, has the live chat feature enabled, and has at least one message. Note that this field will not be filled after the broadcast ends. So this property would not identify the number of chat messages for an archived video of a completed live broadcast.
     },
     "contentDetails": { # Detailed settings of a broadcast. # The contentDetails object contains information about the event's video content, such as whether the content can be shown in an embedded video player or if it will be archived and therefore available for viewing after the event has concluded.
+      "projection": "A String", # The projection format of this broadcast. This defaults to rectangular.
       "enableLowLatency": True or False, # Indicates whether this broadcast has low latency enabled.
+      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
+        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
+        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
+        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
+            #
+            # You need to set this value to true if you intend to have a broadcast delay for your event.
+            #
+            # Note: This property cannot be updated once the broadcast is in the testing or live state.
+      },
       "boundStreamId": "A String", # This value uniquely identifies the live stream bound to the broadcast.
       "enableEmbed": True or False, # This setting indicates whether the broadcast video can be played in an embedded player. If you choose to archive the video (using the enableArchive property), this setting will also apply to the archived video.
       "enableClosedCaptions": True or False, # This setting indicates whether HTTP POST closed captioning is enabled for this broadcast. The ingestion URL of the closed captions is returned through the liveStreams API. This is mutually exclusive with using the closed_captions_type property, and is equivalent to setting closed_captions_type to CLOSED_CAPTIONS_HTTP_POST.
@@ -793,15 +813,7 @@
           #
           #
           # Important: You must set the value to true and also set the enableArchive property's value to true if you want to make playback available immediately after the broadcast ends.
-      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
-        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
-        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
-        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
-            #
-            # You need to set this value to true if you intend to have a broadcast delay for your event.
-            #
-            # Note: This property cannot be updated once the broadcast is in the testing or live state.
-      },
+      "boundStreamLastUpdateTimeMs": "A String", # The date and time that the live stream referenced by boundStreamId was last updated.
     },
     "snippet": { # The snippet object contains basic details about the event, including its title, description, start time, and end time.
       "actualEndTime": "A String", # The date and time that the broadcast actually ended. This information is only available once the broadcast's state is complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
@@ -885,7 +897,17 @@
     "totalChatCount": "A String", # The total number of live chat messages currently on the broadcast. The property and its value will be present if the broadcast is public, has the live chat feature enabled, and has at least one message. Note that this field will not be filled after the broadcast ends. So this property would not identify the number of chat messages for an archived video of a completed live broadcast.
   },
   "contentDetails": { # Detailed settings of a broadcast. # The contentDetails object contains information about the event's video content, such as whether the content can be shown in an embedded video player or if it will be archived and therefore available for viewing after the event has concluded.
+    "projection": "A String", # The projection format of this broadcast. This defaults to rectangular.
     "enableLowLatency": True or False, # Indicates whether this broadcast has low latency enabled.
+    "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
+      "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
+      "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
+      "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
+          #
+          # You need to set this value to true if you intend to have a broadcast delay for your event.
+          #
+          # Note: This property cannot be updated once the broadcast is in the testing or live state.
+    },
     "boundStreamId": "A String", # This value uniquely identifies the live stream bound to the broadcast.
     "enableEmbed": True or False, # This setting indicates whether the broadcast video can be played in an embedded player. If you choose to archive the video (using the enableArchive property), this setting will also apply to the archived video.
     "enableClosedCaptions": True or False, # This setting indicates whether HTTP POST closed captioning is enabled for this broadcast. The ingestion URL of the closed captions is returned through the liveStreams API. This is mutually exclusive with using the closed_captions_type property, and is equivalent to setting closed_captions_type to CLOSED_CAPTIONS_HTTP_POST.
@@ -902,15 +924,7 @@
         #
         #
         # Important: You must set the value to true and also set the enableArchive property's value to true if you want to make playback available immediately after the broadcast ends.
-    "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
-      "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
-      "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
-      "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
-          #
-          # You need to set this value to true if you intend to have a broadcast delay for your event.
-          #
-          # Note: This property cannot be updated once the broadcast is in the testing or live state.
-    },
+    "boundStreamLastUpdateTimeMs": "A String", # The date and time that the live stream referenced by boundStreamId was last updated.
   },
   "snippet": { # The snippet object contains basic details about the event, including its title, description, start time, and end time.
     "actualEndTime": "A String", # The date and time that the broadcast actually ended. This information is only available once the broadcast's state is complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
@@ -992,7 +1006,17 @@
       "totalChatCount": "A String", # The total number of live chat messages currently on the broadcast. The property and its value will be present if the broadcast is public, has the live chat feature enabled, and has at least one message. Note that this field will not be filled after the broadcast ends. So this property would not identify the number of chat messages for an archived video of a completed live broadcast.
     },
     "contentDetails": { # Detailed settings of a broadcast. # The contentDetails object contains information about the event's video content, such as whether the content can be shown in an embedded video player or if it will be archived and therefore available for viewing after the event has concluded.
+      "projection": "A String", # The projection format of this broadcast. This defaults to rectangular.
       "enableLowLatency": True or False, # Indicates whether this broadcast has low latency enabled.
+      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
+        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
+        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
+        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
+            #
+            # You need to set this value to true if you intend to have a broadcast delay for your event.
+            #
+            # Note: This property cannot be updated once the broadcast is in the testing or live state.
+      },
       "boundStreamId": "A String", # This value uniquely identifies the live stream bound to the broadcast.
       "enableEmbed": True or False, # This setting indicates whether the broadcast video can be played in an embedded player. If you choose to archive the video (using the enableArchive property), this setting will also apply to the archived video.
       "enableClosedCaptions": True or False, # This setting indicates whether HTTP POST closed captioning is enabled for this broadcast. The ingestion URL of the closed captions is returned through the liveStreams API. This is mutually exclusive with using the closed_captions_type property, and is equivalent to setting closed_captions_type to CLOSED_CAPTIONS_HTTP_POST.
@@ -1009,15 +1033,7 @@
           #
           #
           # Important: You must set the value to true and also set the enableArchive property's value to true if you want to make playback available immediately after the broadcast ends.
-      "monitorStream": { # Settings and Info of the monitor stream # The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly.
-        "broadcastStreamDelayMs": 42, # If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.
-        "embedHtml": "A String", # HTML code that embeds a player that plays the monitor stream.
-        "enableMonitorStream": True or False, # This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.
-            #
-            # You need to set this value to true if you intend to have a broadcast delay for your event.
-            #
-            # Note: This property cannot be updated once the broadcast is in the testing or live state.
-      },
+      "boundStreamLastUpdateTimeMs": "A String", # The date and time that the live stream referenced by boundStreamId was last updated.
     },
     "snippet": { # The snippet object contains basic details about the event, including its title, description, start time, and end time.
       "actualEndTime": "A String", # The date and time that the broadcast actually ended. This information is only available once the broadcast's state is complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
diff --git a/docs/dyn/youtube_v3.liveChatMessages.html b/docs/dyn/youtube_v3.liveChatMessages.html
index b35fe98..79d7e58 100644
--- a/docs/dyn/youtube_v3.liveChatMessages.html
+++ b/docs/dyn/youtube_v3.liveChatMessages.html
@@ -108,6 +108,9 @@
 { # A liveChatMessage resource represents a chat message in a YouTube Live Chat.
     "snippet": { # The snippet object contains basic details about the message.
       "displayMessage": "A String", # Contains a string that can be displayed to the user. If this field is not present the message is silent, at the moment only messages of type TOMBSTONE and CHAT_ENDED_EVENT are silent.
+      "messageRetractedDetails": {
+        "retractedMessageId": "A String",
+      },
       "fanFundingEventDetails": { # Details about the funding event, this is only set if the type is 'fanFundingEvent'.
         "currency": "A String", # The currency in which the fund was made.
         "amountDisplayString": "A String", # A rendered string that displays the fund amount and currency to the user.
@@ -116,11 +119,24 @@
       },
       "hasDisplayContent": True or False, # Whether the message has display content that should be displayed to users.
       "publishedAt": "A String", # The date and time when the message was orignally published. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+      "userBannedDetails": {
+        "banDurationSeconds": "A String", # The duration of the ban. This property is only present if the banType is temporary.
+        "bannedUserDetails": { # The details of the user that was banned.
+          "channelId": "A String", # The YouTube channel ID.
+          "displayName": "A String", # The channel's display name.
+          "profileImageUrl": "A String", # The channels's avatar URL.
+          "channelUrl": "A String", # The channel's URL.
+        },
+        "banType": "A String", # The type of ban.
+      },
       "liveChatId": "A String",
-      "authorChannelId": "A String", # The ID of the user that authored this message, this field is not always filled. textMessageEvent - the user that wrote the message fanFundingEvent - the user that funded the broadcast newSponsorEvent - the user that just became a sponsor
+      "authorChannelId": "A String", # The ID of the user that authored this message, this field is not always filled. textMessageEvent - the user that wrote the message fanFundingEvent - the user that funded the broadcast newSponsorEvent - the user that just became a sponsor messageDeletedEvent - the moderator that took the action messageRetractedEvent - the author that retracted their message userBannedEvent - the moderator that took the action
       "textMessageDetails": { # Details about the text message, this is only set if the type is 'textMessageEvent'.
         "messageText": "A String", # The user's message.
       },
+      "messageDeletedDetails": {
+        "deletedMessageId": "A String",
+      },
       "type": "A String", # The type of message, this will always be present, it determines the contents of the message as well as which fields will be present.
     },
     "kind": "youtube#liveChatMessage", # Identifies what kind of resource this is. Value: the fixed string "youtube#liveChatMessage".
@@ -145,6 +161,9 @@
     { # A liveChatMessage resource represents a chat message in a YouTube Live Chat.
       "snippet": { # The snippet object contains basic details about the message.
         "displayMessage": "A String", # Contains a string that can be displayed to the user. If this field is not present the message is silent, at the moment only messages of type TOMBSTONE and CHAT_ENDED_EVENT are silent.
+        "messageRetractedDetails": {
+          "retractedMessageId": "A String",
+        },
         "fanFundingEventDetails": { # Details about the funding event, this is only set if the type is 'fanFundingEvent'.
           "currency": "A String", # The currency in which the fund was made.
           "amountDisplayString": "A String", # A rendered string that displays the fund amount and currency to the user.
@@ -153,11 +172,24 @@
         },
         "hasDisplayContent": True or False, # Whether the message has display content that should be displayed to users.
         "publishedAt": "A String", # The date and time when the message was orignally published. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+        "userBannedDetails": {
+          "banDurationSeconds": "A String", # The duration of the ban. This property is only present if the banType is temporary.
+          "bannedUserDetails": { # The details of the user that was banned.
+            "channelId": "A String", # The YouTube channel ID.
+            "displayName": "A String", # The channel's display name.
+            "profileImageUrl": "A String", # The channels's avatar URL.
+            "channelUrl": "A String", # The channel's URL.
+          },
+          "banType": "A String", # The type of ban.
+        },
         "liveChatId": "A String",
-        "authorChannelId": "A String", # The ID of the user that authored this message, this field is not always filled. textMessageEvent - the user that wrote the message fanFundingEvent - the user that funded the broadcast newSponsorEvent - the user that just became a sponsor
+        "authorChannelId": "A String", # The ID of the user that authored this message, this field is not always filled. textMessageEvent - the user that wrote the message fanFundingEvent - the user that funded the broadcast newSponsorEvent - the user that just became a sponsor messageDeletedEvent - the moderator that took the action messageRetractedEvent - the author that retracted their message userBannedEvent - the moderator that took the action
         "textMessageDetails": { # Details about the text message, this is only set if the type is 'textMessageEvent'.
           "messageText": "A String", # The user's message.
         },
+        "messageDeletedDetails": {
+          "deletedMessageId": "A String",
+        },
         "type": "A String", # The type of message, this will always be present, it determines the contents of the message as well as which fields will be present.
       },
       "kind": "youtube#liveChatMessage", # Identifies what kind of resource this is. Value: the fixed string "youtube#liveChatMessage".
@@ -202,6 +234,9 @@
       { # A liveChatMessage resource represents a chat message in a YouTube Live Chat.
           "snippet": { # The snippet object contains basic details about the message.
             "displayMessage": "A String", # Contains a string that can be displayed to the user. If this field is not present the message is silent, at the moment only messages of type TOMBSTONE and CHAT_ENDED_EVENT are silent.
+            "messageRetractedDetails": {
+              "retractedMessageId": "A String",
+            },
             "fanFundingEventDetails": { # Details about the funding event, this is only set if the type is 'fanFundingEvent'.
               "currency": "A String", # The currency in which the fund was made.
               "amountDisplayString": "A String", # A rendered string that displays the fund amount and currency to the user.
@@ -210,11 +245,24 @@
             },
             "hasDisplayContent": True or False, # Whether the message has display content that should be displayed to users.
             "publishedAt": "A String", # The date and time when the message was orignally published. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.
+            "userBannedDetails": {
+              "banDurationSeconds": "A String", # The duration of the ban. This property is only present if the banType is temporary.
+              "bannedUserDetails": { # The details of the user that was banned.
+                "channelId": "A String", # The YouTube channel ID.
+                "displayName": "A String", # The channel's display name.
+                "profileImageUrl": "A String", # The channels's avatar URL.
+                "channelUrl": "A String", # The channel's URL.
+              },
+              "banType": "A String", # The type of ban.
+            },
             "liveChatId": "A String",
-            "authorChannelId": "A String", # The ID of the user that authored this message, this field is not always filled. textMessageEvent - the user that wrote the message fanFundingEvent - the user that funded the broadcast newSponsorEvent - the user that just became a sponsor
+            "authorChannelId": "A String", # The ID of the user that authored this message, this field is not always filled. textMessageEvent - the user that wrote the message fanFundingEvent - the user that funded the broadcast newSponsorEvent - the user that just became a sponsor messageDeletedEvent - the moderator that took the action messageRetractedEvent - the author that retracted their message userBannedEvent - the moderator that took the action
             "textMessageDetails": { # Details about the text message, this is only set if the type is 'textMessageEvent'.
               "messageText": "A String", # The user's message.
             },
+            "messageDeletedDetails": {
+              "deletedMessageId": "A String",
+            },
             "type": "A String", # The type of message, this will always be present, it determines the contents of the message as well as which fields will be present.
           },
           "kind": "youtube#liveChatMessage", # Identifies what kind of resource this is. Value: the fixed string "youtube#liveChatMessage".
diff --git a/docs/dyn/youtube_v3.liveStreams.html b/docs/dyn/youtube_v3.liveStreams.html
index 2c31189..65620a3 100644
--- a/docs/dyn/youtube_v3.liveStreams.html
+++ b/docs/dyn/youtube_v3.liveStreams.html
@@ -155,6 +155,8 @@
             #
             # STREAM_URL/STREAM_NAME
       },
+      "frameRate": "A String", # The frame rate of the inbound video data.
+      "resolution": "A String", # The resolution of the inbound video data.
       "format": "A String", # The format of the video stream that you are sending to Youtube.
     },
     "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
@@ -217,6 +219,8 @@
               #
               # STREAM_URL/STREAM_NAME
         },
+        "frameRate": "A String", # The frame rate of the inbound video data.
+        "resolution": "A String", # The resolution of the inbound video data.
         "format": "A String", # The format of the video stream that you are sending to Youtube.
       },
       "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
@@ -296,6 +300,8 @@
                   #
                   # STREAM_URL/STREAM_NAME
             },
+            "frameRate": "A String", # The frame rate of the inbound video data.
+            "resolution": "A String", # The resolution of the inbound video data.
             "format": "A String", # The format of the video stream that you are sending to Youtube.
           },
           "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
@@ -384,6 +390,8 @@
             #
             # STREAM_URL/STREAM_NAME
       },
+      "frameRate": "A String", # The frame rate of the inbound video data.
+      "resolution": "A String", # The resolution of the inbound video data.
       "format": "A String", # The format of the video stream that you are sending to Youtube.
     },
     "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
@@ -446,6 +454,8 @@
               #
               # STREAM_URL/STREAM_NAME
         },
+        "frameRate": "A String", # The frame rate of the inbound video data.
+        "resolution": "A String", # The resolution of the inbound video data.
         "format": "A String", # The format of the video stream that you are sending to Youtube.
       },
       "snippet": { # The snippet object contains basic details about the stream, including its channel, title, and description.
diff --git a/docs/dyn/youtube_v3.videos.html b/docs/dyn/youtube_v3.videos.html
index 2c4c1e2..8e1e4c1 100644
--- a/docs/dyn/youtube_v3.videos.html
+++ b/docs/dyn/youtube_v3.videos.html
@@ -229,6 +229,7 @@
     },
     "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
       "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+      "projection": "A String", # Specifies the projection format of the video.
       "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
         "exception": [ # A list of region codes that identify countries where the default policy do not apply.
           "A String",
@@ -534,6 +535,7 @@
       },
       "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
         "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+        "projection": "A String", # Specifies the projection format of the video.
         "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
           "exception": [ # A list of region codes that identify countries where the default policy do not apply.
             "A String",
@@ -865,6 +867,7 @@
           },
           "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
             "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+            "projection": "A String", # Specifies the projection format of the video.
             "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
               "exception": [ # A list of region codes that identify countries where the default policy do not apply.
                 "A String",
@@ -1228,6 +1231,7 @@
     },
     "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
       "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+      "projection": "A String", # Specifies the projection format of the video.
       "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
         "exception": [ # A list of region codes that identify countries where the default policy do not apply.
           "A String",
@@ -1524,6 +1528,7 @@
       },
       "contentDetails": { # Details about the content of a YouTube Video. # The contentDetails object contains information about the video content, including the length of the video and its aspect ratio.
         "definition": "A String", # The value of definition indicates whether the video is available in high definition or only in standard definition.
+        "projection": "A String", # Specifies the projection format of the video.
         "countryRestriction": { # Rights management policy for YouTube resources. # The countryRestriction object contains information about the countries where a video is (or is not) viewable.
           "exception": [ # A list of region codes that identify countries where the default policy do not apply.
             "A String",
diff --git a/docs/dyn/youtubereporting_v1.jobs.html b/docs/dyn/youtubereporting_v1.jobs.html
index a60d526..a4cba0e 100644
--- a/docs/dyn/youtubereporting_v1.jobs.html
+++ b/docs/dyn/youtubereporting_v1.jobs.html
@@ -89,7 +89,7 @@
   <code><a href="#get">get(jobId, onBehalfOfContentOwner=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Gets a job.</p>
 <p class="toc_element">
-  <code><a href="#list">list(onBehalfOfContentOwner=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+  <code><a href="#list">list(onBehalfOfContentOwner=None, pageSize=None, pageToken=None, x__xgafv=None, includeSystemManaged=None)</a></code></p>
 <p class="firstline">Lists jobs.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
@@ -104,10 +104,12 @@
     The object takes the form of:
 
 { # A job creating reports of a specific type.
-    "reportTypeId": "A String", # The type of reports this job creates. Corresponds to the ID of a ReportType.
-    "id": "A String", # The server-generated ID of the job (max. 40 characters).
+    "name": "A String", # The name of the job (max. 100 characters).
     "createTime": "A String", # The creation date/time of the job.
-    "name": "A String", # The name of the job (max. 100 characters). TODO(lanthaler) Clarify what this will actually be used for
+    "expireTime": "A String", # The date/time when this job will expire/expired. After a job expired, no new reports are generated.
+    "reportTypeId": "A String", # The type of reports this job creates. Corresponds to the ID of a ReportType.
+    "systemManaged": True or False, # True if this a system-managed job that cannot be modified by the user; otherwise false.
+    "id": "A String", # The server-generated ID of the job (max. 40 characters).
   }
 
   onBehalfOfContentOwner: string, The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
@@ -117,10 +119,12 @@
   An object of the form:
 
     { # A job creating reports of a specific type.
-      "reportTypeId": "A String", # The type of reports this job creates. Corresponds to the ID of a ReportType.
-      "id": "A String", # The server-generated ID of the job (max. 40 characters).
+      "name": "A String", # The name of the job (max. 100 characters).
       "createTime": "A String", # The creation date/time of the job.
-      "name": "A String", # The name of the job (max. 100 characters). TODO(lanthaler) Clarify what this will actually be used for
+      "expireTime": "A String", # The date/time when this job will expire/expired. After a job expired, no new reports are generated.
+      "reportTypeId": "A String", # The type of reports this job creates. Corresponds to the ID of a ReportType.
+      "systemManaged": True or False, # True if this a system-managed job that cannot be modified by the user; otherwise false.
+      "id": "A String", # The server-generated ID of the job (max. 40 characters).
     }</pre>
 </div>
 
@@ -153,15 +157,17 @@
   An object of the form:
 
     { # A job creating reports of a specific type.
-      "reportTypeId": "A String", # The type of reports this job creates. Corresponds to the ID of a ReportType.
-      "id": "A String", # The server-generated ID of the job (max. 40 characters).
+      "name": "A String", # The name of the job (max. 100 characters).
       "createTime": "A String", # The creation date/time of the job.
-      "name": "A String", # The name of the job (max. 100 characters). TODO(lanthaler) Clarify what this will actually be used for
+      "expireTime": "A String", # The date/time when this job will expire/expired. After a job expired, no new reports are generated.
+      "reportTypeId": "A String", # The type of reports this job creates. Corresponds to the ID of a ReportType.
+      "systemManaged": True or False, # True if this a system-managed job that cannot be modified by the user; otherwise false.
+      "id": "A String", # The server-generated ID of the job (max. 40 characters).
     }</pre>
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(onBehalfOfContentOwner=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+    <code class="details" id="list">list(onBehalfOfContentOwner=None, pageSize=None, pageToken=None, x__xgafv=None, includeSystemManaged=None)</code>
   <pre>Lists jobs.
 
 Args:
@@ -169,6 +175,7 @@
   pageSize: integer, Requested page size. Server may return fewer jobs than requested. If unspecified, server will pick an appropriate default.
   pageToken: string, A token identifying a page of results the server should return. Typically, this is the value of ListReportTypesResponse.next_page_token returned in response to the previous call to the `ListJobs` method.
   x__xgafv: string, V1 error format.
+  includeSystemManaged: boolean, If set to true, also system-managed jobs will be returned; otherwise only user-created jobs will be returned. System-managed jobs can neither be modified nor deleted.
 
 Returns:
   An object of the form:
@@ -177,10 +184,12 @@
     "nextPageToken": "A String", # A token to retrieve next page of results. Pass this value in the ListJobsRequest.page_token field in the subsequent call to `ListJobs` method to retrieve the next page of results.
     "jobs": [ # The list of jobs.
       { # A job creating reports of a specific type.
-          "reportTypeId": "A String", # The type of reports this job creates. Corresponds to the ID of a ReportType.
-          "id": "A String", # The server-generated ID of the job (max. 40 characters).
+          "name": "A String", # The name of the job (max. 100 characters).
           "createTime": "A String", # The creation date/time of the job.
-          "name": "A String", # The name of the job (max. 100 characters). TODO(lanthaler) Clarify what this will actually be used for
+          "expireTime": "A String", # The date/time when this job will expire/expired. After a job expired, no new reports are generated.
+          "reportTypeId": "A String", # The type of reports this job creates. Corresponds to the ID of a ReportType.
+          "systemManaged": True or False, # True if this a system-managed job that cannot be modified by the user; otherwise false.
+          "id": "A String", # The server-generated ID of the job (max. 40 characters).
         },
     ],
   }</pre>
diff --git a/docs/dyn/youtubereporting_v1.jobs.reports.html b/docs/dyn/youtubereporting_v1.jobs.reports.html
index f493a80..c1aaba7 100644
--- a/docs/dyn/youtubereporting_v1.jobs.reports.html
+++ b/docs/dyn/youtubereporting_v1.jobs.reports.html
@@ -78,7 +78,7 @@
   <code><a href="#get">get(jobId, reportId, onBehalfOfContentOwner=None, x__xgafv=None)</a></code></p>
 <p class="firstline">Gets the metadata of a specific report.</p>
 <p class="toc_element">
-  <code><a href="#list">list(jobId, onBehalfOfContentOwner=None, pageSize=None, x__xgafv=None, createdAfter=None, pageToken=None)</a></code></p>
+  <code><a href="#list">list(jobId, pageSize=None, startTimeAtOrAfter=None, x__xgafv=None, onBehalfOfContentOwner=None, pageToken=None, createdAfter=None, startTimeBefore=None)</a></code></p>
 <p class="firstline">Lists reports created by a specific job. Returns NOT_FOUND if the job does not exist.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
@@ -98,9 +98,10 @@
   An object of the form:
 
     { # A report's metadata including the URL from which the report itself can be downloaded.
-    "jobId": "A String", # The ID of the job that created this report.
-    "id": "A String", # The server-generated ID of the report.
     "downloadUrl": "A String", # The URL from which the report can be downloaded (max. 1000 characters).
+    "jobExpireTime": "A String", # The date/time when the job this report belongs to will expire/expired.
+    "id": "A String", # The server-generated ID of the report.
+    "jobId": "A String", # The ID of the job that created this report.
     "startTime": "A String", # The start of the time period that the report instance covers. The value is inclusive.
     "endTime": "A String", # The end of the time period that the report instance covers. The value is exclusive.
     "createTime": "A String", # The date/time when this report was created.
@@ -108,16 +109,18 @@
 </div>
 
 <div class="method">
-    <code class="details" id="list">list(jobId, onBehalfOfContentOwner=None, pageSize=None, x__xgafv=None, createdAfter=None, pageToken=None)</code>
+    <code class="details" id="list">list(jobId, pageSize=None, startTimeAtOrAfter=None, x__xgafv=None, onBehalfOfContentOwner=None, pageToken=None, createdAfter=None, startTimeBefore=None)</code>
   <pre>Lists reports created by a specific job. Returns NOT_FOUND if the job does not exist.
 
 Args:
   jobId: string, The ID of the job. (required)
-  onBehalfOfContentOwner: string, The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
   pageSize: integer, Requested page size. Server may return fewer report types than requested. If unspecified, server will pick an appropriate default.
+  startTimeAtOrAfter: string, If set, only reports whose start time is greater than or equal the specified date/time are returned.
   x__xgafv: string, V1 error format.
-  createdAfter: string, If set, only reports created after the specified date/time are returned.
+  onBehalfOfContentOwner: string, The content owner's external ID on which behalf the user is acting on. If not set, the user is acting for himself (his own channel).
   pageToken: string, A token identifying a page of results the server should return. Typically, this is the value of ListReportsResponse.next_page_token returned in response to the previous call to the `ListReports` method.
+  createdAfter: string, If set, only reports created after the specified date/time are returned.
+  startTimeBefore: string, If set, only reports whose start time is smaller than the specified date/time are returned.
 
 Returns:
   An object of the form:
@@ -126,9 +129,10 @@
     "nextPageToken": "A String", # A token to retrieve next page of results. Pass this value in the ListReportsRequest.page_token field in the subsequent call to `ListReports` method to retrieve the next page of results.
     "reports": [ # The list of report types.
       { # A report's metadata including the URL from which the report itself can be downloaded.
-        "jobId": "A String", # The ID of the job that created this report.
-        "id": "A String", # The server-generated ID of the report.
         "downloadUrl": "A String", # The URL from which the report can be downloaded (max. 1000 characters).
+        "jobExpireTime": "A String", # The date/time when the job this report belongs to will expire/expired.
+        "id": "A String", # The server-generated ID of the report.
+        "jobId": "A String", # The ID of the job that created this report.
         "startTime": "A String", # The start of the time period that the report instance covers. The value is inclusive.
         "endTime": "A String", # The end of the time period that the report instance covers. The value is exclusive.
         "createTime": "A String", # The date/time when this report was created.
diff --git a/docs/dyn/youtubereporting_v1.media.html b/docs/dyn/youtubereporting_v1.media.html
index 834b17b..555cb68 100644
--- a/docs/dyn/youtubereporting_v1.media.html
+++ b/docs/dyn/youtubereporting_v1.media.html
@@ -86,7 +86,7 @@
   <pre>Method for media download. Download is supported on the URI `/v1/media/{+name}?alt=media`.
 
 Args:
-  resourceName: string, Name of the media that is being downloaded. See [][ByteStream.ReadRequest.resource_name]. (required)
+  resourceName: string, Name of the media that is being downloaded. See ReadRequest.resource_name. (required)
   x__xgafv: string, V1 error format.
 
 Returns:
@@ -102,7 +102,7 @@
   <pre>Method for media download. Download is supported on the URI `/v1/media/{+name}?alt=media`.
 
 Args:
-  resourceName: string, Name of the media that is being downloaded. See [][ByteStream.ReadRequest.resource_name]. (required)
+  resourceName: string, Name of the media that is being downloaded. See ReadRequest.resource_name. (required)
   x__xgafv: string, V1 error format.
 
 Returns:
diff --git a/docs/dyn/youtubereporting_v1.reportTypes.html b/docs/dyn/youtubereporting_v1.reportTypes.html
index e7492d2..314f1c6 100644
--- a/docs/dyn/youtubereporting_v1.reportTypes.html
+++ b/docs/dyn/youtubereporting_v1.reportTypes.html
@@ -75,14 +75,14 @@
 <h1><a href="youtubereporting_v1.html">YouTube Reporting API</a> . <a href="youtubereporting_v1.reportTypes.html">reportTypes</a></h1>
 <h2>Instance Methods</h2>
 <p class="toc_element">
-  <code><a href="#list">list(onBehalfOfContentOwner=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
+  <code><a href="#list">list(onBehalfOfContentOwner=None, pageSize=None, pageToken=None, x__xgafv=None, includeSystemManaged=None)</a></code></p>
 <p class="firstline">Lists report types.</p>
 <p class="toc_element">
   <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
 <p class="firstline">Retrieves the next page of results.</p>
 <h3>Method Details</h3>
 <div class="method">
-    <code class="details" id="list">list(onBehalfOfContentOwner=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
+    <code class="details" id="list">list(onBehalfOfContentOwner=None, pageSize=None, pageToken=None, x__xgafv=None, includeSystemManaged=None)</code>
   <pre>Lists report types.
 
 Args:
@@ -90,6 +90,7 @@
   pageSize: integer, Requested page size. Server may return fewer report types than requested. If unspecified, server will pick an appropriate default.
   pageToken: string, A token identifying a page of results the server should return. Typically, this is the value of ListReportTypesResponse.next_page_token returned in response to the previous call to the `ListReportTypes` method.
   x__xgafv: string, V1 error format.
+  includeSystemManaged: boolean, If set to true, also system-managed report types will be returned; otherwise only the report types that can be used to create new reporting jobs will be returned.
 
 Returns:
   An object of the form:
@@ -98,6 +99,8 @@
     "nextPageToken": "A String", # A token to retrieve next page of results. Pass this value in the ListReportTypesRequest.page_token field in the subsequent call to `ListReportTypes` method to retrieve the next page of results.
     "reportTypes": [ # The list of report types.
       { # A report type.
+        "deprecateTime": "A String", # The date/time when this report type was/will be deprecated.
+        "systemManaged": True or False, # True if this a system-managed report type; otherwise false. Reporting jobs for system-managed report types are created automatically and can thus not be used in the `CreateJob` method.
         "id": "A String", # The ID of the report type (max. 100 characters).
         "name": "A String", # The name of the report type (max. 100 characters).
       },
diff --git a/docs/epy/api-objects.txt b/docs/epy/api-objects.txt
index 3c78fa4..8a49d3d 100644
--- a/docs/epy/api-objects.txt
+++ b/docs/epy/api-objects.txt
@@ -18,11 +18,12 @@
 googleapiclient.discovery._fix_up_parameters	googleapiclient.discovery-module.html#_fix_up_parameters
 googleapiclient.discovery.HTTP_PAYLOAD_METHODS	googleapiclient.discovery-module.html#HTTP_PAYLOAD_METHODS
 googleapiclient.discovery._media_path_url_from_info	googleapiclient.discovery-module.html#_media_path_url_from_info
-googleapiclient.discovery._fix_up_media_upload	googleapiclient.discovery-module.html#_fix_up_media_upload
+googleapiclient.discovery.V1_DISCOVERY_URI	googleapiclient.discovery-module.html#V1_DISCOVERY_URI
 googleapiclient.discovery.build	googleapiclient.discovery-module.html#build
 googleapiclient.discovery.key2param	googleapiclient.discovery-module.html#key2param
 googleapiclient.discovery.VARNAME	googleapiclient.discovery-module.html#VARNAME
 googleapiclient.discovery.createNextMethod	googleapiclient.discovery-module.html#createNextMethod
+googleapiclient.discovery._fix_up_media_upload	googleapiclient.discovery-module.html#_fix_up_media_upload
 googleapiclient.discovery.logger	googleapiclient.discovery-module.html#logger
 googleapiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE	googleapiclient.discovery-module.html#BODY_PARAMETER_DEFAULT_VALUE
 googleapiclient.discovery._media_size_to_long	googleapiclient.discovery-module.html#_media_size_to_long
@@ -33,30 +34,37 @@
 googleapiclient.discovery.DEFAULT_METHOD_DOC	googleapiclient.discovery-module.html#DEFAULT_METHOD_DOC
 googleapiclient.discovery.RESERVED_WORDS	googleapiclient.discovery-module.html#RESERVED_WORDS
 googleapiclient.discovery.build_from_document	googleapiclient.discovery-module.html#build_from_document
+googleapiclient.discovery.V2_DISCOVERY_URI	googleapiclient.discovery-module.html#V2_DISCOVERY_URI
 googleapiclient.discovery.fix_method_name	googleapiclient.discovery-module.html#fix_method_name
 googleapiclient.discovery.STACK_QUERY_PARAMETERS	googleapiclient.discovery-module.html#STACK_QUERY_PARAMETERS
 googleapiclient.discovery.DISCOVERY_URI	googleapiclient.discovery-module.html#DISCOVERY_URI
 googleapiclient.discovery.URITEMPLATE	googleapiclient.discovery-module.html#URITEMPLATE
 googleapiclient.discovery_cache	googleapiclient.discovery_cache-module.html
-googleapiclient.discovery_cache.autodetect	googleapiclient.discovery_cache-module.html#autodetect
+googleapiclient.discovery_cache.LOGGER	googleapiclient.discovery_cache-module.html#LOGGER
 googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE	googleapiclient.discovery_cache-module.html#DISCOVERY_DOC_MAX_AGE
+googleapiclient.discovery_cache.autodetect	googleapiclient.discovery_cache-module.html#autodetect
 googleapiclient.discovery_cache.appengine_memcache	googleapiclient.discovery_cache.appengine_memcache-module.html
 googleapiclient.discovery_cache.appengine_memcache.cache	googleapiclient.discovery_cache.appengine_memcache-module.html#cache
 googleapiclient.discovery_cache.appengine_memcache.NAMESPACE	googleapiclient.discovery_cache.appengine_memcache-module.html#NAMESPACE
+googleapiclient.discovery_cache.appengine_memcache.LOGGER	googleapiclient.discovery_cache.appengine_memcache-module.html#LOGGER
 googleapiclient.discovery_cache.base	googleapiclient.discovery_cache.base-module.html
 googleapiclient.discovery_cache.file_cache	googleapiclient.discovery_cache.file_cache-module.html
 googleapiclient.discovery_cache.file_cache._to_timestamp	googleapiclient.discovery_cache.file_cache-module.html#_to_timestamp
 googleapiclient.discovery_cache.file_cache._read_or_initialize_cache	googleapiclient.discovery_cache.file_cache-module.html#_read_or_initialize_cache
 googleapiclient.discovery_cache.file_cache.cache	googleapiclient.discovery_cache.file_cache-module.html#cache
 googleapiclient.discovery_cache.file_cache.EPOCH	googleapiclient.discovery_cache.file_cache-module.html#EPOCH
-googleapiclient.discovery_cache.file_cache.logger	googleapiclient.discovery_cache.file_cache-module.html#logger
+googleapiclient.discovery_cache.file_cache.LOGGER	googleapiclient.discovery_cache.file_cache-module.html#LOGGER
 googleapiclient.discovery_cache.file_cache.FILENAME	googleapiclient.discovery_cache.file_cache-module.html#FILENAME
 googleapiclient.errors	googleapiclient.errors-module.html
 googleapiclient.http	googleapiclient.http-module.html
+googleapiclient.http._TOO_MANY_REQUESTS	googleapiclient.http-module.html#_TOO_MANY_REQUESTS
 googleapiclient.http.set_user_agent	googleapiclient.http-module.html#set_user_agent
 googleapiclient.http.tunnel_patch	googleapiclient.http-module.html#tunnel_patch
 googleapiclient.http._retry_request	googleapiclient.http-module.html#_retry_request
 googleapiclient.http.DEFAULT_CHUNK_SIZE	googleapiclient.http-module.html#DEFAULT_CHUNK_SIZE
+googleapiclient.http.LOGGER	googleapiclient.http-module.html#LOGGER
+googleapiclient.http._should_retry_response	googleapiclient.http-module.html#_should_retry_response
+googleapiclient.http._ssl_SSLError	googleapiclient.http-module.html#_ssl_SSLError
 googleapiclient.http.MAX_URI_LENGTH	googleapiclient.http-module.html#MAX_URI_LENGTH
 googleapiclient.mimeparse	googleapiclient.mimeparse-module.html
 googleapiclient.mimeparse.__credits__	googleapiclient.mimeparse-module.html#__credits__
@@ -71,10 +79,13 @@
 googleapiclient.model	googleapiclient.model-module.html
 googleapiclient.model._abstract	googleapiclient.model-module.html#_abstract
 googleapiclient.model.dump_request_response	googleapiclient.model-module.html#dump_request_response
+googleapiclient.model.LOGGER	googleapiclient.model-module.html#LOGGER
 googleapiclient.model.makepatch	googleapiclient.model-module.html#makepatch
 googleapiclient.sample_tools	googleapiclient.sample_tools-module.html
 googleapiclient.sample_tools.init	googleapiclient.sample_tools-module.html#init
 googleapiclient.schema	googleapiclient.schema-module.html
+googleapiclient.NullHandler	googleapiclient.NullHandler-class.html
+googleapiclient.NullHandler.emit	googleapiclient.NullHandler-class.html#emit
 googleapiclient.channel.Channel	googleapiclient.channel.Channel-class.html
 googleapiclient.channel.Channel.body	googleapiclient.channel.Channel-class.html#body
 googleapiclient.channel.Channel.update	googleapiclient.channel.Channel-class.html#update
diff --git a/docs/epy/class-tree.html b/docs/epy/class-tree.html
index 5c5bca9..d04fff1 100644
--- a/docs/epy/class-tree.html
+++ b/docs/epy/class-tree.html
@@ -82,6 +82,10 @@
     <li> <strong class="uidlink"><a href="googleapiclient.channel.Channel-class.html">googleapiclient.channel.Channel</a></strong>:
       <em class="summary">A Channel for notifications.</em>
     </li>
+    <li> <strong class="uidlink">logging.Filterer</strong>:
+      <em class="summary">A base class for loggers and handlers which allows them to share
+common code.</em>
+    </li>
     <li> <strong class="uidlink"><a href="googleapiclient.http.HttpMock-class.html">googleapiclient.http.HttpMock</a></strong>:
       <em class="summary">Mock of httplib2.Http</em>
     </li>
@@ -159,7 +163,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient-module.html b/docs/epy/googleapiclient-module.html
index 7215820..3cd6ea9 100644
--- a/docs/epy/googleapiclient-module.html
+++ b/docs/epy/googleapiclient-module.html
@@ -57,7 +57,7 @@
 <h1 class="epydoc">Package googleapiclient</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient-pysrc.html">source&nbsp;code</a></span></p>
 <hr />
 <div class="fields">      <p><strong>Version:</strong>
-        1.5.0
+        1.5.1
       </p>
 </div><!-- ==================== SUBMODULES ==================== -->
 <a name="section-Submodules"></a>
@@ -97,6 +97,31 @@
 </table>
 
 <br />
+<!-- ==================== CLASSES ==================== -->
+<a name="section-Classes"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Classes</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Classes"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="googleapiclient.NullHandler-class.html" class="summary-name">NullHandler</a>
+    </td>
+  </tr>
+</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -123,7 +148,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient-pysrc.html b/docs/epy/googleapiclient-pysrc.html
index 814b376..721b6b4 100644
--- a/docs/epy/googleapiclient-pysrc.html
+++ b/docs/epy/googleapiclient-pysrc.html
@@ -69,8 +69,20 @@
 <a name="L12"></a><tt class="py-lineno">12</tt>  <tt class="py-line"><tt class="py-comment"># See the License for the specific language governing permissions and</tt> </tt>
 <a name="L13"></a><tt class="py-lineno">13</tt>  <tt class="py-line"><tt class="py-comment"># limitations under the License.</tt> </tt>
 <a name="L14"></a><tt class="py-lineno">14</tt>  <tt class="py-line"> </tt>
-<a name="L15"></a><tt class="py-lineno">15</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-docstring">"1.5.0"</tt> </tt>
-<a name="L16"></a><tt class="py-lineno">16</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<a name="L15"></a><tt class="py-lineno">15</tt>  <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-docstring">"1.5.1"</tt> </tt>
+<a name="L16"></a><tt class="py-lineno">16</tt>  <tt class="py-line"> </tt>
+<a name="L17"></a><tt class="py-lineno">17</tt>  <tt class="py-line"><tt class="py-comment"># Set default logging handler to avoid "No handler found" warnings.</tt> </tt>
+<a name="L18"></a><tt class="py-lineno">18</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L19"></a><tt class="py-lineno">19</tt>  <tt class="py-line"> </tt>
+<a name="L20"></a><tt class="py-lineno">20</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt>  <tt class="py-comment"># Python 2.7+</tt> </tt>
+<a name="L21"></a><tt class="py-lineno">21</tt>  <tt class="py-line">    <tt class="py-keyword">from</tt> <tt class="py-name">logging</tt> <tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Class googleapiclient.NullHandler=googleapiclient.NullHandler-class.html"><a title="googleapiclient.NullHandler" class="py-name" href="#" onclick="return doclink('link-0', 'NullHandler', 'link-0');">NullHandler</a></tt> </tt>
+<a name="L22"></a><tt class="py-lineno">22</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="NullHandler"></a><div id="NullHandler-def"><a name="L23"></a><tt class="py-lineno">23</tt> <a class="py-toggle" href="#" id="NullHandler-toggle" onclick="return toggle('NullHandler');">-</a><tt class="py-line">    <tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.NullHandler-class.html">NullHandler</a><tt class="py-op">(</tt><tt class="py-base-class">logging</tt><tt class="py-op">.</tt><tt class="py-base-class">Handler</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NullHandler-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="NullHandler-expanded"><a name="NullHandler.emit"></a><div id="NullHandler.emit-def"><a name="L24"></a><tt class="py-lineno">24</tt> <a class="py-toggle" href="#" id="NullHandler.emit-toggle" onclick="return toggle('NullHandler.emit');">-</a><tt class="py-line">        <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.NullHandler-class.html#emit">emit</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">record</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="NullHandler.emit-collapsed" style="display:none;" pad="++" indent="++++++++++++++++"></div><div id="NullHandler.emit-expanded"><a name="L25"></a><tt class="py-lineno">25</tt>  <tt class="py-line">            <tt class="py-keyword">pass</tt> </tt>
+</div></div><a name="L26"></a><tt class="py-lineno">26</tt>  <tt class="py-line"> </tt>
+<a name="L27"></a><tt class="py-lineno">27</tt>  <tt class="py-line"><tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">addHandler</tt><tt class="py-op">(</tt><tt id="link-1" class="py-name"><a title="googleapiclient.NullHandler" class="py-name" href="#" onclick="return doclink('link-1', 'NullHandler', 'link-0');">NullHandler</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L28"></a><tt class="py-lineno">28</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -103,7 +115,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.NullHandler-class.html b/docs/epy/googleapiclient.NullHandler-class.html
new file mode 100644
index 0000000..900a933
--- /dev/null
+++ b/docs/epy/googleapiclient.NullHandler-class.html
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="ascii"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>googleapiclient.NullHandler</title>
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />
+  <script type="text/javascript" src="epydoc.js"></script>
+</head>
+
+<body bgcolor="white" text="black" link="blue" vlink="#204080"
+      alink="#204080">
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="googleapiclient-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table width="100%" cellpadding="0" cellspacing="0">
+  <tr valign="top">
+    <td width="100%">
+      <span class="breadcrumbs">
+        <a href="googleapiclient-module.html">Package&nbsp;googleapiclient</a> ::
+        Class&nbsp;NullHandler
+      </span>
+    </td>
+    <td>
+      <table cellpadding="0" cellspacing="0">
+        <!-- hide/show private -->
+        <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink"
+    onclick="toggle_private();">hide&nbsp;private</a>]</span></td></tr>
+        <tr><td align="right"><span class="options"
+            >[<a href="frames.html" target="_top">frames</a
+            >]&nbsp;|&nbsp;<a href="googleapiclient.NullHandler-class.html"
+            target="_top">no&nbsp;frames</a>]</span></td></tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS DESCRIPTION ==================== -->
+<h1 class="epydoc">Class NullHandler</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient-pysrc.html#NullHandler">source&nbsp;code</a></span></p>
+<center>
+<center>  <map id="uml_class_diagram_for_googleap" name="uml_class_diagram_for_googleap">
+<area shape="rect" id="node1_18" href="googleapiclient.NullHandler-class.html#emit" title="Do whatever it takes to actually log the specified logging record." alt="" coords="54,460,159,479"/>
+<area shape="rect" id="node1" href="googleapiclient.NullHandler-class.html" title="googleapiclient.NullHandler" alt="" coords="41,429,171,485"/>
+<area shape="rect" id="node2_19" href="javascript:void(0);" title="logging.Handler.name" alt="" coords="18,140,195,159"/>
+<area shape="rect" id="node2_20" href="javascript:void(0);" title="Initializes the instance &#45; basically setting the formatter to None and the filter list to empty." alt="" coords="18,161,195,180"/>
+<area shape="rect" id="node2_21" href="javascript:void(0);" title="logging.Handler.get_name" alt="" coords="18,180,195,199"/>
+<area shape="rect" id="node2_22" href="javascript:void(0);" title="logging.Handler.set_name" alt="" coords="18,199,195,217"/>
+<area shape="rect" id="node2_23" href="javascript:void(0);" title="Acquire a thread lock for serializing access to the underlying I/O." alt="" coords="18,217,195,236"/>
+<area shape="rect" id="node2_24" href="javascript:void(0);" title="Acquire the I/O thread lock." alt="" coords="18,236,195,255"/>
+<area shape="rect" id="node2_25" href="javascript:void(0);" title="Release the I/O thread lock." alt="" coords="18,255,195,273"/>
+<area shape="rect" id="node2_26" href="javascript:void(0);" title="Set the logging level of this handler." alt="" coords="18,273,195,292"/>
+<area shape="rect" id="node2_27" href="javascript:void(0);" title="Format the specified record." alt="" coords="18,292,195,311"/>
+<area shape="rect" id="node2_28" href="javascript:void(0);" title="Conditionally emit the specified logging record." alt="" coords="18,311,195,329"/>
+<area shape="rect" id="node2_29" href="javascript:void(0);" title="Set the formatter for this handler." alt="" coords="18,329,195,348"/>
+<area shape="rect" id="node2_30" href="javascript:void(0);" title="Ensure all logging output has been flushed." alt="" coords="18,348,195,367"/>
+<area shape="rect" id="node2_31" href="javascript:void(0);" title="Tidy up any resources used by the handler." alt="" coords="18,367,195,385"/>
+<area shape="rect" id="node2_32" href="javascript:void(0);" title="Handle errors which occur during an emit() call." alt="" coords="18,385,195,404"/>
+<area shape="rect" id="node2" href="javascript:void(0);" title="Handler instances dispatch logging events to specific destinations." alt="" coords="5,117,207,411"/>
+<area shape="rect" id="node3_33" href="javascript:void(0);" title="Add the specified filter to this handler." alt="" coords="37,36,178,55"/>
+<area shape="rect" id="node3_34" href="javascript:void(0);" title="Remove the specified filter from this handler." alt="" coords="37,55,178,73"/>
+<area shape="rect" id="node3_35" href="javascript:void(0);" title="Determine if a record is loggable by consulting all the filters." alt="" coords="37,73,178,92"/>
+<area shape="rect" id="node3" href="javascript:void(0);" title="A base class for loggers and handlers which allows them to share common code." alt="" coords="25,5,190,99"/>
+</map>
+  <img src="uml_class_diagram_for_googleap.gif" alt='' usemap="#uml_class_diagram_for_googleap" ismap="ismap" class="graph-without-title" />
+</center>
+</center>
+<hr />
+<!-- ==================== INSTANCE METHODS ==================== -->
+<a name="section-InstanceMethods"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Instance Methods</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-InstanceMethods"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a href="googleapiclient.NullHandler-class.html#emit" class="summary-sig-name">emit</a>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">record</span>)</span><br />
+      Do whatever it takes to actually log the specified logging record.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="googleapiclient-pysrc.html#NullHandler.emit">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>logging.Handler</code></b>:
+      <code>__init__</code>,
+      <code>acquire</code>,
+      <code>close</code>,
+      <code>createLock</code>,
+      <code>flush</code>,
+      <code>format</code>,
+      <code>get_name</code>,
+      <code>handle</code>,
+      <code>handleError</code>,
+      <code>release</code>,
+      <code>setFormatter</code>,
+      <code>setLevel</code>,
+      <code>set_name</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>logging.Filterer</code></b>:
+      <code>addFilter</code>,
+      <code>filter</code>,
+      <code>removeFilter</code>
+      </p>
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__delattr__</code>,
+      <code>__format__</code>,
+      <code>__getattribute__</code>,
+      <code>__hash__</code>,
+      <code>__new__</code>,
+      <code>__reduce__</code>,
+      <code>__reduce_ex__</code>,
+      <code>__repr__</code>,
+      <code>__setattr__</code>,
+      <code>__sizeof__</code>,
+      <code>__str__</code>,
+      <code>__subclasshook__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== CLASS VARIABLES ==================== -->
+<a name="section-ClassVariables"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Class Variables</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-ClassVariables"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>logging.Handler</code></b>:
+      <code>name</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== PROPERTIES ==================== -->
+<a name="section-Properties"></a>
+<table class="summary" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Properties</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-Properties"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+  <tr>
+    <td colspan="2" class="summary">
+    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
+      <code>__class__</code>
+      </p>
+    </td>
+  </tr>
+</table>
+<!-- ==================== METHOD DETAILS ==================== -->
+<a name="section-MethodDetails"></a>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr bgcolor="#70b0f0" class="table-header">
+  <td colspan="2" class="table-header">
+    <table border="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr valign="top">
+        <td align="left"><span class="table-header">Method Details</span></td>
+        <td align="right" valign="top"
+         ><span class="options">[<a href="#section-MethodDetails"
+         class="privatelink" onclick="toggle_private();"
+         >hide private</a>]</span></td>
+      </tr>
+    </table>
+  </td>
+</tr>
+</table>
+<a name="emit"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">emit</span>(<span class="sig-arg">self</span>,
+        <span class="sig-arg">record</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="googleapiclient-pysrc.html#NullHandler.emit">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+
+Do whatever it takes to actually log the specified logging record.
+
+This version is intended to be implemented by subclasses and so
+raises a NotImplementedError.
+
+</pre>
+  <dl class="fields">
+    <dt>Overrides:
+        logging.Handler.emit
+        <dd><em class="note">(inherited documentation)</em></dd>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
+<br />
+<!-- ==================== NAVIGATION BAR ==================== -->
+<table class="navbar" border="0" width="100%" cellpadding="0"
+       bgcolor="#a0c0ff" cellspacing="0">
+  <tr valign="middle">
+  <!-- Home link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="googleapiclient-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Tree link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Index link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
+
+  <!-- Help link -->
+      <th>&nbsp;&nbsp;&nbsp;<a
+        href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
+
+      <th class="navbar" width="100%"></th>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%%">
+  <tr>
+    <td align="left" class="footer">
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
+    </td>
+    <td align="right" class="footer">
+      <a target="mainFrame" href="http://epydoc.sourceforge.net"
+        >http://epydoc.sourceforge.net</a>
+    </td>
+  </tr>
+</table>
+
+<script type="text/javascript">
+  <!--
+  // Private objects are initially displayed (because if
+  // javascript is turned off then we want them to be
+  // visible); but by default, we want to hide them.  So hide
+  // them unless we have a cookie that says to show them.
+  checkCookie();
+  // -->
+</script>
+</body>
+</html>
diff --git a/docs/epy/googleapiclient.channel-module.html b/docs/epy/googleapiclient.channel-module.html
index c71d17d..1944020 100644
--- a/docs/epy/googleapiclient.channel-module.html
+++ b/docs/epy/googleapiclient.channel-module.html
@@ -455,7 +455,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.channel-pysrc.html b/docs/epy/googleapiclient.channel-pysrc.html
index 9427494..2651393 100644
--- a/docs/epy/googleapiclient.channel-pysrc.html
+++ b/docs/epy/googleapiclient.channel-pysrc.html
@@ -380,7 +380,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.channel.Channel-class.html b/docs/epy/googleapiclient.channel.Channel-class.html
index 005c92f..e5314fa 100644
--- a/docs/epy/googleapiclient.channel.Channel-class.html
+++ b/docs/epy/googleapiclient.channel.Channel-class.html
@@ -58,13 +58,13 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class Channel</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.channel-pysrc.html#Channel">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap" name="uml_class_diagram_for_googleap">
+<center>  <map id="uml_class_diagram_for_googleap_2" name="uml_class_diagram_for_googleap_2">
 <area shape="rect" id="node1_3" href="googleapiclient.channel.Channel-class.html#__init__" title="Create a new Channel." alt="" coords="17,36,633,55"/>
 <area shape="rect" id="node1_4" href="googleapiclient.channel.Channel-class.html#body" title="Build a body from the Channel." alt="" coords="17,55,633,73"/>
 <area shape="rect" id="node1_5" href="googleapiclient.channel.Channel-class.html#update" title="Update a channel with information from the response of watch()." alt="" coords="17,73,633,92"/>
 <area shape="rect" id="node1" href="googleapiclient.channel.Channel-class.html" title="A Channel for notifications." alt="" coords="5,5,645,99"/>
 </map>
-  <img src="uml_class_diagram_for_googleap.gif" alt='' usemap="#uml_class_diagram_for_googleap" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_2.gif" alt='' usemap="#uml_class_diagram_for_googleap_2" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -376,7 +376,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.channel.Notification-class.html b/docs/epy/googleapiclient.channel.Notification-class.html
index a20210f..72559d5 100644
--- a/docs/epy/googleapiclient.channel.Notification-class.html
+++ b/docs/epy/googleapiclient.channel.Notification-class.html
@@ -58,11 +58,11 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class Notification</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.channel-pysrc.html#Notification">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_2" name="uml_class_diagram_for_googleap_2">
+<center>  <map id="uml_class_diagram_for_googleap_3" name="uml_class_diagram_for_googleap_3">
 <area shape="rect" id="node1_1" href="googleapiclient.channel.Notification-class.html#__init__" title="Notification constructor." alt="" coords="17,36,407,55"/>
 <area shape="rect" id="node1" href="googleapiclient.channel.Notification-class.html" title="A Notification from a Channel." alt="" coords="5,5,419,61"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_2.gif" alt='' usemap="#uml_class_diagram_for_googleap_2" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_3.gif" alt='' usemap="#uml_class_diagram_for_googleap_3" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -249,7 +249,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery-module.html b/docs/epy/googleapiclient.discovery-module.html
index c212a16..c595b3c 100644
--- a/docs/epy/googleapiclient.discovery-module.html
+++ b/docs/epy/googleapiclient.discovery-module.html
@@ -445,6 +445,21 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
+        <a href="googleapiclient.discovery-module.html#V1_DISCOVERY_URI" class="summary-name" onclick="show_private();">V1_DISCOVERY_URI</a> = <code title="'https://www.googleapis.com/discovery/v1/apis/' '{api}/{apiVersion}/re\
+st'">'https://www.googleapis.com/discovery/v1/ap<code class="variable-ellipsis">...</code></code>
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a href="googleapiclient.discovery-module.html#V2_DISCOVERY_URI" class="summary-name" onclick="show_private();">V2_DISCOVERY_URI</a> = <code title="'https://{api}.googleapis.com/$discovery/rest?' 'version={apiVersion}'">'https://{api}.googleapis.com/$discovery/re<code class="variable-ellipsis">...</code></code>
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
         <a name="DEFAULT_METHOD_DOC"></a><span class="summary-name">DEFAULT_METHOD_DOC</span> = <code title="'A description of how to use this function'">'A description of how to use this function'</code>
     </td>
   </tr>
@@ -1068,6 +1083,43 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="V1_DISCOVERY_URI"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">V1_DISCOVERY_URI</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+'https://www.googleapis.com/discovery/v1/apis/' '{api}/{apiVersion}/re<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+st'
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
+<a name="V2_DISCOVERY_URI"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <h3 class="epydoc">V2_DISCOVERY_URI</h3>
+  
+  <dl class="fields">
+  </dl>
+  <dl class="fields">
+    <dt>Value:</dt>
+      <dd><table><tr><td><pre class="variable">
+'https://{api}.googleapis.com/$discovery/rest?' 'version={apiVersion}'
+</pre></td></tr></table>
+</dd>
+  </dl>
+</td></tr></table>
+</div>
 <a name="BODY_PARAMETER_DEFAULT_VALUE"></a>
 <div class="private">
 <table class="details" border="1" cellpadding="3"
@@ -1169,7 +1221,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery-pysrc.html b/docs/epy/googleapiclient.discovery-pysrc.html
index 3dc0b31..e6f1a90 100644
--- a/docs/epy/googleapiclient.discovery-pysrc.html
+++ b/docs/epy/googleapiclient.discovery-pysrc.html
@@ -134,1190 +134,1190 @@
 <a name="L76"></a><tt class="py-lineno">  76</tt>  <tt class="py-line"><tt class="py-comment"># The client library requires a version of httplib2 that supports RETRIES.</tt> </tt>
 <a name="L77"></a><tt class="py-lineno">  77</tt>  <tt class="py-line"><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">RETRIES</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
 <a name="L78"></a><tt class="py-lineno">  78</tt>  <tt class="py-line"> </tt>
-<a name="L79"></a><tt class="py-lineno">  79</tt>  <tt class="py-line"><tt id="link-44" class="py-name" targets="Variable googleapiclient.discovery.logger=googleapiclient.discovery-module.html#logger,Variable googleapiclient.discovery_cache.file_cache.logger=googleapiclient.discovery_cache.file_cache-module.html#logger"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-44', 'logger', 'link-44');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
+<a name="L79"></a><tt class="py-lineno">  79</tt>  <tt class="py-line"><tt id="link-44" class="py-name" targets="Variable googleapiclient.discovery.logger=googleapiclient.discovery-module.html#logger"><a title="googleapiclient.discovery.logger" class="py-name" href="#" onclick="return doclink('link-44', 'logger', 'link-44');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
 <a name="L80"></a><tt class="py-lineno">  80</tt>  <tt class="py-line"> </tt>
 <a name="L81"></a><tt class="py-lineno">  81</tt>  <tt class="py-line"><tt id="link-45" class="py-name" targets="Variable googleapiclient.discovery.URITEMPLATE=googleapiclient.discovery-module.html#URITEMPLATE"><a title="googleapiclient.discovery.URITEMPLATE" class="py-name" href="#" onclick="return doclink('link-45', 'URITEMPLATE', 'link-45');">URITEMPLATE</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'{[^}]*}'</tt><tt class="py-op">)</tt> </tt>
 <a name="L82"></a><tt class="py-lineno">  82</tt>  <tt class="py-line"><tt id="link-46" class="py-name" targets="Variable googleapiclient.discovery.VARNAME=googleapiclient.discovery-module.html#VARNAME"><a title="googleapiclient.discovery.VARNAME" class="py-name" href="#" onclick="return doclink('link-46', 'VARNAME', 'link-46');">VARNAME</a></tt> <tt class="py-op">=</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt class="py-string">'[a-zA-Z0-9_-]+'</tt><tt class="py-op">)</tt> </tt>
 <a name="L83"></a><tt class="py-lineno">  83</tt>  <tt class="py-line"><tt id="link-47" class="py-name" targets="Variable googleapiclient.discovery.DISCOVERY_URI=googleapiclient.discovery-module.html#DISCOVERY_URI"><a title="googleapiclient.discovery.DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-47', 'DISCOVERY_URI', 'link-47');">DISCOVERY_URI</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'https://www.googleapis.com/discovery/v1/apis/'</tt> </tt>
 <a name="L84"></a><tt class="py-lineno">  84</tt>  <tt class="py-line">                 <tt class="py-string">'{api}/{apiVersion}/rest'</tt><tt class="py-op">)</tt> </tt>
-<a name="L85"></a><tt class="py-lineno">  85</tt>  <tt class="py-line"><tt id="link-48" class="py-name" targets="Variable googleapiclient.discovery.DEFAULT_METHOD_DOC=googleapiclient.discovery-module.html#DEFAULT_METHOD_DOC"><a title="googleapiclient.discovery.DEFAULT_METHOD_DOC" class="py-name" href="#" onclick="return doclink('link-48', 'DEFAULT_METHOD_DOC', 'link-48');">DEFAULT_METHOD_DOC</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'A description of how to use this function'</tt> </tt>
-<a name="L86"></a><tt class="py-lineno">  86</tt>  <tt class="py-line"><tt id="link-49" class="py-name" targets="Variable googleapiclient.discovery.HTTP_PAYLOAD_METHODS=googleapiclient.discovery-module.html#HTTP_PAYLOAD_METHODS"><a title="googleapiclient.discovery.HTTP_PAYLOAD_METHODS" class="py-name" href="#" onclick="return doclink('link-49', 'HTTP_PAYLOAD_METHODS', 'link-49');">HTTP_PAYLOAD_METHODS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">frozenset</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'PUT'</tt><tt class="py-op">,</tt> <tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt class="py-string">'PATCH'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L87"></a><tt class="py-lineno">  87</tt>  <tt class="py-line"><tt id="link-50" class="py-name" targets="Variable googleapiclient.discovery._MEDIA_SIZE_BIT_SHIFTS=googleapiclient.discovery-module.html#_MEDIA_SIZE_BIT_SHIFTS"><a title="googleapiclient.discovery._MEDIA_SIZE_BIT_SHIFTS" class="py-name" href="#" onclick="return doclink('link-50', '_MEDIA_SIZE_BIT_SHIFTS', 'link-50');">_MEDIA_SIZE_BIT_SHIFTS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'KB'</tt><tt class="py-op">:</tt> <tt class="py-number">10</tt><tt class="py-op">,</tt> <tt class="py-string">'MB'</tt><tt class="py-op">:</tt> <tt class="py-number">20</tt><tt class="py-op">,</tt> <tt class="py-string">'GB'</tt><tt class="py-op">:</tt> <tt class="py-number">30</tt><tt class="py-op">,</tt> <tt class="py-string">'TB'</tt><tt class="py-op">:</tt> <tt class="py-number">40</tt><tt class="py-op">}</tt> </tt>
-<a name="L88"></a><tt class="py-lineno">  88</tt>  <tt class="py-line"><tt id="link-51" class="py-name" targets="Variable googleapiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE=googleapiclient.discovery-module.html#BODY_PARAMETER_DEFAULT_VALUE"><a title="googleapiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-51', 'BODY_PARAMETER_DEFAULT_VALUE', 'link-51');">BODY_PARAMETER_DEFAULT_VALUE</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L89"></a><tt class="py-lineno">  89</tt>  <tt class="py-line">    <tt class="py-string">'description'</tt><tt class="py-op">:</tt> <tt class="py-string">'The request body.'</tt><tt class="py-op">,</tt> </tt>
-<a name="L90"></a><tt class="py-lineno">  90</tt>  <tt class="py-line">    <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'object'</tt><tt class="py-op">,</tt> </tt>
-<a name="L91"></a><tt class="py-lineno">  91</tt>  <tt class="py-line">    <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
-<a name="L92"></a><tt class="py-lineno">  92</tt>  <tt class="py-line"><tt class="py-op">}</tt> </tt>
-<a name="L93"></a><tt class="py-lineno">  93</tt>  <tt class="py-line"><tt id="link-52" class="py-name" targets="Variable googleapiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE=googleapiclient.discovery-module.html#MEDIA_BODY_PARAMETER_DEFAULT_VALUE"><a title="googleapiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-52', 'MEDIA_BODY_PARAMETER_DEFAULT_VALUE', 'link-52');">MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L94"></a><tt class="py-lineno">  94</tt>  <tt class="py-line">    <tt class="py-string">'description'</tt><tt class="py-op">:</tt> <tt class="py-op">(</tt><tt class="py-string">'The filename of the media request body, or an instance '</tt> </tt>
-<a name="L95"></a><tt class="py-lineno">  95</tt>  <tt class="py-line">                    <tt class="py-string">'of a MediaUpload object.'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L96"></a><tt class="py-lineno">  96</tt>  <tt class="py-line">    <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'string'</tt><tt class="py-op">,</tt> </tt>
-<a name="L97"></a><tt class="py-lineno">  97</tt>  <tt class="py-line">    <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> </tt>
-<a name="L98"></a><tt class="py-lineno">  98</tt>  <tt class="py-line"><tt class="py-op">}</tt> </tt>
-<a name="L99"></a><tt class="py-lineno">  99</tt>  <tt class="py-line"> </tt>
-<a name="L100"></a><tt class="py-lineno"> 100</tt>  <tt class="py-line"><tt class="py-comment"># Parameters accepted by the stack, but not visible via discovery.</tt> </tt>
-<a name="L101"></a><tt class="py-lineno"> 101</tt>  <tt class="py-line"><tt class="py-comment"># TODO(dhermes): Remove 'userip' in 'v2'.</tt> </tt>
-<a name="L102"></a><tt class="py-lineno"> 102</tt>  <tt class="py-line"><tt id="link-53" class="py-name" targets="Variable googleapiclient.discovery.STACK_QUERY_PARAMETERS=googleapiclient.discovery-module.html#STACK_QUERY_PARAMETERS"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-53', 'STACK_QUERY_PARAMETERS', 'link-53');">STACK_QUERY_PARAMETERS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">frozenset</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'trace'</tt><tt class="py-op">,</tt> <tt class="py-string">'pp'</tt><tt class="py-op">,</tt> <tt class="py-string">'userip'</tt><tt class="py-op">,</tt> <tt class="py-string">'strict'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L103"></a><tt class="py-lineno"> 103</tt>  <tt class="py-line"><tt id="link-54" class="py-name" targets="Variable googleapiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE=googleapiclient.discovery-module.html#STACK_QUERY_PARAMETER_DEFAULT_VALUE"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-54', 'STACK_QUERY_PARAMETER_DEFAULT_VALUE', 'link-54');">STACK_QUERY_PARAMETER_DEFAULT_VALUE</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'string'</tt><tt class="py-op">,</tt> <tt class="py-string">'location'</tt><tt class="py-op">:</tt> <tt class="py-string">'query'</tt><tt class="py-op">}</tt> </tt>
-<a name="L104"></a><tt class="py-lineno"> 104</tt>  <tt class="py-line"> </tt>
-<a name="L105"></a><tt class="py-lineno"> 105</tt>  <tt class="py-line"><tt class="py-comment"># Library-specific reserved words beyond Python keywords.</tt> </tt>
-<a name="L106"></a><tt class="py-lineno"> 106</tt>  <tt class="py-line"><tt id="link-55" class="py-name" targets="Variable googleapiclient.discovery.RESERVED_WORDS=googleapiclient.discovery-module.html#RESERVED_WORDS"><a title="googleapiclient.discovery.RESERVED_WORDS" class="py-name" href="#" onclick="return doclink('link-55', 'RESERVED_WORDS', 'link-55');">RESERVED_WORDS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">frozenset</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="_BytesGenerator"></a><div id="_BytesGenerator-def"><a name="L107"></a><tt class="py-lineno"> 107</tt>  <tt class="py-line"> </tt>
-<a name="L108"></a><tt class="py-lineno"> 108</tt>  <tt class="py-line"><tt class="py-comment"># patch _write_lines to avoid munging '\r' into '\n'</tt> </tt>
-<a name="L109"></a><tt class="py-lineno"> 109</tt>  <tt class="py-line"><tt class="py-comment"># ( https://bugs.python.org/issue18886 https://bugs.python.org/issue19003 )</tt> </tt>
-<a name="L110"></a><tt class="py-lineno"> 110</tt> <a class="py-toggle" href="#" id="_BytesGenerator-toggle" onclick="return toggle('_BytesGenerator');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery._BytesGenerator-class.html">_BytesGenerator</a><tt class="py-op">(</tt><tt class="py-base-class">BytesGenerator</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_BytesGenerator-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_BytesGenerator-expanded"><a name="L111"></a><tt class="py-lineno"> 111</tt>  <tt class="py-line">  <tt id="link-56" class="py-name" targets="Variable googleapiclient.discovery._BytesGenerator._write_lines=googleapiclient.discovery._BytesGenerator-class.html#_write_lines"><a title="googleapiclient.discovery._BytesGenerator._write_lines" class="py-name" href="#" onclick="return doclink('link-56', '_write_lines', 'link-56');">_write_lines</a></tt> <tt class="py-op">=</tt> <tt class="py-name">BytesGenerator</tt><tt class="py-op">.</tt><tt class="py-name">write</tt> </tt>
-</div><a name="L112"></a><tt class="py-lineno"> 112</tt>  <tt class="py-line"> </tt>
-<a name="fix_method_name"></a><div id="fix_method_name-def"><a name="L113"></a><tt class="py-lineno"> 113</tt> <a class="py-toggle" href="#" id="fix_method_name-toggle" onclick="return toggle('fix_method_name');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#fix_method_name">fix_method_name</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="fix_method_name-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="fix_method_name-expanded"><a name="L114"></a><tt class="py-lineno"> 114</tt>  <tt class="py-line">  <tt class="py-docstring">"""Fix method names to avoid reserved word conflicts.</tt> </tt>
-<a name="L115"></a><tt class="py-lineno"> 115</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L116"></a><tt class="py-lineno"> 116</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L117"></a><tt class="py-lineno"> 117</tt>  <tt class="py-line"><tt class="py-docstring">    name: string, method name.</tt> </tt>
+<a name="L85"></a><tt class="py-lineno">  85</tt>  <tt class="py-line"><tt id="link-48" class="py-name" targets="Variable googleapiclient.discovery.V1_DISCOVERY_URI=googleapiclient.discovery-module.html#V1_DISCOVERY_URI"><a title="googleapiclient.discovery.V1_DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-48', 'V1_DISCOVERY_URI', 'link-48');">V1_DISCOVERY_URI</a></tt> <tt class="py-op">=</tt> <tt id="link-49" class="py-name"><a title="googleapiclient.discovery.DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-49', 'DISCOVERY_URI', 'link-47');">DISCOVERY_URI</a></tt> </tt>
+<a name="L86"></a><tt class="py-lineno">  86</tt>  <tt class="py-line"><tt id="link-50" class="py-name" targets="Variable googleapiclient.discovery.V2_DISCOVERY_URI=googleapiclient.discovery-module.html#V2_DISCOVERY_URI"><a title="googleapiclient.discovery.V2_DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-50', 'V2_DISCOVERY_URI', 'link-50');">V2_DISCOVERY_URI</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'https://{api}.googleapis.com/$discovery/rest?'</tt> </tt>
+<a name="L87"></a><tt class="py-lineno">  87</tt>  <tt class="py-line">                    <tt class="py-string">'version={apiVersion}'</tt><tt class="py-op">)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno">  88</tt>  <tt class="py-line"><tt id="link-51" class="py-name" targets="Variable googleapiclient.discovery.DEFAULT_METHOD_DOC=googleapiclient.discovery-module.html#DEFAULT_METHOD_DOC"><a title="googleapiclient.discovery.DEFAULT_METHOD_DOC" class="py-name" href="#" onclick="return doclink('link-51', 'DEFAULT_METHOD_DOC', 'link-51');">DEFAULT_METHOD_DOC</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'A description of how to use this function'</tt> </tt>
+<a name="L89"></a><tt class="py-lineno">  89</tt>  <tt class="py-line"><tt id="link-52" class="py-name" targets="Variable googleapiclient.discovery.HTTP_PAYLOAD_METHODS=googleapiclient.discovery-module.html#HTTP_PAYLOAD_METHODS"><a title="googleapiclient.discovery.HTTP_PAYLOAD_METHODS" class="py-name" href="#" onclick="return doclink('link-52', 'HTTP_PAYLOAD_METHODS', 'link-52');">HTTP_PAYLOAD_METHODS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">frozenset</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'PUT'</tt><tt class="py-op">,</tt> <tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt class="py-string">'PATCH'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L90"></a><tt class="py-lineno">  90</tt>  <tt class="py-line"><tt id="link-53" class="py-name" targets="Variable googleapiclient.discovery._MEDIA_SIZE_BIT_SHIFTS=googleapiclient.discovery-module.html#_MEDIA_SIZE_BIT_SHIFTS"><a title="googleapiclient.discovery._MEDIA_SIZE_BIT_SHIFTS" class="py-name" href="#" onclick="return doclink('link-53', '_MEDIA_SIZE_BIT_SHIFTS', 'link-53');">_MEDIA_SIZE_BIT_SHIFTS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'KB'</tt><tt class="py-op">:</tt> <tt class="py-number">10</tt><tt class="py-op">,</tt> <tt class="py-string">'MB'</tt><tt class="py-op">:</tt> <tt class="py-number">20</tt><tt class="py-op">,</tt> <tt class="py-string">'GB'</tt><tt class="py-op">:</tt> <tt class="py-number">30</tt><tt class="py-op">,</tt> <tt class="py-string">'TB'</tt><tt class="py-op">:</tt> <tt class="py-number">40</tt><tt class="py-op">}</tt> </tt>
+<a name="L91"></a><tt class="py-lineno">  91</tt>  <tt class="py-line"><tt id="link-54" class="py-name" targets="Variable googleapiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE=googleapiclient.discovery-module.html#BODY_PARAMETER_DEFAULT_VALUE"><a title="googleapiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-54', 'BODY_PARAMETER_DEFAULT_VALUE', 'link-54');">BODY_PARAMETER_DEFAULT_VALUE</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L92"></a><tt class="py-lineno">  92</tt>  <tt class="py-line">    <tt class="py-string">'description'</tt><tt class="py-op">:</tt> <tt class="py-string">'The request body.'</tt><tt class="py-op">,</tt> </tt>
+<a name="L93"></a><tt class="py-lineno">  93</tt>  <tt class="py-line">    <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'object'</tt><tt class="py-op">,</tt> </tt>
+<a name="L94"></a><tt class="py-lineno">  94</tt>  <tt class="py-line">    <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
+<a name="L95"></a><tt class="py-lineno">  95</tt>  <tt class="py-line"><tt class="py-op">}</tt> </tt>
+<a name="L96"></a><tt class="py-lineno">  96</tt>  <tt class="py-line"><tt id="link-55" class="py-name" targets="Variable googleapiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE=googleapiclient.discovery-module.html#MEDIA_BODY_PARAMETER_DEFAULT_VALUE"><a title="googleapiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-55', 'MEDIA_BODY_PARAMETER_DEFAULT_VALUE', 'link-55');">MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L97"></a><tt class="py-lineno">  97</tt>  <tt class="py-line">    <tt class="py-string">'description'</tt><tt class="py-op">:</tt> <tt class="py-op">(</tt><tt class="py-string">'The filename of the media request body, or an instance '</tt> </tt>
+<a name="L98"></a><tt class="py-lineno">  98</tt>  <tt class="py-line">                    <tt class="py-string">'of a MediaUpload object.'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L99"></a><tt class="py-lineno">  99</tt>  <tt class="py-line">    <tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'string'</tt><tt class="py-op">,</tt> </tt>
+<a name="L100"></a><tt class="py-lineno"> 100</tt>  <tt class="py-line">    <tt class="py-string">'required'</tt><tt class="py-op">:</tt> <tt class="py-name">False</tt><tt class="py-op">,</tt> </tt>
+<a name="L101"></a><tt class="py-lineno"> 101</tt>  <tt class="py-line"><tt class="py-op">}</tt> </tt>
+<a name="L102"></a><tt class="py-lineno"> 102</tt>  <tt class="py-line"> </tt>
+<a name="L103"></a><tt class="py-lineno"> 103</tt>  <tt class="py-line"><tt class="py-comment"># Parameters accepted by the stack, but not visible via discovery.</tt> </tt>
+<a name="L104"></a><tt class="py-lineno"> 104</tt>  <tt class="py-line"><tt class="py-comment"># TODO(dhermes): Remove 'userip' in 'v2'.</tt> </tt>
+<a name="L105"></a><tt class="py-lineno"> 105</tt>  <tt class="py-line"><tt id="link-56" class="py-name" targets="Variable googleapiclient.discovery.STACK_QUERY_PARAMETERS=googleapiclient.discovery-module.html#STACK_QUERY_PARAMETERS"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-56', 'STACK_QUERY_PARAMETERS', 'link-56');">STACK_QUERY_PARAMETERS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">frozenset</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'trace'</tt><tt class="py-op">,</tt> <tt class="py-string">'pp'</tt><tt class="py-op">,</tt> <tt class="py-string">'userip'</tt><tt class="py-op">,</tt> <tt class="py-string">'strict'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L106"></a><tt class="py-lineno"> 106</tt>  <tt class="py-line"><tt id="link-57" class="py-name" targets="Variable googleapiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE=googleapiclient.discovery-module.html#STACK_QUERY_PARAMETER_DEFAULT_VALUE"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-57', 'STACK_QUERY_PARAMETER_DEFAULT_VALUE', 'link-57');">STACK_QUERY_PARAMETER_DEFAULT_VALUE</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'type'</tt><tt class="py-op">:</tt> <tt class="py-string">'string'</tt><tt class="py-op">,</tt> <tt class="py-string">'location'</tt><tt class="py-op">:</tt> <tt class="py-string">'query'</tt><tt class="py-op">}</tt> </tt>
+<a name="L107"></a><tt class="py-lineno"> 107</tt>  <tt class="py-line"> </tt>
+<a name="L108"></a><tt class="py-lineno"> 108</tt>  <tt class="py-line"><tt class="py-comment"># Library-specific reserved words beyond Python keywords.</tt> </tt>
+<a name="L109"></a><tt class="py-lineno"> 109</tt>  <tt class="py-line"><tt id="link-58" class="py-name" targets="Variable googleapiclient.discovery.RESERVED_WORDS=googleapiclient.discovery-module.html#RESERVED_WORDS"><a title="googleapiclient.discovery.RESERVED_WORDS" class="py-name" href="#" onclick="return doclink('link-58', 'RESERVED_WORDS', 'link-58');">RESERVED_WORDS</a></tt> <tt class="py-op">=</tt> <tt class="py-name">frozenset</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="_BytesGenerator"></a><div id="_BytesGenerator-def"><a name="L110"></a><tt class="py-lineno"> 110</tt>  <tt class="py-line"> </tt>
+<a name="L111"></a><tt class="py-lineno"> 111</tt>  <tt class="py-line"><tt class="py-comment"># patch _write_lines to avoid munging '\r' into '\n'</tt> </tt>
+<a name="L112"></a><tt class="py-lineno"> 112</tt>  <tt class="py-line"><tt class="py-comment"># ( https://bugs.python.org/issue18886 https://bugs.python.org/issue19003 )</tt> </tt>
+<a name="L113"></a><tt class="py-lineno"> 113</tt> <a class="py-toggle" href="#" id="_BytesGenerator-toggle" onclick="return toggle('_BytesGenerator');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery._BytesGenerator-class.html">_BytesGenerator</a><tt class="py-op">(</tt><tt class="py-base-class">BytesGenerator</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_BytesGenerator-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_BytesGenerator-expanded"><a name="L114"></a><tt class="py-lineno"> 114</tt>  <tt class="py-line">  <tt id="link-59" class="py-name" targets="Variable googleapiclient.discovery._BytesGenerator._write_lines=googleapiclient.discovery._BytesGenerator-class.html#_write_lines"><a title="googleapiclient.discovery._BytesGenerator._write_lines" class="py-name" href="#" onclick="return doclink('link-59', '_write_lines', 'link-59');">_write_lines</a></tt> <tt class="py-op">=</tt> <tt class="py-name">BytesGenerator</tt><tt class="py-op">.</tt><tt class="py-name">write</tt> </tt>
+</div><a name="L115"></a><tt class="py-lineno"> 115</tt>  <tt class="py-line"> </tt>
+<a name="fix_method_name"></a><div id="fix_method_name-def"><a name="L116"></a><tt class="py-lineno"> 116</tt> <a class="py-toggle" href="#" id="fix_method_name-toggle" onclick="return toggle('fix_method_name');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#fix_method_name">fix_method_name</a><tt class="py-op">(</tt><tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="fix_method_name-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="fix_method_name-expanded"><a name="L117"></a><tt class="py-lineno"> 117</tt>  <tt class="py-line">  <tt class="py-docstring">"""Fix method names to avoid reserved word conflicts.</tt> </tt>
 <a name="L118"></a><tt class="py-lineno"> 118</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L119"></a><tt class="py-lineno"> 119</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L120"></a><tt class="py-lineno"> 120</tt>  <tt class="py-line"><tt class="py-docstring">    The name with a '_' prefixed if the name is a reserved word.</tt> </tt>
-<a name="L121"></a><tt class="py-lineno"> 121</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L122"></a><tt class="py-lineno"> 122</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">keyword</tt><tt class="py-op">.</tt><tt class="py-name">iskeyword</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt id="link-57" class="py-name"><a title="googleapiclient.discovery.RESERVED_WORDS" class="py-name" href="#" onclick="return doclink('link-57', 'RESERVED_WORDS', 'link-55');">RESERVED_WORDS</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L123"></a><tt class="py-lineno"> 123</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">name</tt> <tt class="py-op">+</tt> <tt class="py-string">'_'</tt> </tt>
-<a name="L124"></a><tt class="py-lineno"> 124</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L125"></a><tt class="py-lineno"> 125</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">name</tt> </tt>
-</div><a name="L126"></a><tt class="py-lineno"> 126</tt>  <tt class="py-line"> </tt>
-<a name="key2param"></a><div id="key2param-def"><a name="L127"></a><tt class="py-lineno"> 127</tt>  <tt class="py-line"> </tt>
-<a name="L128"></a><tt class="py-lineno"> 128</tt> <a class="py-toggle" href="#" id="key2param-toggle" onclick="return toggle('key2param');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#key2param">key2param</a><tt class="py-op">(</tt><tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="key2param-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="key2param-expanded"><a name="L129"></a><tt class="py-lineno"> 129</tt>  <tt class="py-line">  <tt class="py-docstring">"""Converts key names into parameter names.</tt> </tt>
-<a name="L130"></a><tt class="py-lineno"> 130</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L131"></a><tt class="py-lineno"> 131</tt>  <tt class="py-line"><tt class="py-docstring">  For example, converting "max-results" -&gt; "max_results"</tt> </tt>
-<a name="L132"></a><tt class="py-lineno"> 132</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L133"></a><tt class="py-lineno"> 133</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L134"></a><tt class="py-lineno"> 134</tt>  <tt class="py-line"><tt class="py-docstring">    key: string, the method key name.</tt> </tt>
+<a name="L119"></a><tt class="py-lineno"> 119</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L120"></a><tt class="py-lineno"> 120</tt>  <tt class="py-line"><tt class="py-docstring">    name: string, method name.</tt> </tt>
+<a name="L121"></a><tt class="py-lineno"> 121</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L122"></a><tt class="py-lineno"> 122</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L123"></a><tt class="py-lineno"> 123</tt>  <tt class="py-line"><tt class="py-docstring">    The name with a '_' prefixed if the name is a reserved word.</tt> </tt>
+<a name="L124"></a><tt class="py-lineno"> 124</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L125"></a><tt class="py-lineno"> 125</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">keyword</tt><tt class="py-op">.</tt><tt class="py-name">iskeyword</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt id="link-60" class="py-name"><a title="googleapiclient.discovery.RESERVED_WORDS" class="py-name" href="#" onclick="return doclink('link-60', 'RESERVED_WORDS', 'link-58');">RESERVED_WORDS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L126"></a><tt class="py-lineno"> 126</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">name</tt> <tt class="py-op">+</tt> <tt class="py-string">'_'</tt> </tt>
+<a name="L127"></a><tt class="py-lineno"> 127</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L128"></a><tt class="py-lineno"> 128</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">name</tt> </tt>
+</div><a name="L129"></a><tt class="py-lineno"> 129</tt>  <tt class="py-line"> </tt>
+<a name="key2param"></a><div id="key2param-def"><a name="L130"></a><tt class="py-lineno"> 130</tt>  <tt class="py-line"> </tt>
+<a name="L131"></a><tt class="py-lineno"> 131</tt> <a class="py-toggle" href="#" id="key2param-toggle" onclick="return toggle('key2param');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#key2param">key2param</a><tt class="py-op">(</tt><tt class="py-param">key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="key2param-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="key2param-expanded"><a name="L132"></a><tt class="py-lineno"> 132</tt>  <tt class="py-line">  <tt class="py-docstring">"""Converts key names into parameter names.</tt> </tt>
+<a name="L133"></a><tt class="py-lineno"> 133</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L134"></a><tt class="py-lineno"> 134</tt>  <tt class="py-line"><tt class="py-docstring">  For example, converting "max-results" -&gt; "max_results"</tt> </tt>
 <a name="L135"></a><tt class="py-lineno"> 135</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L136"></a><tt class="py-lineno"> 136</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L137"></a><tt class="py-lineno"> 137</tt>  <tt class="py-line"><tt class="py-docstring">    A safe method name based on the key name.</tt> </tt>
-<a name="L138"></a><tt class="py-lineno"> 138</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L139"></a><tt class="py-lineno"> 139</tt>  <tt class="py-line">  <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L140"></a><tt class="py-lineno"> 140</tt>  <tt class="py-line">  <tt class="py-name">key</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
-<a name="L141"></a><tt class="py-lineno"> 141</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">key</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">isalpha</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L142"></a><tt class="py-lineno"> 142</tt>  <tt class="py-line">    <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt> </tt>
-<a name="L143"></a><tt class="py-lineno"> 143</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">key</tt><tt class="py-op">:</tt> </tt>
-<a name="L144"></a><tt class="py-lineno"> 144</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">isalnum</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L145"></a><tt class="py-lineno"> 145</tt>  <tt class="py-line">      <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> </tt>
-<a name="L146"></a><tt class="py-lineno"> 146</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L147"></a><tt class="py-lineno"> 147</tt>  <tt class="py-line">      <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'_'</tt><tt class="py-op">)</tt> </tt>
-<a name="L148"></a><tt class="py-lineno"> 148</tt>  <tt class="py-line"> </tt>
-<a name="L149"></a><tt class="py-lineno"> 149</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L150"></a><tt class="py-lineno"> 150</tt>  <tt class="py-line"> </tt>
-<a name="build"></a><div id="build-def"><a name="L151"></a><tt class="py-lineno"> 151</tt>  <tt class="py-line"> </tt>
-<a name="L152"></a><tt class="py-lineno"> 152</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="L153"></a><tt class="py-lineno"> 153</tt> <a class="py-toggle" href="#" id="build-toggle" onclick="return toggle('build');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#build">build</a><tt class="py-op">(</tt><tt class="py-param">serviceName</tt><tt class="py-op">,</tt> </tt>
-<a name="L154"></a><tt class="py-lineno"> 154</tt>  <tt class="py-line">          <tt class="py-param">version</tt><tt class="py-op">,</tt> </tt>
-<a name="L155"></a><tt class="py-lineno"> 155</tt>  <tt class="py-line">          <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L156"></a><tt class="py-lineno"> 156</tt>  <tt class="py-line">          <tt class="py-param">discoveryServiceUrl</tt><tt class="py-op">=</tt><tt id="link-58" class="py-name"><a title="googleapiclient.discovery.DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-58', 'DISCOVERY_URI', 'link-47');">DISCOVERY_URI</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L157"></a><tt class="py-lineno"> 157</tt>  <tt class="py-line">          <tt class="py-param">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L158"></a><tt class="py-lineno"> 158</tt>  <tt class="py-line">          <tt class="py-param">model</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L159"></a><tt class="py-lineno"> 159</tt>  <tt class="py-line">          <tt class="py-param">requestBuilder</tt><tt class="py-op">=</tt><tt id="link-59" class="py-name"><a title="googleapiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-59', 'HttpRequest', 'link-25');">HttpRequest</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L160"></a><tt class="py-lineno"> 160</tt>  <tt class="py-line">          <tt class="py-param">credentials</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L161"></a><tt class="py-lineno"> 161</tt>  <tt class="py-line">          <tt class="py-param">cache_discovery</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
-<a name="L162"></a><tt class="py-lineno"> 162</tt>  <tt class="py-line">          <tt class="py-param">cache</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="build-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="build-expanded"><a name="L163"></a><tt class="py-lineno"> 163</tt>  <tt class="py-line">  <tt class="py-docstring">"""Construct a Resource for interacting with an API.</tt> </tt>
-<a name="L164"></a><tt class="py-lineno"> 164</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L165"></a><tt class="py-lineno"> 165</tt>  <tt class="py-line"><tt class="py-docstring">  Construct a Resource object for interacting with an API. The serviceName and</tt> </tt>
-<a name="L166"></a><tt class="py-lineno"> 166</tt>  <tt class="py-line"><tt class="py-docstring">  version are the names from the Discovery service.</tt> </tt>
+<a name="L136"></a><tt class="py-lineno"> 136</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L137"></a><tt class="py-lineno"> 137</tt>  <tt class="py-line"><tt class="py-docstring">    key: string, the method key name.</tt> </tt>
+<a name="L138"></a><tt class="py-lineno"> 138</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L139"></a><tt class="py-lineno"> 139</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L140"></a><tt class="py-lineno"> 140</tt>  <tt class="py-line"><tt class="py-docstring">    A safe method name based on the key name.</tt> </tt>
+<a name="L141"></a><tt class="py-lineno"> 141</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L142"></a><tt class="py-lineno"> 142</tt>  <tt class="py-line">  <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L143"></a><tt class="py-lineno"> 143</tt>  <tt class="py-line">  <tt class="py-name">key</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">)</tt> </tt>
+<a name="L144"></a><tt class="py-lineno"> 144</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">key</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">isalpha</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L145"></a><tt class="py-lineno"> 145</tt>  <tt class="py-line">    <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'x'</tt><tt class="py-op">)</tt> </tt>
+<a name="L146"></a><tt class="py-lineno"> 146</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">key</tt><tt class="py-op">:</tt> </tt>
+<a name="L147"></a><tt class="py-lineno"> 147</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">c</tt><tt class="py-op">.</tt><tt class="py-name">isalnum</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L148"></a><tt class="py-lineno"> 148</tt>  <tt class="py-line">      <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> </tt>
+<a name="L149"></a><tt class="py-lineno"> 149</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L150"></a><tt class="py-lineno"> 150</tt>  <tt class="py-line">      <tt class="py-name">result</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'_'</tt><tt class="py-op">)</tt> </tt>
+<a name="L151"></a><tt class="py-lineno"> 151</tt>  <tt class="py-line"> </tt>
+<a name="L152"></a><tt class="py-lineno"> 152</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L153"></a><tt class="py-lineno"> 153</tt>  <tt class="py-line"> </tt>
+<a name="build"></a><div id="build-def"><a name="L154"></a><tt class="py-lineno"> 154</tt>  <tt class="py-line"> </tt>
+<a name="L155"></a><tt class="py-lineno"> 155</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L156"></a><tt class="py-lineno"> 156</tt> <a class="py-toggle" href="#" id="build-toggle" onclick="return toggle('build');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#build">build</a><tt class="py-op">(</tt><tt class="py-param">serviceName</tt><tt class="py-op">,</tt> </tt>
+<a name="L157"></a><tt class="py-lineno"> 157</tt>  <tt class="py-line">          <tt class="py-param">version</tt><tt class="py-op">,</tt> </tt>
+<a name="L158"></a><tt class="py-lineno"> 158</tt>  <tt class="py-line">          <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L159"></a><tt class="py-lineno"> 159</tt>  <tt class="py-line">          <tt class="py-param">discoveryServiceUrl</tt><tt class="py-op">=</tt><tt id="link-61" class="py-name"><a title="googleapiclient.discovery.DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-61', 'DISCOVERY_URI', 'link-47');">DISCOVERY_URI</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L160"></a><tt class="py-lineno"> 160</tt>  <tt class="py-line">          <tt class="py-param">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L161"></a><tt class="py-lineno"> 161</tt>  <tt class="py-line">          <tt class="py-param">model</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L162"></a><tt class="py-lineno"> 162</tt>  <tt class="py-line">          <tt class="py-param">requestBuilder</tt><tt class="py-op">=</tt><tt id="link-62" class="py-name"><a title="googleapiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-62', 'HttpRequest', 'link-25');">HttpRequest</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L163"></a><tt class="py-lineno"> 163</tt>  <tt class="py-line">          <tt class="py-param">credentials</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L164"></a><tt class="py-lineno"> 164</tt>  <tt class="py-line">          <tt class="py-param">cache_discovery</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
+<a name="L165"></a><tt class="py-lineno"> 165</tt>  <tt class="py-line">          <tt class="py-param">cache</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="build-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="build-expanded"><a name="L166"></a><tt class="py-lineno"> 166</tt>  <tt class="py-line">  <tt class="py-docstring">"""Construct a Resource for interacting with an API.</tt> </tt>
 <a name="L167"></a><tt class="py-lineno"> 167</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L168"></a><tt class="py-lineno"> 168</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L169"></a><tt class="py-lineno"> 169</tt>  <tt class="py-line"><tt class="py-docstring">    serviceName: string, name of the service.</tt> </tt>
-<a name="L170"></a><tt class="py-lineno"> 170</tt>  <tt class="py-line"><tt class="py-docstring">    version: string, the version of the service.</tt> </tt>
-<a name="L171"></a><tt class="py-lineno"> 171</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
-<a name="L172"></a><tt class="py-lineno"> 172</tt>  <tt class="py-line"><tt class="py-docstring">      like it that HTTP requests will be made through.</tt> </tt>
-<a name="L173"></a><tt class="py-lineno"> 173</tt>  <tt class="py-line"><tt class="py-docstring">    discoveryServiceUrl: string, a URI Template that points to the location of</tt> </tt>
-<a name="L174"></a><tt class="py-lineno"> 174</tt>  <tt class="py-line"><tt class="py-docstring">      the discovery service. It should have two parameters {api} and</tt> </tt>
-<a name="L175"></a><tt class="py-lineno"> 175</tt>  <tt class="py-line"><tt class="py-docstring">      {apiVersion} that when filled in produce an absolute URI to the discovery</tt> </tt>
-<a name="L176"></a><tt class="py-lineno"> 176</tt>  <tt class="py-line"><tt class="py-docstring">      document for that service.</tt> </tt>
-<a name="L177"></a><tt class="py-lineno"> 177</tt>  <tt class="py-line"><tt class="py-docstring">    developerKey: string, key obtained from</tt> </tt>
-<a name="L178"></a><tt class="py-lineno"> 178</tt>  <tt class="py-line"><tt class="py-docstring">      https://code.google.com/apis/console.</tt> </tt>
-<a name="L179"></a><tt class="py-lineno"> 179</tt>  <tt class="py-line"><tt class="py-docstring">    model: googleapiclient.Model, converts to and from the wire format.</tt> </tt>
-<a name="L180"></a><tt class="py-lineno"> 180</tt>  <tt class="py-line"><tt class="py-docstring">    requestBuilder: googleapiclient.http.HttpRequest, encapsulator for an HTTP</tt> </tt>
-<a name="L181"></a><tt class="py-lineno"> 181</tt>  <tt class="py-line"><tt class="py-docstring">      request.</tt> </tt>
-<a name="L182"></a><tt class="py-lineno"> 182</tt>  <tt class="py-line"><tt class="py-docstring">    credentials: oauth2client.Credentials, credentials to be used for</tt> </tt>
-<a name="L183"></a><tt class="py-lineno"> 183</tt>  <tt class="py-line"><tt class="py-docstring">      authentication.</tt> </tt>
-<a name="L184"></a><tt class="py-lineno"> 184</tt>  <tt class="py-line"><tt class="py-docstring">    cache_discovery: Boolean, whether or not to cache the discovery doc.</tt> </tt>
-<a name="L185"></a><tt class="py-lineno"> 185</tt>  <tt class="py-line"><tt class="py-docstring">    cache: googleapiclient.discovery_cache.base.CacheBase, an optional</tt> </tt>
-<a name="L186"></a><tt class="py-lineno"> 186</tt>  <tt class="py-line"><tt class="py-docstring">      cache object for the discovery documents.</tt> </tt>
-<a name="L187"></a><tt class="py-lineno"> 187</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L188"></a><tt class="py-lineno"> 188</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L189"></a><tt class="py-lineno"> 189</tt>  <tt class="py-line"><tt class="py-docstring">    A Resource object with methods for interacting with the service.</tt> </tt>
-<a name="L190"></a><tt class="py-lineno"> 190</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L191"></a><tt class="py-lineno"> 191</tt>  <tt class="py-line">  <tt class="py-name">params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L192"></a><tt class="py-lineno"> 192</tt>  <tt class="py-line">      <tt class="py-string">'api'</tt><tt class="py-op">:</tt> <tt class="py-name">serviceName</tt><tt class="py-op">,</tt> </tt>
-<a name="L193"></a><tt class="py-lineno"> 193</tt>  <tt class="py-line">      <tt class="py-string">'apiVersion'</tt><tt class="py-op">:</tt> <tt class="py-name">version</tt> </tt>
-<a name="L194"></a><tt class="py-lineno"> 194</tt>  <tt class="py-line">      <tt class="py-op">}</tt> </tt>
-<a name="L195"></a><tt class="py-lineno"> 195</tt>  <tt class="py-line"> </tt>
-<a name="L196"></a><tt class="py-lineno"> 196</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-60" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-60', 'http', 'link-21');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L197"></a><tt class="py-lineno"> 197</tt>  <tt class="py-line">    <tt id="link-61" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-61', 'http', 'link-21');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L168"></a><tt class="py-lineno"> 168</tt>  <tt class="py-line"><tt class="py-docstring">  Construct a Resource object for interacting with an API. The serviceName and</tt> </tt>
+<a name="L169"></a><tt class="py-lineno"> 169</tt>  <tt class="py-line"><tt class="py-docstring">  version are the names from the Discovery service.</tt> </tt>
+<a name="L170"></a><tt class="py-lineno"> 170</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L171"></a><tt class="py-lineno"> 171</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L172"></a><tt class="py-lineno"> 172</tt>  <tt class="py-line"><tt class="py-docstring">    serviceName: string, name of the service.</tt> </tt>
+<a name="L173"></a><tt class="py-lineno"> 173</tt>  <tt class="py-line"><tt class="py-docstring">    version: string, the version of the service.</tt> </tt>
+<a name="L174"></a><tt class="py-lineno"> 174</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
+<a name="L175"></a><tt class="py-lineno"> 175</tt>  <tt class="py-line"><tt class="py-docstring">      like it that HTTP requests will be made through.</tt> </tt>
+<a name="L176"></a><tt class="py-lineno"> 176</tt>  <tt class="py-line"><tt class="py-docstring">    discoveryServiceUrl: string, a URI Template that points to the location of</tt> </tt>
+<a name="L177"></a><tt class="py-lineno"> 177</tt>  <tt class="py-line"><tt class="py-docstring">      the discovery service. It should have two parameters {api} and</tt> </tt>
+<a name="L178"></a><tt class="py-lineno"> 178</tt>  <tt class="py-line"><tt class="py-docstring">      {apiVersion} that when filled in produce an absolute URI to the discovery</tt> </tt>
+<a name="L179"></a><tt class="py-lineno"> 179</tt>  <tt class="py-line"><tt class="py-docstring">      document for that service.</tt> </tt>
+<a name="L180"></a><tt class="py-lineno"> 180</tt>  <tt class="py-line"><tt class="py-docstring">    developerKey: string, key obtained from</tt> </tt>
+<a name="L181"></a><tt class="py-lineno"> 181</tt>  <tt class="py-line"><tt class="py-docstring">      https://code.google.com/apis/console.</tt> </tt>
+<a name="L182"></a><tt class="py-lineno"> 182</tt>  <tt class="py-line"><tt class="py-docstring">    model: googleapiclient.Model, converts to and from the wire format.</tt> </tt>
+<a name="L183"></a><tt class="py-lineno"> 183</tt>  <tt class="py-line"><tt class="py-docstring">    requestBuilder: googleapiclient.http.HttpRequest, encapsulator for an HTTP</tt> </tt>
+<a name="L184"></a><tt class="py-lineno"> 184</tt>  <tt class="py-line"><tt class="py-docstring">      request.</tt> </tt>
+<a name="L185"></a><tt class="py-lineno"> 185</tt>  <tt class="py-line"><tt class="py-docstring">    credentials: oauth2client.Credentials, credentials to be used for</tt> </tt>
+<a name="L186"></a><tt class="py-lineno"> 186</tt>  <tt class="py-line"><tt class="py-docstring">      authentication.</tt> </tt>
+<a name="L187"></a><tt class="py-lineno"> 187</tt>  <tt class="py-line"><tt class="py-docstring">    cache_discovery: Boolean, whether or not to cache the discovery doc.</tt> </tt>
+<a name="L188"></a><tt class="py-lineno"> 188</tt>  <tt class="py-line"><tt class="py-docstring">    cache: googleapiclient.discovery_cache.base.CacheBase, an optional</tt> </tt>
+<a name="L189"></a><tt class="py-lineno"> 189</tt>  <tt class="py-line"><tt class="py-docstring">      cache object for the discovery documents.</tt> </tt>
+<a name="L190"></a><tt class="py-lineno"> 190</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L191"></a><tt class="py-lineno"> 191</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L192"></a><tt class="py-lineno"> 192</tt>  <tt class="py-line"><tt class="py-docstring">    A Resource object with methods for interacting with the service.</tt> </tt>
+<a name="L193"></a><tt class="py-lineno"> 193</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L194"></a><tt class="py-lineno"> 194</tt>  <tt class="py-line">  <tt class="py-name">params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L195"></a><tt class="py-lineno"> 195</tt>  <tt class="py-line">      <tt class="py-string">'api'</tt><tt class="py-op">:</tt> <tt class="py-name">serviceName</tt><tt class="py-op">,</tt> </tt>
+<a name="L196"></a><tt class="py-lineno"> 196</tt>  <tt class="py-line">      <tt class="py-string">'apiVersion'</tt><tt class="py-op">:</tt> <tt class="py-name">version</tt> </tt>
+<a name="L197"></a><tt class="py-lineno"> 197</tt>  <tt class="py-line">      <tt class="py-op">}</tt> </tt>
 <a name="L198"></a><tt class="py-lineno"> 198</tt>  <tt class="py-line"> </tt>
-<a name="L199"></a><tt class="py-lineno"> 199</tt>  <tt class="py-line">  <tt class="py-name">requested_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">discoveryServiceUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
-<a name="L200"></a><tt class="py-lineno"> 200</tt>  <tt class="py-line"> </tt>
-<a name="L201"></a><tt class="py-lineno"> 201</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L202"></a><tt class="py-lineno"> 202</tt>  <tt class="py-line">    <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-62" class="py-name" targets="Function googleapiclient.discovery._retrieve_discovery_doc()=googleapiclient.discovery-module.html#_retrieve_discovery_doc"><a title="googleapiclient.discovery._retrieve_discovery_doc" class="py-name" href="#" onclick="return doclink('link-62', '_retrieve_discovery_doc', 'link-62');">_retrieve_discovery_doc</a></tt><tt class="py-op">(</tt><tt class="py-name">requested_url</tt><tt class="py-op">,</tt> <tt id="link-63" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-63', 'http', 'link-21');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">cache_discovery</tt><tt class="py-op">,</tt> </tt>
-<a name="L203"></a><tt class="py-lineno"> 203</tt>  <tt class="py-line">                                      <tt id="link-64" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.cache=googleapiclient.discovery_cache.appengine_memcache-module.html#cache,Variable googleapiclient.discovery_cache.file_cache.cache=googleapiclient.discovery_cache.file_cache-module.html#cache"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-64', 'cache', 'link-64');">cache</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L204"></a><tt class="py-lineno"> 204</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt id="link-65" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-65', 'HttpError', 'link-4');">HttpError</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L205"></a><tt class="py-lineno"> 205</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-name">http_client</tt><tt class="py-op">.</tt><tt class="py-name">NOT_FOUND</tt><tt class="py-op">:</tt> </tt>
-<a name="L206"></a><tt class="py-lineno"> 206</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-66" class="py-name"><a title="googleapiclient.errors.UnknownApiNameOrVersion" class="py-name" href="#" onclick="return doclink('link-66', 'UnknownApiNameOrVersion', 'link-16');">UnknownApiNameOrVersion</a></tt><tt class="py-op">(</tt><tt class="py-string">"name: %s  version: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">serviceName</tt><tt class="py-op">,</tt> </tt>
-<a name="L207"></a><tt class="py-lineno"> 207</tt>  <tt class="py-line">                                                               <tt class="py-name">version</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L208"></a><tt class="py-lineno"> 208</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L209"></a><tt class="py-lineno"> 209</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">e</tt> </tt>
-<a name="L210"></a><tt class="py-lineno"> 210</tt>  <tt class="py-line"> </tt>
-<a name="L211"></a><tt class="py-lineno"> 211</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-67" class="py-name" targets="Function googleapiclient.discovery.build_from_document()=googleapiclient.discovery-module.html#build_from_document"><a title="googleapiclient.discovery.build_from_document" class="py-name" href="#" onclick="return doclink('link-67', 'build_from_document', 'link-67');">build_from_document</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt id="link-68" class="py-name" targets="Module googleapiclient.discovery_cache.base=googleapiclient.discovery_cache.base-module.html"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-68', 'base', 'link-68');">base</a></tt><tt class="py-op">=</tt><tt class="py-name">discoveryServiceUrl</tt><tt class="py-op">,</tt> <tt id="link-69" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-69', 'http', 'link-21');">http</a></tt><tt class="py-op">=</tt><tt id="link-70" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-70', 'http', 'link-21');">http</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L212"></a><tt class="py-lineno"> 212</tt>  <tt class="py-line">      <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">developerKey</tt><tt class="py-op">,</tt> <tt id="link-71" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-71', 'model', 'link-33');">model</a></tt><tt class="py-op">=</tt><tt id="link-72" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-72', 'model', 'link-33');">model</a></tt><tt class="py-op">,</tt> <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">requestBuilder</tt><tt class="py-op">,</tt> </tt>
-<a name="L213"></a><tt class="py-lineno"> 213</tt>  <tt class="py-line">      <tt class="py-name">credentials</tt><tt class="py-op">=</tt><tt class="py-name">credentials</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L214"></a><tt class="py-lineno"> 214</tt>  <tt class="py-line"> </tt>
-<a name="_retrieve_discovery_doc"></a><div id="_retrieve_discovery_doc-def"><a name="L215"></a><tt class="py-lineno"> 215</tt>  <tt class="py-line"> </tt>
-<a name="L216"></a><tt class="py-lineno"> 216</tt> <a class="py-toggle" href="#" id="_retrieve_discovery_doc-toggle" onclick="return toggle('_retrieve_discovery_doc');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_retrieve_discovery_doc">_retrieve_discovery_doc</a><tt class="py-op">(</tt><tt class="py-param">url</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">cache_discovery</tt><tt class="py-op">,</tt> <tt class="py-param">cache</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_retrieve_discovery_doc-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_retrieve_discovery_doc-expanded"><a name="L217"></a><tt class="py-lineno"> 217</tt>  <tt class="py-line">  <tt class="py-docstring">"""Retrieves the discovery_doc from cache or the internet.</tt> </tt>
-<a name="L218"></a><tt class="py-lineno"> 218</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L219"></a><tt class="py-lineno"> 219</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L220"></a><tt class="py-lineno"> 220</tt>  <tt class="py-line"><tt class="py-docstring">    url: string, the URL of the discovery document.</tt> </tt>
-<a name="L221"></a><tt class="py-lineno"> 221</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
-<a name="L222"></a><tt class="py-lineno"> 222</tt>  <tt class="py-line"><tt class="py-docstring">      like it through which HTTP requests will be made.</tt> </tt>
-<a name="L223"></a><tt class="py-lineno"> 223</tt>  <tt class="py-line"><tt class="py-docstring">    cache_discovery: Boolean, whether or not to cache the discovery doc.</tt> </tt>
-<a name="L224"></a><tt class="py-lineno"> 224</tt>  <tt class="py-line"><tt class="py-docstring">    cache: googleapiclient.discovery_cache.base.Cache, an optional cache</tt> </tt>
-<a name="L225"></a><tt class="py-lineno"> 225</tt>  <tt class="py-line"><tt class="py-docstring">      object for the discovery documents.</tt> </tt>
-<a name="L226"></a><tt class="py-lineno"> 226</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L227"></a><tt class="py-lineno"> 227</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L228"></a><tt class="py-lineno"> 228</tt>  <tt class="py-line"><tt class="py-docstring">    A unicode string representation of the discovery document.</tt> </tt>
-<a name="L229"></a><tt class="py-lineno"> 229</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L230"></a><tt class="py-lineno"> 230</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">cache_discovery</tt><tt class="py-op">:</tt> </tt>
-<a name="L231"></a><tt class="py-lineno"> 231</tt>  <tt class="py-line">    <tt class="py-keyword">from</tt> <tt class="py-op">.</tt> <tt class="py-keyword">import</tt> <tt id="link-73" class="py-name" targets="Package googleapiclient.discovery_cache=googleapiclient.discovery_cache-module.html"><a title="googleapiclient.discovery_cache" class="py-name" href="#" onclick="return doclink('link-73', 'discovery_cache', 'link-73');">discovery_cache</a></tt> </tt>
-<a name="L232"></a><tt class="py-lineno"> 232</tt>  <tt class="py-line">    <tt class="py-keyword">from</tt> <tt class="py-op">.</tt><tt id="link-74" class="py-name"><a title="googleapiclient.discovery_cache" class="py-name" href="#" onclick="return doclink('link-74', 'discovery_cache', 'link-73');">discovery_cache</a></tt> <tt class="py-keyword">import</tt> <tt id="link-75" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-75', 'base', 'link-68');">base</a></tt> </tt>
-<a name="L233"></a><tt class="py-lineno"> 233</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-76" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-76', 'cache', 'link-64');">cache</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L234"></a><tt class="py-lineno"> 234</tt>  <tt class="py-line">      <tt id="link-77" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-77', 'cache', 'link-64');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-78" class="py-name"><a title="googleapiclient.discovery_cache" class="py-name" href="#" onclick="return doclink('link-78', 'discovery_cache', 'link-73');">discovery_cache</a></tt><tt class="py-op">.</tt><tt id="link-79" class="py-name" targets="Function googleapiclient.discovery_cache.autodetect()=googleapiclient.discovery_cache-module.html#autodetect"><a title="googleapiclient.discovery_cache.autodetect" class="py-name" href="#" onclick="return doclink('link-79', 'autodetect', 'link-79');">autodetect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L235"></a><tt class="py-lineno"> 235</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-80" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-80', 'cache', 'link-64');">cache</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L236"></a><tt class="py-lineno"> 236</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-81" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-81', 'cache', 'link-64');">cache</a></tt><tt class="py-op">.</tt><tt id="link-82" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+<a name="L199"></a><tt class="py-lineno"> 199</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-63" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-63', 'http', 'link-21');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L200"></a><tt class="py-lineno"> 200</tt>  <tt class="py-line">    <tt id="link-64" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-64', 'http', 'link-21');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L201"></a><tt class="py-lineno"> 201</tt>  <tt class="py-line"> </tt>
+<a name="L202"></a><tt class="py-lineno"> 202</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">discovery_url</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">discoveryServiceUrl</tt><tt class="py-op">,</tt> <tt id="link-65" class="py-name"><a title="googleapiclient.discovery.V2_DISCOVERY_URI" class="py-name" href="#" onclick="return doclink('link-65', 'V2_DISCOVERY_URI', 'link-50');">V2_DISCOVERY_URI</a></tt><tt class="py-op">,</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L203"></a><tt class="py-lineno"> 203</tt>  <tt class="py-line">    <tt class="py-name">requested_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">discovery_url</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L204"></a><tt class="py-lineno"> 204</tt>  <tt class="py-line"> </tt>
+<a name="L205"></a><tt class="py-lineno"> 205</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L206"></a><tt class="py-lineno"> 206</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-66" class="py-name" targets="Function googleapiclient.discovery._retrieve_discovery_doc()=googleapiclient.discovery-module.html#_retrieve_discovery_doc"><a title="googleapiclient.discovery._retrieve_discovery_doc" class="py-name" href="#" onclick="return doclink('link-66', '_retrieve_discovery_doc', 'link-66');">_retrieve_discovery_doc</a></tt><tt class="py-op">(</tt><tt class="py-name">requested_url</tt><tt class="py-op">,</tt> <tt id="link-67" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-67', 'http', 'link-21');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">cache_discovery</tt><tt class="py-op">,</tt> </tt>
+<a name="L207"></a><tt class="py-lineno"> 207</tt>  <tt class="py-line">                                        <tt id="link-68" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.cache=googleapiclient.discovery_cache.appengine_memcache-module.html#cache,Variable googleapiclient.discovery_cache.file_cache.cache=googleapiclient.discovery_cache.file_cache-module.html#cache"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-68', 'cache', 'link-68');">cache</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L208"></a><tt class="py-lineno"> 208</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-69" class="py-name" targets="Function googleapiclient.discovery.build_from_document()=googleapiclient.discovery-module.html#build_from_document"><a title="googleapiclient.discovery.build_from_document" class="py-name" href="#" onclick="return doclink('link-69', 'build_from_document', 'link-69');">build_from_document</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt id="link-70" class="py-name" targets="Module googleapiclient.discovery_cache.base=googleapiclient.discovery_cache.base-module.html"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-70', 'base', 'link-70');">base</a></tt><tt class="py-op">=</tt><tt class="py-name">discovery_url</tt><tt class="py-op">,</tt> <tt id="link-71" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-71', 'http', 'link-21');">http</a></tt><tt class="py-op">=</tt><tt id="link-72" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-72', 'http', 'link-21');">http</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L209"></a><tt class="py-lineno"> 209</tt>  <tt class="py-line">          <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">developerKey</tt><tt class="py-op">,</tt> <tt id="link-73" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-73', 'model', 'link-33');">model</a></tt><tt class="py-op">=</tt><tt id="link-74" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-74', 'model', 'link-33');">model</a></tt><tt class="py-op">,</tt> <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">requestBuilder</tt><tt class="py-op">,</tt> </tt>
+<a name="L210"></a><tt class="py-lineno"> 210</tt>  <tt class="py-line">          <tt class="py-name">credentials</tt><tt class="py-op">=</tt><tt class="py-name">credentials</tt><tt class="py-op">)</tt> </tt>
+<a name="L211"></a><tt class="py-lineno"> 211</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt id="link-75" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-75', 'HttpError', 'link-4');">HttpError</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L212"></a><tt class="py-lineno"> 212</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">e</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-name">http_client</tt><tt class="py-op">.</tt><tt class="py-name">NOT_FOUND</tt><tt class="py-op">:</tt> </tt>
+<a name="L213"></a><tt class="py-lineno"> 213</tt>  <tt class="py-line">        <tt class="py-keyword">continue</tt> </tt>
+<a name="L214"></a><tt class="py-lineno"> 214</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L215"></a><tt class="py-lineno"> 215</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">e</tt> </tt>
+<a name="L216"></a><tt class="py-lineno"> 216</tt>  <tt class="py-line"> </tt>
+<a name="L217"></a><tt class="py-lineno"> 217</tt>  <tt class="py-line">  <tt class="py-keyword">raise</tt> <tt id="link-76" class="py-name"><a title="googleapiclient.errors.UnknownApiNameOrVersion" class="py-name" href="#" onclick="return doclink('link-76', 'UnknownApiNameOrVersion', 'link-16');">UnknownApiNameOrVersion</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L218"></a><tt class="py-lineno"> 218</tt>  <tt class="py-line">        <tt class="py-string">"name: %s  version: %s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">serviceName</tt><tt class="py-op">,</tt> <tt class="py-name">version</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L219"></a><tt class="py-lineno"> 219</tt>  <tt class="py-line"> </tt>
+<a name="_retrieve_discovery_doc"></a><div id="_retrieve_discovery_doc-def"><a name="L220"></a><tt class="py-lineno"> 220</tt>  <tt class="py-line"> </tt>
+<a name="L221"></a><tt class="py-lineno"> 221</tt> <a class="py-toggle" href="#" id="_retrieve_discovery_doc-toggle" onclick="return toggle('_retrieve_discovery_doc');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_retrieve_discovery_doc">_retrieve_discovery_doc</a><tt class="py-op">(</tt><tt class="py-param">url</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">cache_discovery</tt><tt class="py-op">,</tt> <tt class="py-param">cache</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_retrieve_discovery_doc-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_retrieve_discovery_doc-expanded"><a name="L222"></a><tt class="py-lineno"> 222</tt>  <tt class="py-line">  <tt class="py-docstring">"""Retrieves the discovery_doc from cache or the internet.</tt> </tt>
+<a name="L223"></a><tt class="py-lineno"> 223</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L224"></a><tt class="py-lineno"> 224</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L225"></a><tt class="py-lineno"> 225</tt>  <tt class="py-line"><tt class="py-docstring">    url: string, the URL of the discovery document.</tt> </tt>
+<a name="L226"></a><tt class="py-lineno"> 226</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
+<a name="L227"></a><tt class="py-lineno"> 227</tt>  <tt class="py-line"><tt class="py-docstring">      like it through which HTTP requests will be made.</tt> </tt>
+<a name="L228"></a><tt class="py-lineno"> 228</tt>  <tt class="py-line"><tt class="py-docstring">    cache_discovery: Boolean, whether or not to cache the discovery doc.</tt> </tt>
+<a name="L229"></a><tt class="py-lineno"> 229</tt>  <tt class="py-line"><tt class="py-docstring">    cache: googleapiclient.discovery_cache.base.Cache, an optional cache</tt> </tt>
+<a name="L230"></a><tt class="py-lineno"> 230</tt>  <tt class="py-line"><tt class="py-docstring">      object for the discovery documents.</tt> </tt>
+<a name="L231"></a><tt class="py-lineno"> 231</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L232"></a><tt class="py-lineno"> 232</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L233"></a><tt class="py-lineno"> 233</tt>  <tt class="py-line"><tt class="py-docstring">    A unicode string representation of the discovery document.</tt> </tt>
+<a name="L234"></a><tt class="py-lineno"> 234</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L235"></a><tt class="py-lineno"> 235</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">cache_discovery</tt><tt class="py-op">:</tt> </tt>
+<a name="L236"></a><tt class="py-lineno"> 236</tt>  <tt class="py-line">    <tt class="py-keyword">from</tt> <tt class="py-op">.</tt> <tt class="py-keyword">import</tt> <tt id="link-77" class="py-name" targets="Package googleapiclient.discovery_cache=googleapiclient.discovery_cache-module.html"><a title="googleapiclient.discovery_cache" class="py-name" href="#" onclick="return doclink('link-77', 'discovery_cache', 'link-77');">discovery_cache</a></tt> </tt>
+<a name="L237"></a><tt class="py-lineno"> 237</tt>  <tt class="py-line">    <tt class="py-keyword">from</tt> <tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="googleapiclient.discovery_cache" class="py-name" href="#" onclick="return doclink('link-78', 'discovery_cache', 'link-77');">discovery_cache</a></tt> <tt class="py-keyword">import</tt> <tt id="link-79" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-79', 'base', 'link-70');">base</a></tt> </tt>
+<a name="L238"></a><tt class="py-lineno"> 238</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-80" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-80', 'cache', 'link-68');">cache</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L239"></a><tt class="py-lineno"> 239</tt>  <tt class="py-line">      <tt id="link-81" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-81', 'cache', 'link-68');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-82" class="py-name"><a title="googleapiclient.discovery_cache" class="py-name" href="#" onclick="return doclink('link-82', 'discovery_cache', 'link-77');">discovery_cache</a></tt><tt class="py-op">.</tt><tt id="link-83" class="py-name" targets="Function googleapiclient.discovery_cache.autodetect()=googleapiclient.discovery_cache-module.html#autodetect"><a title="googleapiclient.discovery_cache.autodetect" class="py-name" href="#" onclick="return doclink('link-83', 'autodetect', 'link-83');">autodetect</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L240"></a><tt class="py-lineno"> 240</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-84" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-84', 'cache', 'link-68');">cache</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L241"></a><tt class="py-lineno"> 241</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-85" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-85', 'cache', 'link-68');">cache</a></tt><tt class="py-op">.</tt><tt id="link-86" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-82', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">)</tt> </tt>
-<a name="L237"></a><tt class="py-lineno"> 237</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">content</tt><tt class="py-op">:</tt> </tt>
-<a name="L238"></a><tt class="py-lineno"> 238</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
-<a name="L239"></a><tt class="py-lineno"> 239</tt>  <tt class="py-line"> </tt>
-<a name="L240"></a><tt class="py-lineno"> 240</tt>  <tt class="py-line">  <tt class="py-name">actual_url</tt> <tt class="py-op">=</tt> <tt class="py-name">url</tt> </tt>
-<a name="L241"></a><tt class="py-lineno"> 241</tt>  <tt class="py-line">  <tt class="py-comment"># REMOTE_ADDR is defined by the CGI spec [RFC3875] as the environment</tt> </tt>
-<a name="L242"></a><tt class="py-lineno"> 242</tt>  <tt class="py-line">  <tt class="py-comment"># variable that contains the network address of the client sending the</tt> </tt>
-<a name="L243"></a><tt class="py-lineno"> 243</tt>  <tt class="py-line">  <tt class="py-comment"># request. If it exists then add that to the request for the discovery</tt> </tt>
-<a name="L244"></a><tt class="py-lineno"> 244</tt>  <tt class="py-line">  <tt class="py-comment"># document to avoid exceeding the quota on discovery requests.</tt> </tt>
-<a name="L245"></a><tt class="py-lineno"> 245</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'REMOTE_ADDR'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">:</tt> </tt>
-<a name="L246"></a><tt class="py-lineno"> 246</tt>  <tt class="py-line">    <tt class="py-name">actual_url</tt> <tt class="py-op">=</tt> <tt class="py-name">_add_query_parameter</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'userIp'</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'REMOTE_ADDR'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L247"></a><tt class="py-lineno"> 247</tt>  <tt class="py-line">  <tt id="link-83" class="py-name"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-83', 'logger', 'link-44');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: GET %s'</tt><tt class="py-op">,</tt> <tt class="py-name">actual_url</tt><tt class="py-op">)</tt> </tt>
-<a name="L248"></a><tt class="py-lineno"> 248</tt>  <tt class="py-line"> </tt>
-<a name="L249"></a><tt class="py-lineno"> 249</tt>  <tt class="py-line">  <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-84" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-84', 'http', 'link-21');">http</a></tt><tt class="py-op">.</tt><tt id="link-85" class="py-name" targets="Method googleapiclient.http.HttpMock.request()=googleapiclient.http.HttpMock-class.html#request,Method googleapiclient.http.HttpMockSequence.request()=googleapiclient.http.HttpMockSequence-class.html#request,Method googleapiclient.model.BaseModel.request()=googleapiclient.model.BaseModel-class.html#request,Method googleapiclient.model.Model.request()=googleapiclient.model.Model-class.html#request"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-86', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">)</tt> </tt>
+<a name="L242"></a><tt class="py-lineno"> 242</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">content</tt><tt class="py-op">:</tt> </tt>
+<a name="L243"></a><tt class="py-lineno"> 243</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
+<a name="L244"></a><tt class="py-lineno"> 244</tt>  <tt class="py-line"> </tt>
+<a name="L245"></a><tt class="py-lineno"> 245</tt>  <tt class="py-line">  <tt class="py-name">actual_url</tt> <tt class="py-op">=</tt> <tt class="py-name">url</tt> </tt>
+<a name="L246"></a><tt class="py-lineno"> 246</tt>  <tt class="py-line">  <tt class="py-comment"># REMOTE_ADDR is defined by the CGI spec [RFC3875] as the environment</tt> </tt>
+<a name="L247"></a><tt class="py-lineno"> 247</tt>  <tt class="py-line">  <tt class="py-comment"># variable that contains the network address of the client sending the</tt> </tt>
+<a name="L248"></a><tt class="py-lineno"> 248</tt>  <tt class="py-line">  <tt class="py-comment"># request. If it exists then add that to the request for the discovery</tt> </tt>
+<a name="L249"></a><tt class="py-lineno"> 249</tt>  <tt class="py-line">  <tt class="py-comment"># document to avoid exceeding the quota on discovery requests.</tt> </tt>
+<a name="L250"></a><tt class="py-lineno"> 250</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'REMOTE_ADDR'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">:</tt> </tt>
+<a name="L251"></a><tt class="py-lineno"> 251</tt>  <tt class="py-line">    <tt class="py-name">actual_url</tt> <tt class="py-op">=</tt> <tt class="py-name">_add_query_parameter</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'userIp'</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">environ</tt><tt class="py-op">[</tt><tt class="py-string">'REMOTE_ADDR'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L252"></a><tt class="py-lineno"> 252</tt>  <tt class="py-line">  <tt id="link-87" class="py-name"><a title="googleapiclient.discovery.logger" class="py-name" href="#" onclick="return doclink('link-87', 'logger', 'link-44');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: GET %s'</tt><tt class="py-op">,</tt> <tt class="py-name">actual_url</tt><tt class="py-op">)</tt> </tt>
+<a name="L253"></a><tt class="py-lineno"> 253</tt>  <tt class="py-line"> </tt>
+<a name="L254"></a><tt class="py-lineno"> 254</tt>  <tt class="py-line">  <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-88" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-88', 'http', 'link-21');">http</a></tt><tt class="py-op">.</tt><tt id="link-89" class="py-name" targets="Method googleapiclient.http.HttpMock.request()=googleapiclient.http.HttpMock-class.html#request,Method googleapiclient.http.HttpMockSequence.request()=googleapiclient.http.HttpMockSequence-class.html#request,Method googleapiclient.model.BaseModel.request()=googleapiclient.model.BaseModel-class.html#request,Method googleapiclient.model.Model.request()=googleapiclient.model.Model-class.html#request"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-85', 'request', 'link-85');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">actual_url</tt><tt class="py-op">)</tt> </tt>
-<a name="L250"></a><tt class="py-lineno"> 250</tt>  <tt class="py-line"> </tt>
-<a name="L251"></a><tt class="py-lineno"> 251</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">400</tt><tt class="py-op">:</tt> </tt>
-<a name="L252"></a><tt class="py-lineno"> 252</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-86" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-86', 'HttpError', 'link-4');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">actual_url</tt><tt class="py-op">)</tt> </tt>
-<a name="L253"></a><tt class="py-lineno"> 253</tt>  <tt class="py-line"> </tt>
-<a name="L254"></a><tt class="py-lineno"> 254</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L255"></a><tt class="py-lineno"> 255</tt>  <tt class="py-line">    <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
-<a name="L256"></a><tt class="py-lineno"> 256</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L257"></a><tt class="py-lineno"> 257</tt>  <tt class="py-line">    <tt class="py-keyword">pass</tt> </tt>
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-89', 'request', 'link-89');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">actual_url</tt><tt class="py-op">)</tt> </tt>
+<a name="L255"></a><tt class="py-lineno"> 255</tt>  <tt class="py-line"> </tt>
+<a name="L256"></a><tt class="py-lineno"> 256</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">400</tt><tt class="py-op">:</tt> </tt>
+<a name="L257"></a><tt class="py-lineno"> 257</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-90" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-90', 'HttpError', 'link-4');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">actual_url</tt><tt class="py-op">)</tt> </tt>
 <a name="L258"></a><tt class="py-lineno"> 258</tt>  <tt class="py-line"> </tt>
 <a name="L259"></a><tt class="py-lineno"> 259</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L260"></a><tt class="py-lineno"> 260</tt>  <tt class="py-line">    <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L261"></a><tt class="py-lineno"> 261</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L262"></a><tt class="py-lineno"> 262</tt>  <tt class="py-line">    <tt id="link-87" class="py-name"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-87', 'logger', 'link-44');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Failed to parse as JSON: '</tt> <tt class="py-op">+</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L263"></a><tt class="py-lineno"> 263</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-88" class="py-name"><a title="googleapiclient.errors.InvalidJsonError" class="py-name" href="#" onclick="return doclink('link-88', 'InvalidJsonError', 'link-7');">InvalidJsonError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L264"></a><tt class="py-lineno"> 264</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">cache_discovery</tt> <tt class="py-keyword">and</tt> <tt id="link-89" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-89', 'cache', 'link-64');">cache</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L265"></a><tt class="py-lineno"> 265</tt>  <tt class="py-line">    <tt id="link-90" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-90', 'cache', 'link-64');">cache</a></tt><tt class="py-op">.</tt><tt id="link-91" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.set()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#set,Method googleapiclient.discovery_cache.base.Cache.set()=googleapiclient.discovery_cache.base.Cache-class.html#set,Method googleapiclient.discovery_cache.file_cache.Cache.set()=googleapiclient.discovery_cache.file_cache.Cache-class.html#set"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.set
+<a name="L260"></a><tt class="py-lineno"> 260</tt>  <tt class="py-line">    <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L261"></a><tt class="py-lineno"> 261</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
+<a name="L262"></a><tt class="py-lineno"> 262</tt>  <tt class="py-line">    <tt class="py-keyword">pass</tt> </tt>
+<a name="L263"></a><tt class="py-lineno"> 263</tt>  <tt class="py-line"> </tt>
+<a name="L264"></a><tt class="py-lineno"> 264</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L265"></a><tt class="py-lineno"> 265</tt>  <tt class="py-line">    <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L266"></a><tt class="py-lineno"> 266</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L267"></a><tt class="py-lineno"> 267</tt>  <tt class="py-line">    <tt id="link-91" class="py-name"><a title="googleapiclient.discovery.logger" class="py-name" href="#" onclick="return doclink('link-91', 'logger', 'link-44');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">(</tt><tt class="py-string">'Failed to parse as JSON: '</tt> <tt class="py-op">+</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L268"></a><tt class="py-lineno"> 268</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt id="link-92" class="py-name"><a title="googleapiclient.errors.InvalidJsonError" class="py-name" href="#" onclick="return doclink('link-92', 'InvalidJsonError', 'link-7');">InvalidJsonError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L269"></a><tt class="py-lineno"> 269</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">cache_discovery</tt> <tt class="py-keyword">and</tt> <tt id="link-93" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-93', 'cache', 'link-68');">cache</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L270"></a><tt class="py-lineno"> 270</tt>  <tt class="py-line">    <tt id="link-94" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-94', 'cache', 'link-68');">cache</a></tt><tt class="py-op">.</tt><tt id="link-95" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.set()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#set,Method googleapiclient.discovery_cache.base.Cache.set()=googleapiclient.discovery_cache.base.Cache-class.html#set,Method googleapiclient.discovery_cache.file_cache.Cache.set()=googleapiclient.discovery_cache.file_cache.Cache-class.html#set"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.set
 googleapiclient.discovery_cache.base.Cache.set
-googleapiclient.discovery_cache.file_cache.Cache.set" class="py-name" href="#" onclick="return doclink('link-91', 'set', 'link-91');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L266"></a><tt class="py-lineno"> 266</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
-</div><a name="L267"></a><tt class="py-lineno"> 267</tt>  <tt class="py-line"> </tt>
-<a name="build_from_document"></a><div id="build_from_document-def"><a name="L268"></a><tt class="py-lineno"> 268</tt>  <tt class="py-line"> </tt>
-<a name="L269"></a><tt class="py-lineno"> 269</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L270"></a><tt class="py-lineno"> 270</tt> <a class="py-toggle" href="#" id="build_from_document-toggle" onclick="return toggle('build_from_document');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#build_from_document">build_from_document</a><tt class="py-op">(</tt> </tt>
-<a name="L271"></a><tt class="py-lineno"> 271</tt>  <tt class="py-line">    <tt class="py-param">service</tt><tt class="py-op">,</tt> </tt>
-<a name="L272"></a><tt class="py-lineno"> 272</tt>  <tt class="py-line">    <tt class="py-param">base</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L273"></a><tt class="py-lineno"> 273</tt>  <tt class="py-line">    <tt class="py-param">future</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L274"></a><tt class="py-lineno"> 274</tt>  <tt class="py-line">    <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L275"></a><tt class="py-lineno"> 275</tt>  <tt class="py-line">    <tt class="py-param">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L276"></a><tt class="py-lineno"> 276</tt>  <tt class="py-line">    <tt class="py-param">model</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L277"></a><tt class="py-lineno"> 277</tt>  <tt class="py-line">    <tt class="py-param">requestBuilder</tt><tt class="py-op">=</tt><tt id="link-92" class="py-name"><a title="googleapiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-92', 'HttpRequest', 'link-25');">HttpRequest</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L278"></a><tt class="py-lineno"> 278</tt>  <tt class="py-line">    <tt class="py-param">credentials</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="build_from_document-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="build_from_document-expanded"><a name="L279"></a><tt class="py-lineno"> 279</tt>  <tt class="py-line">  <tt class="py-docstring">"""Create a Resource for interacting with an API.</tt> </tt>
-<a name="L280"></a><tt class="py-lineno"> 280</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L281"></a><tt class="py-lineno"> 281</tt>  <tt class="py-line"><tt class="py-docstring">  Same as `build()`, but constructs the Resource object from a discovery</tt> </tt>
-<a name="L282"></a><tt class="py-lineno"> 282</tt>  <tt class="py-line"><tt class="py-docstring">  document that is it given, as opposed to retrieving one over HTTP.</tt> </tt>
-<a name="L283"></a><tt class="py-lineno"> 283</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L284"></a><tt class="py-lineno"> 284</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L285"></a><tt class="py-lineno"> 285</tt>  <tt class="py-line"><tt class="py-docstring">    service: string or object, the JSON discovery document describing the API.</tt> </tt>
-<a name="L286"></a><tt class="py-lineno"> 286</tt>  <tt class="py-line"><tt class="py-docstring">      The value passed in may either be the JSON string or the deserialized</tt> </tt>
-<a name="L287"></a><tt class="py-lineno"> 287</tt>  <tt class="py-line"><tt class="py-docstring">      JSON.</tt> </tt>
-<a name="L288"></a><tt class="py-lineno"> 288</tt>  <tt class="py-line"><tt class="py-docstring">    base: string, base URI for all HTTP requests, usually the discovery URI.</tt> </tt>
-<a name="L289"></a><tt class="py-lineno"> 289</tt>  <tt class="py-line"><tt class="py-docstring">      This parameter is no longer used as rootUrl and servicePath are included</tt> </tt>
-<a name="L290"></a><tt class="py-lineno"> 290</tt>  <tt class="py-line"><tt class="py-docstring">      within the discovery document. (deprecated)</tt> </tt>
-<a name="L291"></a><tt class="py-lineno"> 291</tt>  <tt class="py-line"><tt class="py-docstring">    future: string, discovery document with future capabilities (deprecated).</tt> </tt>
-<a name="L292"></a><tt class="py-lineno"> 292</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
-<a name="L293"></a><tt class="py-lineno"> 293</tt>  <tt class="py-line"><tt class="py-docstring">      like it that HTTP requests will be made through.</tt> </tt>
-<a name="L294"></a><tt class="py-lineno"> 294</tt>  <tt class="py-line"><tt class="py-docstring">    developerKey: string, Key for controlling API usage, generated</tt> </tt>
-<a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line"><tt class="py-docstring">      from the API Console.</tt> </tt>
-<a name="L296"></a><tt class="py-lineno"> 296</tt>  <tt class="py-line"><tt class="py-docstring">    model: Model class instance that serializes and de-serializes requests and</tt> </tt>
-<a name="L297"></a><tt class="py-lineno"> 297</tt>  <tt class="py-line"><tt class="py-docstring">      responses.</tt> </tt>
-<a name="L298"></a><tt class="py-lineno"> 298</tt>  <tt class="py-line"><tt class="py-docstring">    requestBuilder: Takes an http request and packages it up to be executed.</tt> </tt>
-<a name="L299"></a><tt class="py-lineno"> 299</tt>  <tt class="py-line"><tt class="py-docstring">    credentials: object, credentials to be used for authentication.</tt> </tt>
-<a name="L300"></a><tt class="py-lineno"> 300</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L301"></a><tt class="py-lineno"> 301</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L302"></a><tt class="py-lineno"> 302</tt>  <tt class="py-line"><tt class="py-docstring">    A Resource object with methods for interacting with the service.</tt> </tt>
-<a name="L303"></a><tt class="py-lineno"> 303</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L304"></a><tt class="py-lineno"> 304</tt>  <tt class="py-line"> </tt>
-<a name="L305"></a><tt class="py-lineno"> 305</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-93" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-93', 'http', 'link-21');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L306"></a><tt class="py-lineno"> 306</tt>  <tt class="py-line">    <tt id="link-94" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-94', 'http', 'link-21');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L307"></a><tt class="py-lineno"> 307</tt>  <tt class="py-line"> </tt>
-<a name="L308"></a><tt class="py-lineno"> 308</tt>  <tt class="py-line">  <tt class="py-comment"># future is no longer used.</tt> </tt>
-<a name="L309"></a><tt class="py-lineno"> 309</tt>  <tt class="py-line">  <tt class="py-name">future</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L310"></a><tt class="py-lineno"> 310</tt>  <tt class="py-line"> </tt>
-<a name="L311"></a><tt class="py-lineno"> 311</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">string_types</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L312"></a><tt class="py-lineno"> 312</tt>  <tt class="py-line">    <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">)</tt> </tt>
-<a name="L313"></a><tt class="py-lineno"> 313</tt>  <tt class="py-line">  <tt id="link-95" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-95', 'base', 'link-68');">base</a></tt> <tt class="py-op">=</tt> <tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">service</tt><tt class="py-op">[</tt><tt class="py-string">'servicePath'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L314"></a><tt class="py-lineno"> 314</tt>  <tt class="py-line">  <tt id="link-96" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-96', 'schema', 'link-42');">schema</a></tt> <tt class="py-op">=</tt> <tt id="link-97" class="py-name"><a title="googleapiclient.schema.Schemas" class="py-name" href="#" onclick="return doclink('link-97', 'Schemas', 'link-43');">Schemas</a></tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">)</tt> </tt>
+googleapiclient.discovery_cache.file_cache.Cache.set" class="py-name" href="#" onclick="return doclink('link-95', 'set', 'link-95');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L271"></a><tt class="py-lineno"> 271</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
+</div><a name="L272"></a><tt class="py-lineno"> 272</tt>  <tt class="py-line"> </tt>
+<a name="build_from_document"></a><div id="build_from_document-def"><a name="L273"></a><tt class="py-lineno"> 273</tt>  <tt class="py-line"> </tt>
+<a name="L274"></a><tt class="py-lineno"> 274</tt>  <tt class="py-line"><tt class="py-decorator">@</tt><tt class="py-decorator">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L275"></a><tt class="py-lineno"> 275</tt> <a class="py-toggle" href="#" id="build_from_document-toggle" onclick="return toggle('build_from_document');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#build_from_document">build_from_document</a><tt class="py-op">(</tt> </tt>
+<a name="L276"></a><tt class="py-lineno"> 276</tt>  <tt class="py-line">    <tt class="py-param">service</tt><tt class="py-op">,</tt> </tt>
+<a name="L277"></a><tt class="py-lineno"> 277</tt>  <tt class="py-line">    <tt class="py-param">base</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L278"></a><tt class="py-lineno"> 278</tt>  <tt class="py-line">    <tt class="py-param">future</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L279"></a><tt class="py-lineno"> 279</tt>  <tt class="py-line">    <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L280"></a><tt class="py-lineno"> 280</tt>  <tt class="py-line">    <tt class="py-param">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L281"></a><tt class="py-lineno"> 281</tt>  <tt class="py-line">    <tt class="py-param">model</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L282"></a><tt class="py-lineno"> 282</tt>  <tt class="py-line">    <tt class="py-param">requestBuilder</tt><tt class="py-op">=</tt><tt id="link-96" class="py-name"><a title="googleapiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-96', 'HttpRequest', 'link-25');">HttpRequest</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L283"></a><tt class="py-lineno"> 283</tt>  <tt class="py-line">    <tt class="py-param">credentials</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="build_from_document-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="build_from_document-expanded"><a name="L284"></a><tt class="py-lineno"> 284</tt>  <tt class="py-line">  <tt class="py-docstring">"""Create a Resource for interacting with an API.</tt> </tt>
+<a name="L285"></a><tt class="py-lineno"> 285</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L286"></a><tt class="py-lineno"> 286</tt>  <tt class="py-line"><tt class="py-docstring">  Same as `build()`, but constructs the Resource object from a discovery</tt> </tt>
+<a name="L287"></a><tt class="py-lineno"> 287</tt>  <tt class="py-line"><tt class="py-docstring">  document that is it given, as opposed to retrieving one over HTTP.</tt> </tt>
+<a name="L288"></a><tt class="py-lineno"> 288</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L289"></a><tt class="py-lineno"> 289</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L290"></a><tt class="py-lineno"> 290</tt>  <tt class="py-line"><tt class="py-docstring">    service: string or object, the JSON discovery document describing the API.</tt> </tt>
+<a name="L291"></a><tt class="py-lineno"> 291</tt>  <tt class="py-line"><tt class="py-docstring">      The value passed in may either be the JSON string or the deserialized</tt> </tt>
+<a name="L292"></a><tt class="py-lineno"> 292</tt>  <tt class="py-line"><tt class="py-docstring">      JSON.</tt> </tt>
+<a name="L293"></a><tt class="py-lineno"> 293</tt>  <tt class="py-line"><tt class="py-docstring">    base: string, base URI for all HTTP requests, usually the discovery URI.</tt> </tt>
+<a name="L294"></a><tt class="py-lineno"> 294</tt>  <tt class="py-line"><tt class="py-docstring">      This parameter is no longer used as rootUrl and servicePath are included</tt> </tt>
+<a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line"><tt class="py-docstring">      within the discovery document. (deprecated)</tt> </tt>
+<a name="L296"></a><tt class="py-lineno"> 296</tt>  <tt class="py-line"><tt class="py-docstring">    future: string, discovery document with future capabilities (deprecated).</tt> </tt>
+<a name="L297"></a><tt class="py-lineno"> 297</tt>  <tt class="py-line"><tt class="py-docstring">    http: httplib2.Http, An instance of httplib2.Http or something that acts</tt> </tt>
+<a name="L298"></a><tt class="py-lineno"> 298</tt>  <tt class="py-line"><tt class="py-docstring">      like it that HTTP requests will be made through.</tt> </tt>
+<a name="L299"></a><tt class="py-lineno"> 299</tt>  <tt class="py-line"><tt class="py-docstring">    developerKey: string, Key for controlling API usage, generated</tt> </tt>
+<a name="L300"></a><tt class="py-lineno"> 300</tt>  <tt class="py-line"><tt class="py-docstring">      from the API Console.</tt> </tt>
+<a name="L301"></a><tt class="py-lineno"> 301</tt>  <tt class="py-line"><tt class="py-docstring">    model: Model class instance that serializes and de-serializes requests and</tt> </tt>
+<a name="L302"></a><tt class="py-lineno"> 302</tt>  <tt class="py-line"><tt class="py-docstring">      responses.</tt> </tt>
+<a name="L303"></a><tt class="py-lineno"> 303</tt>  <tt class="py-line"><tt class="py-docstring">    requestBuilder: Takes an http request and packages it up to be executed.</tt> </tt>
+<a name="L304"></a><tt class="py-lineno"> 304</tt>  <tt class="py-line"><tt class="py-docstring">    credentials: object, credentials to be used for authentication.</tt> </tt>
+<a name="L305"></a><tt class="py-lineno"> 305</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L306"></a><tt class="py-lineno"> 306</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L307"></a><tt class="py-lineno"> 307</tt>  <tt class="py-line"><tt class="py-docstring">    A Resource object with methods for interacting with the service.</tt> </tt>
+<a name="L308"></a><tt class="py-lineno"> 308</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L309"></a><tt class="py-lineno"> 309</tt>  <tt class="py-line"> </tt>
+<a name="L310"></a><tt class="py-lineno"> 310</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-97" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-97', 'http', 'link-21');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L311"></a><tt class="py-lineno"> 311</tt>  <tt class="py-line">    <tt id="link-98" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-98', 'http', 'link-21');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Http</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L312"></a><tt class="py-lineno"> 312</tt>  <tt class="py-line"> </tt>
+<a name="L313"></a><tt class="py-lineno"> 313</tt>  <tt class="py-line">  <tt class="py-comment"># future is no longer used.</tt> </tt>
+<a name="L314"></a><tt class="py-lineno"> 314</tt>  <tt class="py-line">  <tt class="py-name">future</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
 <a name="L315"></a><tt class="py-lineno"> 315</tt>  <tt class="py-line"> </tt>
-<a name="L316"></a><tt class="py-lineno"> 316</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">credentials</tt><tt class="py-op">:</tt> </tt>
-<a name="L317"></a><tt class="py-lineno"> 317</tt>  <tt class="py-line">    <tt class="py-comment"># If credentials were passed in, we could have two cases:</tt> </tt>
-<a name="L318"></a><tt class="py-lineno"> 318</tt>  <tt class="py-line">    <tt class="py-comment"># 1. the scopes were specified, in which case the given credentials</tt> </tt>
-<a name="L319"></a><tt class="py-lineno"> 319</tt>  <tt class="py-line">    <tt class="py-comment">#    are used for authorizing the http;</tt> </tt>
-<a name="L320"></a><tt class="py-lineno"> 320</tt>  <tt class="py-line">    <tt class="py-comment"># 2. the scopes were not provided (meaning the Application Default</tt> </tt>
-<a name="L321"></a><tt class="py-lineno"> 321</tt>  <tt class="py-line">    <tt class="py-comment">#    Credentials are to be used). In this case, the Application Default</tt> </tt>
-<a name="L322"></a><tt class="py-lineno"> 322</tt>  <tt class="py-line">    <tt class="py-comment">#    Credentials are built and used instead of the original credentials.</tt> </tt>
-<a name="L323"></a><tt class="py-lineno"> 323</tt>  <tt class="py-line">    <tt class="py-comment">#    If there are no scopes found (meaning the given service requires no</tt> </tt>
-<a name="L324"></a><tt class="py-lineno"> 324</tt>  <tt class="py-line">    <tt class="py-comment">#    authentication), there is no authorization of the http.</tt> </tt>
-<a name="L325"></a><tt class="py-lineno"> 325</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">credentials</tt><tt class="py-op">,</tt> <tt class="py-name">GoogleCredentials</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> </tt>
-<a name="L326"></a><tt class="py-lineno"> 326</tt>  <tt class="py-line">        <tt class="py-name">credentials</tt><tt class="py-op">.</tt><tt class="py-name">create_scoped_required</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L327"></a><tt class="py-lineno"> 327</tt>  <tt class="py-line">      <tt class="py-name">scopes</tt> <tt class="py-op">=</tt> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+<a name="L316"></a><tt class="py-lineno"> 316</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">string_types</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L317"></a><tt class="py-lineno"> 317</tt>  <tt class="py-line">    <tt class="py-name">service</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">)</tt> </tt>
+<a name="L318"></a><tt class="py-lineno"> 318</tt>  <tt class="py-line">  <tt id="link-99" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-99', 'base', 'link-70');">base</a></tt> <tt class="py-op">=</tt> <tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">service</tt><tt class="py-op">[</tt><tt class="py-string">'servicePath'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L319"></a><tt class="py-lineno"> 319</tt>  <tt class="py-line">  <tt id="link-100" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-100', 'schema', 'link-42');">schema</a></tt> <tt class="py-op">=</tt> <tt id="link-101" class="py-name"><a title="googleapiclient.schema.Schemas" class="py-name" href="#" onclick="return doclink('link-101', 'Schemas', 'link-43');">Schemas</a></tt><tt class="py-op">(</tt><tt class="py-name">service</tt><tt class="py-op">)</tt> </tt>
+<a name="L320"></a><tt class="py-lineno"> 320</tt>  <tt class="py-line"> </tt>
+<a name="L321"></a><tt class="py-lineno"> 321</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">credentials</tt><tt class="py-op">:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno"> 322</tt>  <tt class="py-line">    <tt class="py-comment"># If credentials were passed in, we could have two cases:</tt> </tt>
+<a name="L323"></a><tt class="py-lineno"> 323</tt>  <tt class="py-line">    <tt class="py-comment"># 1. the scopes were specified, in which case the given credentials</tt> </tt>
+<a name="L324"></a><tt class="py-lineno"> 324</tt>  <tt class="py-line">    <tt class="py-comment">#    are used for authorizing the http;</tt> </tt>
+<a name="L325"></a><tt class="py-lineno"> 325</tt>  <tt class="py-line">    <tt class="py-comment"># 2. the scopes were not provided (meaning the Application Default</tt> </tt>
+<a name="L326"></a><tt class="py-lineno"> 326</tt>  <tt class="py-line">    <tt class="py-comment">#    Credentials are to be used). In this case, the Application Default</tt> </tt>
+<a name="L327"></a><tt class="py-lineno"> 327</tt>  <tt class="py-line">    <tt class="py-comment">#    Credentials are built and used instead of the original credentials.</tt> </tt>
+<a name="L328"></a><tt class="py-lineno"> 328</tt>  <tt class="py-line">    <tt class="py-comment">#    If there are no scopes found (meaning the given service requires no</tt> </tt>
+<a name="L329"></a><tt class="py-lineno"> 329</tt>  <tt class="py-line">    <tt class="py-comment">#    authentication), there is no authorization of the http.</tt> </tt>
+<a name="L330"></a><tt class="py-lineno"> 330</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">credentials</tt><tt class="py-op">,</tt> <tt class="py-name">GoogleCredentials</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L331"></a><tt class="py-lineno"> 331</tt>  <tt class="py-line">        <tt class="py-name">credentials</tt><tt class="py-op">.</tt><tt class="py-name">create_scoped_required</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L332"></a><tt class="py-lineno"> 332</tt>  <tt class="py-line">      <tt class="py-name">scopes</tt> <tt class="py-op">=</tt> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-98', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'auth'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-102', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'auth'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-99', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'oauth2'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-103', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'oauth2'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-100', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'scopes'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L328"></a><tt class="py-lineno"> 328</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">scopes</tt><tt class="py-op">:</tt> </tt>
-<a name="L329"></a><tt class="py-lineno"> 329</tt>  <tt class="py-line">        <tt class="py-name">credentials</tt> <tt class="py-op">=</tt> <tt class="py-name">credentials</tt><tt class="py-op">.</tt><tt class="py-name">create_scoped</tt><tt class="py-op">(</tt><tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">scopes</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L330"></a><tt class="py-lineno"> 330</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L331"></a><tt class="py-lineno"> 331</tt>  <tt class="py-line">        <tt class="py-comment"># No need to authorize the http object</tt> </tt>
-<a name="L332"></a><tt class="py-lineno"> 332</tt>  <tt class="py-line">        <tt class="py-comment"># if the service does not require authentication.</tt> </tt>
-<a name="L333"></a><tt class="py-lineno"> 333</tt>  <tt class="py-line">        <tt class="py-name">credentials</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L334"></a><tt class="py-lineno"> 334</tt>  <tt class="py-line"> </tt>
-<a name="L335"></a><tt class="py-lineno"> 335</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">credentials</tt><tt class="py-op">:</tt> </tt>
-<a name="L336"></a><tt class="py-lineno"> 336</tt>  <tt class="py-line">      <tt id="link-101" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-101', 'http', 'link-21');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">credentials</tt><tt class="py-op">.</tt><tt class="py-name">authorize</tt><tt class="py-op">(</tt><tt id="link-102" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-102', 'http', 'link-21');">http</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L337"></a><tt class="py-lineno"> 337</tt>  <tt class="py-line"> </tt>
-<a name="L338"></a><tt class="py-lineno"> 338</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-103" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-103', 'model', 'link-33');">model</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L339"></a><tt class="py-lineno"> 339</tt>  <tt class="py-line">    <tt class="py-name">features</tt> <tt class="py-op">=</tt> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt id="link-104" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-104', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'scopes'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L333"></a><tt class="py-lineno"> 333</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">scopes</tt><tt class="py-op">:</tt> </tt>
+<a name="L334"></a><tt class="py-lineno"> 334</tt>  <tt class="py-line">        <tt class="py-name">credentials</tt> <tt class="py-op">=</tt> <tt class="py-name">credentials</tt><tt class="py-op">.</tt><tt class="py-name">create_scoped</tt><tt class="py-op">(</tt><tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">scopes</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L335"></a><tt class="py-lineno"> 335</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L336"></a><tt class="py-lineno"> 336</tt>  <tt class="py-line">        <tt class="py-comment"># No need to authorize the http object</tt> </tt>
+<a name="L337"></a><tt class="py-lineno"> 337</tt>  <tt class="py-line">        <tt class="py-comment"># if the service does not require authentication.</tt> </tt>
+<a name="L338"></a><tt class="py-lineno"> 338</tt>  <tt class="py-line">        <tt class="py-name">credentials</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L339"></a><tt class="py-lineno"> 339</tt>  <tt class="py-line"> </tt>
+<a name="L340"></a><tt class="py-lineno"> 340</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">credentials</tt><tt class="py-op">:</tt> </tt>
+<a name="L341"></a><tt class="py-lineno"> 341</tt>  <tt class="py-line">      <tt id="link-105" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-105', 'http', 'link-21');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">credentials</tt><tt class="py-op">.</tt><tt class="py-name">authorize</tt><tt class="py-op">(</tt><tt id="link-106" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-106', 'http', 'link-21');">http</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L342"></a><tt class="py-lineno"> 342</tt>  <tt class="py-line"> </tt>
+<a name="L343"></a><tt class="py-lineno"> 343</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt id="link-107" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-107', 'model', 'link-33');">model</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L344"></a><tt class="py-lineno"> 344</tt>  <tt class="py-line">    <tt class="py-name">features</tt> <tt class="py-op">=</tt> <tt class="py-name">service</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-104', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'features'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L340"></a><tt class="py-lineno"> 340</tt>  <tt class="py-line">    <tt id="link-105" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-105', 'model', 'link-33');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-106" class="py-name"><a title="googleapiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-106', 'JsonModel', 'link-34');">JsonModel</a></tt><tt class="py-op">(</tt><tt class="py-string">'dataWrapper'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">features</tt><tt class="py-op">)</tt> </tt>
-<a name="L341"></a><tt class="py-lineno"> 341</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-107" class="py-name" targets="Class googleapiclient.discovery.Resource=googleapiclient.discovery.Resource-class.html"><a title="googleapiclient.discovery.Resource" class="py-name" href="#" onclick="return doclink('link-107', 'Resource', 'link-107');">Resource</a></tt><tt class="py-op">(</tt><tt id="link-108" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-108', 'http', 'link-21');">http</a></tt><tt class="py-op">=</tt><tt id="link-109" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-109', 'http', 'link-21');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">baseUrl</tt><tt class="py-op">=</tt><tt id="link-110" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-110', 'base', 'link-68');">base</a></tt><tt class="py-op">,</tt> <tt id="link-111" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-111', 'model', 'link-33');">model</a></tt><tt class="py-op">=</tt><tt id="link-112" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-112', 'model', 'link-33');">model</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L342"></a><tt class="py-lineno"> 342</tt>  <tt class="py-line">                  <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">developerKey</tt><tt class="py-op">,</tt> <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">requestBuilder</tt><tt class="py-op">,</tt> </tt>
-<a name="L343"></a><tt class="py-lineno"> 343</tt>  <tt class="py-line">                  <tt class="py-name">resourceDesc</tt><tt class="py-op">=</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">=</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt id="link-113" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-113', 'schema', 'link-42');">schema</a></tt><tt class="py-op">=</tt><tt id="link-114" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-114', 'schema', 'link-42');">schema</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L344"></a><tt class="py-lineno"> 344</tt>  <tt class="py-line"> </tt>
-<a name="_cast"></a><div id="_cast-def"><a name="L345"></a><tt class="py-lineno"> 345</tt>  <tt class="py-line"> </tt>
-<a name="L346"></a><tt class="py-lineno"> 346</tt> <a class="py-toggle" href="#" id="_cast-toggle" onclick="return toggle('_cast');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_cast">_cast</a><tt class="py-op">(</tt><tt class="py-param">value</tt><tt class="py-op">,</tt> <tt class="py-param">schema_type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_cast-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_cast-expanded"><a name="L347"></a><tt class="py-lineno"> 347</tt>  <tt class="py-line">  <tt class="py-docstring">"""Convert value to a string based on JSON Schema type.</tt> </tt>
-<a name="L348"></a><tt class="py-lineno"> 348</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L349"></a><tt class="py-lineno"> 349</tt>  <tt class="py-line"><tt class="py-docstring">  See http://tools.ietf.org/html/draft-zyp-json-schema-03 for more details on</tt> </tt>
-<a name="L350"></a><tt class="py-lineno"> 350</tt>  <tt class="py-line"><tt class="py-docstring">  JSON Schema.</tt> </tt>
-<a name="L351"></a><tt class="py-lineno"> 351</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L352"></a><tt class="py-lineno"> 352</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L353"></a><tt class="py-lineno"> 353</tt>  <tt class="py-line"><tt class="py-docstring">    value: any, the value to convert</tt> </tt>
-<a name="L354"></a><tt class="py-lineno"> 354</tt>  <tt class="py-line"><tt class="py-docstring">    schema_type: string, the type that value should be interpreted as</tt> </tt>
-<a name="L355"></a><tt class="py-lineno"> 355</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L356"></a><tt class="py-lineno"> 356</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L357"></a><tt class="py-lineno"> 357</tt>  <tt class="py-line"><tt class="py-docstring">    A string representation of 'value' based on the schema_type.</tt> </tt>
-<a name="L358"></a><tt class="py-lineno"> 358</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L359"></a><tt class="py-lineno"> 359</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'string'</tt><tt class="py-op">:</tt> </tt>
-<a name="L360"></a><tt class="py-lineno"> 360</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L361"></a><tt class="py-lineno"> 361</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
-<a name="L362"></a><tt class="py-lineno"> 362</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L363"></a><tt class="py-lineno"> 363</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
-<a name="L364"></a><tt class="py-lineno"> 364</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'integer'</tt><tt class="py-op">:</tt> </tt>
-<a name="L365"></a><tt class="py-lineno"> 365</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L366"></a><tt class="py-lineno"> 366</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'number'</tt><tt class="py-op">:</tt> </tt>
-<a name="L367"></a><tt class="py-lineno"> 367</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L368"></a><tt class="py-lineno"> 368</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'boolean'</tt><tt class="py-op">:</tt> </tt>
-<a name="L369"></a><tt class="py-lineno"> 369</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L370"></a><tt class="py-lineno"> 370</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L371"></a><tt class="py-lineno"> 371</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L372"></a><tt class="py-lineno"> 372</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
-<a name="L373"></a><tt class="py-lineno"> 373</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L374"></a><tt class="py-lineno"> 374</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L375"></a><tt class="py-lineno"> 375</tt>  <tt class="py-line"> </tt>
-<a name="_media_size_to_long"></a><div id="_media_size_to_long-def"><a name="L376"></a><tt class="py-lineno"> 376</tt>  <tt class="py-line"> </tt>
-<a name="L377"></a><tt class="py-lineno"> 377</tt> <a class="py-toggle" href="#" id="_media_size_to_long-toggle" onclick="return toggle('_media_size_to_long');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_media_size_to_long">_media_size_to_long</a><tt class="py-op">(</tt><tt class="py-param">maxSize</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_media_size_to_long-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_media_size_to_long-expanded"><a name="L378"></a><tt class="py-lineno"> 378</tt>  <tt class="py-line">  <tt class="py-docstring">"""Convert a string media size, such as 10GB or 3TB into an integer.</tt> </tt>
-<a name="L379"></a><tt class="py-lineno"> 379</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L380"></a><tt class="py-lineno"> 380</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L381"></a><tt class="py-lineno"> 381</tt>  <tt class="py-line"><tt class="py-docstring">    maxSize: string, size as a string, such as 2MB or 7GB.</tt> </tt>
-<a name="L382"></a><tt class="py-lineno"> 382</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L383"></a><tt class="py-lineno"> 383</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L384"></a><tt class="py-lineno"> 384</tt>  <tt class="py-line"><tt class="py-docstring">    The size as an integer value.</tt> </tt>
-<a name="L385"></a><tt class="py-lineno"> 385</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L386"></a><tt class="py-lineno"> 386</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
-<a name="L387"></a><tt class="py-lineno"> 387</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
-<a name="L388"></a><tt class="py-lineno"> 388</tt>  <tt class="py-line">  <tt class="py-name">units</tt> <tt class="py-op">=</tt> <tt class="py-name">maxSize</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L389"></a><tt class="py-lineno"> 389</tt>  <tt class="py-line">  <tt class="py-name">bit_shift</tt> <tt class="py-op">=</tt> <tt id="link-115" class="py-name"><a title="googleapiclient.discovery._MEDIA_SIZE_BIT_SHIFTS" class="py-name" href="#" onclick="return doclink('link-115', '_MEDIA_SIZE_BIT_SHIFTS', 'link-50');">_MEDIA_SIZE_BIT_SHIFTS</a></tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-108', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'features'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L345"></a><tt class="py-lineno"> 345</tt>  <tt class="py-line">    <tt id="link-109" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-109', 'model', 'link-33');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-110" class="py-name"><a title="googleapiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-110', 'JsonModel', 'link-34');">JsonModel</a></tt><tt class="py-op">(</tt><tt class="py-string">'dataWrapper'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">features</tt><tt class="py-op">)</tt> </tt>
+<a name="L346"></a><tt class="py-lineno"> 346</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-111" class="py-name" targets="Class googleapiclient.discovery.Resource=googleapiclient.discovery.Resource-class.html"><a title="googleapiclient.discovery.Resource" class="py-name" href="#" onclick="return doclink('link-111', 'Resource', 'link-111');">Resource</a></tt><tt class="py-op">(</tt><tt id="link-112" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-112', 'http', 'link-21');">http</a></tt><tt class="py-op">=</tt><tt id="link-113" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-113', 'http', 'link-21');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">baseUrl</tt><tt class="py-op">=</tt><tt id="link-114" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-114', 'base', 'link-70');">base</a></tt><tt class="py-op">,</tt> <tt id="link-115" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-115', 'model', 'link-33');">model</a></tt><tt class="py-op">=</tt><tt id="link-116" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-116', 'model', 'link-33');">model</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L347"></a><tt class="py-lineno"> 347</tt>  <tt class="py-line">                  <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">developerKey</tt><tt class="py-op">,</tt> <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">requestBuilder</tt><tt class="py-op">,</tt> </tt>
+<a name="L348"></a><tt class="py-lineno"> 348</tt>  <tt class="py-line">                  <tt class="py-name">resourceDesc</tt><tt class="py-op">=</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">=</tt><tt class="py-name">service</tt><tt class="py-op">,</tt> <tt id="link-117" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-117', 'schema', 'link-42');">schema</a></tt><tt class="py-op">=</tt><tt id="link-118" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-118', 'schema', 'link-42');">schema</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L349"></a><tt class="py-lineno"> 349</tt>  <tt class="py-line"> </tt>
+<a name="_cast"></a><div id="_cast-def"><a name="L350"></a><tt class="py-lineno"> 350</tt>  <tt class="py-line"> </tt>
+<a name="L351"></a><tt class="py-lineno"> 351</tt> <a class="py-toggle" href="#" id="_cast-toggle" onclick="return toggle('_cast');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_cast">_cast</a><tt class="py-op">(</tt><tt class="py-param">value</tt><tt class="py-op">,</tt> <tt class="py-param">schema_type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_cast-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_cast-expanded"><a name="L352"></a><tt class="py-lineno"> 352</tt>  <tt class="py-line">  <tt class="py-docstring">"""Convert value to a string based on JSON Schema type.</tt> </tt>
+<a name="L353"></a><tt class="py-lineno"> 353</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L354"></a><tt class="py-lineno"> 354</tt>  <tt class="py-line"><tt class="py-docstring">  See http://tools.ietf.org/html/draft-zyp-json-schema-03 for more details on</tt> </tt>
+<a name="L355"></a><tt class="py-lineno"> 355</tt>  <tt class="py-line"><tt class="py-docstring">  JSON Schema.</tt> </tt>
+<a name="L356"></a><tt class="py-lineno"> 356</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L357"></a><tt class="py-lineno"> 357</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L358"></a><tt class="py-lineno"> 358</tt>  <tt class="py-line"><tt class="py-docstring">    value: any, the value to convert</tt> </tt>
+<a name="L359"></a><tt class="py-lineno"> 359</tt>  <tt class="py-line"><tt class="py-docstring">    schema_type: string, the type that value should be interpreted as</tt> </tt>
+<a name="L360"></a><tt class="py-lineno"> 360</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L361"></a><tt class="py-lineno"> 361</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L362"></a><tt class="py-lineno"> 362</tt>  <tt class="py-line"><tt class="py-docstring">    A string representation of 'value' based on the schema_type.</tt> </tt>
+<a name="L363"></a><tt class="py-lineno"> 363</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L364"></a><tt class="py-lineno"> 364</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'string'</tt><tt class="py-op">:</tt> </tt>
+<a name="L365"></a><tt class="py-lineno"> 365</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L366"></a><tt class="py-lineno"> 366</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
+<a name="L367"></a><tt class="py-lineno"> 367</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L368"></a><tt class="py-lineno"> 368</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+<a name="L369"></a><tt class="py-lineno"> 369</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'integer'</tt><tt class="py-op">:</tt> </tt>
+<a name="L370"></a><tt class="py-lineno"> 370</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L371"></a><tt class="py-lineno"> 371</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'number'</tt><tt class="py-op">:</tt> </tt>
+<a name="L372"></a><tt class="py-lineno"> 372</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L373"></a><tt class="py-lineno"> 373</tt>  <tt class="py-line">  <tt class="py-keyword">elif</tt> <tt class="py-name">schema_type</tt> <tt class="py-op">==</tt> <tt class="py-string">'boolean'</tt><tt class="py-op">:</tt> </tt>
+<a name="L374"></a><tt class="py-lineno"> 374</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L375"></a><tt class="py-lineno"> 375</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L376"></a><tt class="py-lineno"> 376</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-string">u''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L377"></a><tt class="py-lineno"> 377</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">value</tt> </tt>
+<a name="L378"></a><tt class="py-lineno"> 378</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L379"></a><tt class="py-lineno"> 379</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L380"></a><tt class="py-lineno"> 380</tt>  <tt class="py-line"> </tt>
+<a name="_media_size_to_long"></a><div id="_media_size_to_long-def"><a name="L381"></a><tt class="py-lineno"> 381</tt>  <tt class="py-line"> </tt>
+<a name="L382"></a><tt class="py-lineno"> 382</tt> <a class="py-toggle" href="#" id="_media_size_to_long-toggle" onclick="return toggle('_media_size_to_long');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_media_size_to_long">_media_size_to_long</a><tt class="py-op">(</tt><tt class="py-param">maxSize</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_media_size_to_long-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_media_size_to_long-expanded"><a name="L383"></a><tt class="py-lineno"> 383</tt>  <tt class="py-line">  <tt class="py-docstring">"""Convert a string media size, such as 10GB or 3TB into an integer.</tt> </tt>
+<a name="L384"></a><tt class="py-lineno"> 384</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L385"></a><tt class="py-lineno"> 385</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L386"></a><tt class="py-lineno"> 386</tt>  <tt class="py-line"><tt class="py-docstring">    maxSize: string, size as a string, such as 2MB or 7GB.</tt> </tt>
+<a name="L387"></a><tt class="py-lineno"> 387</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L388"></a><tt class="py-lineno"> 388</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L389"></a><tt class="py-lineno"> 389</tt>  <tt class="py-line"><tt class="py-docstring">    The size as an integer value.</tt> </tt>
+<a name="L390"></a><tt class="py-lineno"> 390</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L391"></a><tt class="py-lineno"> 391</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
+<a name="L392"></a><tt class="py-lineno"> 392</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
+<a name="L393"></a><tt class="py-lineno"> 393</tt>  <tt class="py-line">  <tt class="py-name">units</tt> <tt class="py-op">=</tt> <tt class="py-name">maxSize</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L394"></a><tt class="py-lineno"> 394</tt>  <tt class="py-line">  <tt class="py-name">bit_shift</tt> <tt class="py-op">=</tt> <tt id="link-119" class="py-name"><a title="googleapiclient.discovery._MEDIA_SIZE_BIT_SHIFTS" class="py-name" href="#" onclick="return doclink('link-119', '_MEDIA_SIZE_BIT_SHIFTS', 'link-53');">_MEDIA_SIZE_BIT_SHIFTS</a></tt><tt class="py-op">.</tt><tt id="link-120" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-116', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">units</tt><tt class="py-op">)</tt> </tt>
-<a name="L390"></a><tt class="py-lineno"> 390</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">bit_shift</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L391"></a><tt class="py-lineno"> 391</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-name">bit_shift</tt> </tt>
-<a name="L392"></a><tt class="py-lineno"> 392</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L393"></a><tt class="py-lineno"> 393</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L394"></a><tt class="py-lineno"> 394</tt>  <tt class="py-line"> </tt>
-<a name="_media_path_url_from_info"></a><div id="_media_path_url_from_info-def"><a name="L395"></a><tt class="py-lineno"> 395</tt>  <tt class="py-line"> </tt>
-<a name="L396"></a><tt class="py-lineno"> 396</tt> <a class="py-toggle" href="#" id="_media_path_url_from_info-toggle" onclick="return toggle('_media_path_url_from_info');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_media_path_url_from_info">_media_path_url_from_info</a><tt class="py-op">(</tt><tt class="py-param">root_desc</tt><tt class="py-op">,</tt> <tt class="py-param">path_url</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_media_path_url_from_info-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_media_path_url_from_info-expanded"><a name="L397"></a><tt class="py-lineno"> 397</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates an absolute media path URL.</tt> </tt>
-<a name="L398"></a><tt class="py-lineno"> 398</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L399"></a><tt class="py-lineno"> 399</tt>  <tt class="py-line"><tt class="py-docstring">  Constructed using the API root URI and service path from the discovery</tt> </tt>
-<a name="L400"></a><tt class="py-lineno"> 400</tt>  <tt class="py-line"><tt class="py-docstring">  document and the relative path for the API method.</tt> </tt>
-<a name="L401"></a><tt class="py-lineno"> 401</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L402"></a><tt class="py-lineno"> 402</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L403"></a><tt class="py-lineno"> 403</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
-<a name="L404"></a><tt class="py-lineno"> 404</tt>  <tt class="py-line"><tt class="py-docstring">    path_url: String; the relative URL for the API method. Relative to the API</tt> </tt>
-<a name="L405"></a><tt class="py-lineno"> 405</tt>  <tt class="py-line"><tt class="py-docstring">        root, which is specified in the discovery document.</tt> </tt>
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-120', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">units</tt><tt class="py-op">)</tt> </tt>
+<a name="L395"></a><tt class="py-lineno"> 395</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">bit_shift</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L396"></a><tt class="py-lineno"> 396</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-name">bit_shift</tt> </tt>
+<a name="L397"></a><tt class="py-lineno"> 397</tt>  <tt class="py-line">  <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L398"></a><tt class="py-lineno"> 398</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">maxSize</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L399"></a><tt class="py-lineno"> 399</tt>  <tt class="py-line"> </tt>
+<a name="_media_path_url_from_info"></a><div id="_media_path_url_from_info-def"><a name="L400"></a><tt class="py-lineno"> 400</tt>  <tt class="py-line"> </tt>
+<a name="L401"></a><tt class="py-lineno"> 401</tt> <a class="py-toggle" href="#" id="_media_path_url_from_info-toggle" onclick="return toggle('_media_path_url_from_info');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_media_path_url_from_info">_media_path_url_from_info</a><tt class="py-op">(</tt><tt class="py-param">root_desc</tt><tt class="py-op">,</tt> <tt class="py-param">path_url</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_media_path_url_from_info-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_media_path_url_from_info-expanded"><a name="L402"></a><tt class="py-lineno"> 402</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates an absolute media path URL.</tt> </tt>
+<a name="L403"></a><tt class="py-lineno"> 403</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L404"></a><tt class="py-lineno"> 404</tt>  <tt class="py-line"><tt class="py-docstring">  Constructed using the API root URI and service path from the discovery</tt> </tt>
+<a name="L405"></a><tt class="py-lineno"> 405</tt>  <tt class="py-line"><tt class="py-docstring">  document and the relative path for the API method.</tt> </tt>
 <a name="L406"></a><tt class="py-lineno"> 406</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L407"></a><tt class="py-lineno"> 407</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L408"></a><tt class="py-lineno"> 408</tt>  <tt class="py-line"><tt class="py-docstring">    String; the absolute URI for media upload for the API method.</tt> </tt>
-<a name="L409"></a><tt class="py-lineno"> 409</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L410"></a><tt class="py-lineno"> 410</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-string">'%(root)supload/%(service_path)s%(path)s'</tt> <tt class="py-op">%</tt> <tt class="py-op">{</tt> </tt>
-<a name="L411"></a><tt class="py-lineno"> 411</tt>  <tt class="py-line">      <tt class="py-string">'root'</tt><tt class="py-op">:</tt> <tt class="py-name">root_desc</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L412"></a><tt class="py-lineno"> 412</tt>  <tt class="py-line">      <tt class="py-string">'service_path'</tt><tt class="py-op">:</tt> <tt class="py-name">root_desc</tt><tt class="py-op">[</tt><tt class="py-string">'servicePath'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L413"></a><tt class="py-lineno"> 413</tt>  <tt class="py-line">      <tt class="py-string">'path'</tt><tt class="py-op">:</tt> <tt class="py-name">path_url</tt><tt class="py-op">,</tt> </tt>
-<a name="L414"></a><tt class="py-lineno"> 414</tt>  <tt class="py-line">  <tt class="py-op">}</tt> </tt>
-</div><a name="L415"></a><tt class="py-lineno"> 415</tt>  <tt class="py-line"> </tt>
-<a name="_fix_up_parameters"></a><div id="_fix_up_parameters-def"><a name="L416"></a><tt class="py-lineno"> 416</tt>  <tt class="py-line"> </tt>
-<a name="L417"></a><tt class="py-lineno"> 417</tt> <a class="py-toggle" href="#" id="_fix_up_parameters-toggle" onclick="return toggle('_fix_up_parameters');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_fix_up_parameters">_fix_up_parameters</a><tt class="py-op">(</tt><tt class="py-param">method_desc</tt><tt class="py-op">,</tt> <tt class="py-param">root_desc</tt><tt class="py-op">,</tt> <tt class="py-param">http_method</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_fix_up_parameters-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_fix_up_parameters-expanded"><a name="L418"></a><tt class="py-lineno"> 418</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates parameters of an API method with values specific to this library.</tt> </tt>
-<a name="L419"></a><tt class="py-lineno"> 419</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L420"></a><tt class="py-lineno"> 420</tt>  <tt class="py-line"><tt class="py-docstring">  Specifically, adds whatever global parameters are specified by the API to the</tt> </tt>
-<a name="L421"></a><tt class="py-lineno"> 421</tt>  <tt class="py-line"><tt class="py-docstring">  parameters for the individual method. Also adds parameters which don't</tt> </tt>
-<a name="L422"></a><tt class="py-lineno"> 422</tt>  <tt class="py-line"><tt class="py-docstring">  appear in the discovery document, but are available to all discovery based</tt> </tt>
-<a name="L423"></a><tt class="py-lineno"> 423</tt>  <tt class="py-line"><tt class="py-docstring">  APIs (these are listed in STACK_QUERY_PARAMETERS).</tt> </tt>
+<a name="L407"></a><tt class="py-lineno"> 407</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L408"></a><tt class="py-lineno"> 408</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
+<a name="L409"></a><tt class="py-lineno"> 409</tt>  <tt class="py-line"><tt class="py-docstring">    path_url: String; the relative URL for the API method. Relative to the API</tt> </tt>
+<a name="L410"></a><tt class="py-lineno"> 410</tt>  <tt class="py-line"><tt class="py-docstring">        root, which is specified in the discovery document.</tt> </tt>
+<a name="L411"></a><tt class="py-lineno"> 411</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L412"></a><tt class="py-lineno"> 412</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L413"></a><tt class="py-lineno"> 413</tt>  <tt class="py-line"><tt class="py-docstring">    String; the absolute URI for media upload for the API method.</tt> </tt>
+<a name="L414"></a><tt class="py-lineno"> 414</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L415"></a><tt class="py-lineno"> 415</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-string">'%(root)supload/%(service_path)s%(path)s'</tt> <tt class="py-op">%</tt> <tt class="py-op">{</tt> </tt>
+<a name="L416"></a><tt class="py-lineno"> 416</tt>  <tt class="py-line">      <tt class="py-string">'root'</tt><tt class="py-op">:</tt> <tt class="py-name">root_desc</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L417"></a><tt class="py-lineno"> 417</tt>  <tt class="py-line">      <tt class="py-string">'service_path'</tt><tt class="py-op">:</tt> <tt class="py-name">root_desc</tt><tt class="py-op">[</tt><tt class="py-string">'servicePath'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L418"></a><tt class="py-lineno"> 418</tt>  <tt class="py-line">      <tt class="py-string">'path'</tt><tt class="py-op">:</tt> <tt class="py-name">path_url</tt><tt class="py-op">,</tt> </tt>
+<a name="L419"></a><tt class="py-lineno"> 419</tt>  <tt class="py-line">  <tt class="py-op">}</tt> </tt>
+</div><a name="L420"></a><tt class="py-lineno"> 420</tt>  <tt class="py-line"> </tt>
+<a name="_fix_up_parameters"></a><div id="_fix_up_parameters-def"><a name="L421"></a><tt class="py-lineno"> 421</tt>  <tt class="py-line"> </tt>
+<a name="L422"></a><tt class="py-lineno"> 422</tt> <a class="py-toggle" href="#" id="_fix_up_parameters-toggle" onclick="return toggle('_fix_up_parameters');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_fix_up_parameters">_fix_up_parameters</a><tt class="py-op">(</tt><tt class="py-param">method_desc</tt><tt class="py-op">,</tt> <tt class="py-param">root_desc</tt><tt class="py-op">,</tt> <tt class="py-param">http_method</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_fix_up_parameters-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_fix_up_parameters-expanded"><a name="L423"></a><tt class="py-lineno"> 423</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates parameters of an API method with values specific to this library.</tt> </tt>
 <a name="L424"></a><tt class="py-lineno"> 424</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L425"></a><tt class="py-lineno"> 425</tt>  <tt class="py-line"><tt class="py-docstring">  SIDE EFFECTS: This updates the parameters dictionary object in the method</tt> </tt>
-<a name="L426"></a><tt class="py-lineno"> 426</tt>  <tt class="py-line"><tt class="py-docstring">  description.</tt> </tt>
-<a name="L427"></a><tt class="py-lineno"> 427</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L428"></a><tt class="py-lineno"> 428</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L429"></a><tt class="py-lineno"> 429</tt>  <tt class="py-line"><tt class="py-docstring">    method_desc: Dictionary with metadata describing an API method. Value comes</tt> </tt>
-<a name="L430"></a><tt class="py-lineno"> 430</tt>  <tt class="py-line"><tt class="py-docstring">        from the dictionary of methods stored in the 'methods' key in the</tt> </tt>
-<a name="L431"></a><tt class="py-lineno"> 431</tt>  <tt class="py-line"><tt class="py-docstring">        deserialized discovery document.</tt> </tt>
-<a name="L432"></a><tt class="py-lineno"> 432</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
-<a name="L433"></a><tt class="py-lineno"> 433</tt>  <tt class="py-line"><tt class="py-docstring">    http_method: String; the HTTP method used to call the API method described</tt> </tt>
-<a name="L434"></a><tt class="py-lineno"> 434</tt>  <tt class="py-line"><tt class="py-docstring">        in method_desc.</tt> </tt>
-<a name="L435"></a><tt class="py-lineno"> 435</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L436"></a><tt class="py-lineno"> 436</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L437"></a><tt class="py-lineno"> 437</tt>  <tt class="py-line"><tt class="py-docstring">    The updated Dictionary stored in the 'parameters' key of the method</tt> </tt>
-<a name="L438"></a><tt class="py-lineno"> 438</tt>  <tt class="py-line"><tt class="py-docstring">        description dictionary.</tt> </tt>
-<a name="L439"></a><tt class="py-lineno"> 439</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L440"></a><tt class="py-lineno"> 440</tt>  <tt class="py-line">  <tt class="py-name">parameters</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">.</tt><tt class="py-name">setdefault</tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L441"></a><tt class="py-lineno"> 441</tt>  <tt class="py-line"> </tt>
-<a name="L442"></a><tt class="py-lineno"> 442</tt>  <tt class="py-line">  <tt class="py-comment"># Add in the parameters common to all methods.</tt> </tt>
-<a name="L443"></a><tt class="py-lineno"> 443</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">description</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">root_desc</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+<a name="L425"></a><tt class="py-lineno"> 425</tt>  <tt class="py-line"><tt class="py-docstring">  Specifically, adds whatever global parameters are specified by the API to the</tt> </tt>
+<a name="L426"></a><tt class="py-lineno"> 426</tt>  <tt class="py-line"><tt class="py-docstring">  parameters for the individual method. Also adds parameters which don't</tt> </tt>
+<a name="L427"></a><tt class="py-lineno"> 427</tt>  <tt class="py-line"><tt class="py-docstring">  appear in the discovery document, but are available to all discovery based</tt> </tt>
+<a name="L428"></a><tt class="py-lineno"> 428</tt>  <tt class="py-line"><tt class="py-docstring">  APIs (these are listed in STACK_QUERY_PARAMETERS).</tt> </tt>
+<a name="L429"></a><tt class="py-lineno"> 429</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L430"></a><tt class="py-lineno"> 430</tt>  <tt class="py-line"><tt class="py-docstring">  SIDE EFFECTS: This updates the parameters dictionary object in the method</tt> </tt>
+<a name="L431"></a><tt class="py-lineno"> 431</tt>  <tt class="py-line"><tt class="py-docstring">  description.</tt> </tt>
+<a name="L432"></a><tt class="py-lineno"> 432</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L433"></a><tt class="py-lineno"> 433</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L434"></a><tt class="py-lineno"> 434</tt>  <tt class="py-line"><tt class="py-docstring">    method_desc: Dictionary with metadata describing an API method. Value comes</tt> </tt>
+<a name="L435"></a><tt class="py-lineno"> 435</tt>  <tt class="py-line"><tt class="py-docstring">        from the dictionary of methods stored in the 'methods' key in the</tt> </tt>
+<a name="L436"></a><tt class="py-lineno"> 436</tt>  <tt class="py-line"><tt class="py-docstring">        deserialized discovery document.</tt> </tt>
+<a name="L437"></a><tt class="py-lineno"> 437</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
+<a name="L438"></a><tt class="py-lineno"> 438</tt>  <tt class="py-line"><tt class="py-docstring">    http_method: String; the HTTP method used to call the API method described</tt> </tt>
+<a name="L439"></a><tt class="py-lineno"> 439</tt>  <tt class="py-line"><tt class="py-docstring">        in method_desc.</tt> </tt>
+<a name="L440"></a><tt class="py-lineno"> 440</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L441"></a><tt class="py-lineno"> 441</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L442"></a><tt class="py-lineno"> 442</tt>  <tt class="py-line"><tt class="py-docstring">    The updated Dictionary stored in the 'parameters' key of the method</tt> </tt>
+<a name="L443"></a><tt class="py-lineno"> 443</tt>  <tt class="py-line"><tt class="py-docstring">        description dictionary.</tt> </tt>
+<a name="L444"></a><tt class="py-lineno"> 444</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L445"></a><tt class="py-lineno"> 445</tt>  <tt class="py-line">  <tt class="py-name">parameters</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">.</tt><tt class="py-name">setdefault</tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L446"></a><tt class="py-lineno"> 446</tt>  <tt class="py-line"> </tt>
+<a name="L447"></a><tt class="py-lineno"> 447</tt>  <tt class="py-line">  <tt class="py-comment"># Add in the parameters common to all methods.</tt> </tt>
+<a name="L448"></a><tt class="py-lineno"> 448</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">description</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">root_desc</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-117', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L444"></a><tt class="py-lineno"> 444</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">description</tt> </tt>
-<a name="L445"></a><tt class="py-lineno"> 445</tt>  <tt class="py-line"> </tt>
-<a name="L446"></a><tt class="py-lineno"> 446</tt>  <tt class="py-line">  <tt class="py-comment"># Add in undocumented query parameters.</tt> </tt>
-<a name="L447"></a><tt class="py-lineno"> 447</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt id="link-118" class="py-name"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-118', 'STACK_QUERY_PARAMETERS', 'link-53');">STACK_QUERY_PARAMETERS</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L448"></a><tt class="py-lineno"> 448</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-119" class="py-name"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-119', 'STACK_QUERY_PARAMETER_DEFAULT_VALUE', 'link-54');">STACK_QUERY_PARAMETER_DEFAULT_VALUE</a></tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L449"></a><tt class="py-lineno"> 449</tt>  <tt class="py-line"> </tt>
-<a name="L450"></a><tt class="py-lineno"> 450</tt>  <tt class="py-line">  <tt class="py-comment"># Add 'body' (our own reserved word) to parameters if the method supports</tt> </tt>
-<a name="L451"></a><tt class="py-lineno"> 451</tt>  <tt class="py-line">  <tt class="py-comment"># a request payload.</tt> </tt>
-<a name="L452"></a><tt class="py-lineno"> 452</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">http_method</tt> <tt class="py-keyword">in</tt> <tt id="link-120" class="py-name"><a title="googleapiclient.discovery.HTTP_PAYLOAD_METHODS" class="py-name" href="#" onclick="return doclink('link-120', 'HTTP_PAYLOAD_METHODS', 'link-49');">HTTP_PAYLOAD_METHODS</a></tt> <tt class="py-keyword">and</tt> <tt class="py-string">'request'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">method_desc</tt><tt class="py-op">:</tt> </tt>
-<a name="L453"></a><tt class="py-lineno"> 453</tt>  <tt class="py-line">    <tt id="link-121" class="py-name" targets="Method googleapiclient.channel.Channel.body()=googleapiclient.channel.Channel-class.html#body"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-121', 'body', 'link-121');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-122" class="py-name"><a title="googleapiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-122', 'BODY_PARAMETER_DEFAULT_VALUE', 'link-51');">BODY_PARAMETER_DEFAULT_VALUE</a></tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L454"></a><tt class="py-lineno"> 454</tt>  <tt class="py-line">    <tt id="link-123" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-123', 'body', 'link-121');">body</a></tt><tt class="py-op">.</tt><tt id="link-124" class="py-name" targets="Method googleapiclient.channel.Channel.update()=googleapiclient.channel.Channel-class.html#update"><a title="googleapiclient.channel.Channel.update" class="py-name" href="#" onclick="return doclink('link-124', 'update', 'link-124');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'request'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L455"></a><tt class="py-lineno"> 455</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-125" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-125', 'body', 'link-121');">body</a></tt> </tt>
-<a name="L456"></a><tt class="py-lineno"> 456</tt>  <tt class="py-line"> </tt>
-<a name="L457"></a><tt class="py-lineno"> 457</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">parameters</tt> </tt>
-</div><a name="L458"></a><tt class="py-lineno"> 458</tt>  <tt class="py-line"> </tt>
-<a name="_fix_up_media_upload"></a><div id="_fix_up_media_upload-def"><a name="L459"></a><tt class="py-lineno"> 459</tt>  <tt class="py-line"> </tt>
-<a name="L460"></a><tt class="py-lineno"> 460</tt> <a class="py-toggle" href="#" id="_fix_up_media_upload-toggle" onclick="return toggle('_fix_up_media_upload');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_fix_up_media_upload">_fix_up_media_upload</a><tt class="py-op">(</tt><tt class="py-param">method_desc</tt><tt class="py-op">,</tt> <tt class="py-param">root_desc</tt><tt class="py-op">,</tt> <tt class="py-param">path_url</tt><tt class="py-op">,</tt> <tt class="py-param">parameters</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_fix_up_media_upload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_fix_up_media_upload-expanded"><a name="L461"></a><tt class="py-lineno"> 461</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates parameters of API by adding 'media_body' if supported by method.</tt> </tt>
-<a name="L462"></a><tt class="py-lineno"> 462</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L463"></a><tt class="py-lineno"> 463</tt>  <tt class="py-line"><tt class="py-docstring">  SIDE EFFECTS: If the method supports media upload and has a required body,</tt> </tt>
-<a name="L464"></a><tt class="py-lineno"> 464</tt>  <tt class="py-line"><tt class="py-docstring">  sets body to be optional (required=False) instead. Also, if there is a</tt> </tt>
-<a name="L465"></a><tt class="py-lineno"> 465</tt>  <tt class="py-line"><tt class="py-docstring">  'mediaUpload' in the method description, adds 'media_upload' key to</tt> </tt>
-<a name="L466"></a><tt class="py-lineno"> 466</tt>  <tt class="py-line"><tt class="py-docstring">  parameters.</tt> </tt>
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-121', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L449"></a><tt class="py-lineno"> 449</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">description</tt> </tt>
+<a name="L450"></a><tt class="py-lineno"> 450</tt>  <tt class="py-line"> </tt>
+<a name="L451"></a><tt class="py-lineno"> 451</tt>  <tt class="py-line">  <tt class="py-comment"># Add in undocumented query parameters.</tt> </tt>
+<a name="L452"></a><tt class="py-lineno"> 452</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt id="link-122" class="py-name"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-122', 'STACK_QUERY_PARAMETERS', 'link-56');">STACK_QUERY_PARAMETERS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L453"></a><tt class="py-lineno"> 453</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-123" class="py-name"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-123', 'STACK_QUERY_PARAMETER_DEFAULT_VALUE', 'link-57');">STACK_QUERY_PARAMETER_DEFAULT_VALUE</a></tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L454"></a><tt class="py-lineno"> 454</tt>  <tt class="py-line"> </tt>
+<a name="L455"></a><tt class="py-lineno"> 455</tt>  <tt class="py-line">  <tt class="py-comment"># Add 'body' (our own reserved word) to parameters if the method supports</tt> </tt>
+<a name="L456"></a><tt class="py-lineno"> 456</tt>  <tt class="py-line">  <tt class="py-comment"># a request payload.</tt> </tt>
+<a name="L457"></a><tt class="py-lineno"> 457</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">http_method</tt> <tt class="py-keyword">in</tt> <tt id="link-124" class="py-name"><a title="googleapiclient.discovery.HTTP_PAYLOAD_METHODS" class="py-name" href="#" onclick="return doclink('link-124', 'HTTP_PAYLOAD_METHODS', 'link-52');">HTTP_PAYLOAD_METHODS</a></tt> <tt class="py-keyword">and</tt> <tt class="py-string">'request'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">method_desc</tt><tt class="py-op">:</tt> </tt>
+<a name="L458"></a><tt class="py-lineno"> 458</tt>  <tt class="py-line">    <tt id="link-125" class="py-name" targets="Method googleapiclient.channel.Channel.body()=googleapiclient.channel.Channel-class.html#body"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-125', 'body', 'link-125');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-126" class="py-name"><a title="googleapiclient.discovery.BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-126', 'BODY_PARAMETER_DEFAULT_VALUE', 'link-54');">BODY_PARAMETER_DEFAULT_VALUE</a></tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L459"></a><tt class="py-lineno"> 459</tt>  <tt class="py-line">    <tt id="link-127" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-127', 'body', 'link-125');">body</a></tt><tt class="py-op">.</tt><tt id="link-128" class="py-name" targets="Method googleapiclient.channel.Channel.update()=googleapiclient.channel.Channel-class.html#update"><a title="googleapiclient.channel.Channel.update" class="py-name" href="#" onclick="return doclink('link-128', 'update', 'link-128');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'request'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L460"></a><tt class="py-lineno"> 460</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-129" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-129', 'body', 'link-125');">body</a></tt> </tt>
+<a name="L461"></a><tt class="py-lineno"> 461</tt>  <tt class="py-line"> </tt>
+<a name="L462"></a><tt class="py-lineno"> 462</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">parameters</tt> </tt>
+</div><a name="L463"></a><tt class="py-lineno"> 463</tt>  <tt class="py-line"> </tt>
+<a name="_fix_up_media_upload"></a><div id="_fix_up_media_upload-def"><a name="L464"></a><tt class="py-lineno"> 464</tt>  <tt class="py-line"> </tt>
+<a name="L465"></a><tt class="py-lineno"> 465</tt> <a class="py-toggle" href="#" id="_fix_up_media_upload-toggle" onclick="return toggle('_fix_up_media_upload');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_fix_up_media_upload">_fix_up_media_upload</a><tt class="py-op">(</tt><tt class="py-param">method_desc</tt><tt class="py-op">,</tt> <tt class="py-param">root_desc</tt><tt class="py-op">,</tt> <tt class="py-param">path_url</tt><tt class="py-op">,</tt> <tt class="py-param">parameters</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_fix_up_media_upload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_fix_up_media_upload-expanded"><a name="L466"></a><tt class="py-lineno"> 466</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates parameters of API by adding 'media_body' if supported by method.</tt> </tt>
 <a name="L467"></a><tt class="py-lineno"> 467</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L468"></a><tt class="py-lineno"> 468</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L469"></a><tt class="py-lineno"> 469</tt>  <tt class="py-line"><tt class="py-docstring">    method_desc: Dictionary with metadata describing an API method. Value comes</tt> </tt>
-<a name="L470"></a><tt class="py-lineno"> 470</tt>  <tt class="py-line"><tt class="py-docstring">        from the dictionary of methods stored in the 'methods' key in the</tt> </tt>
-<a name="L471"></a><tt class="py-lineno"> 471</tt>  <tt class="py-line"><tt class="py-docstring">        deserialized discovery document.</tt> </tt>
-<a name="L472"></a><tt class="py-lineno"> 472</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
-<a name="L473"></a><tt class="py-lineno"> 473</tt>  <tt class="py-line"><tt class="py-docstring">    path_url: String; the relative URL for the API method. Relative to the API</tt> </tt>
-<a name="L474"></a><tt class="py-lineno"> 474</tt>  <tt class="py-line"><tt class="py-docstring">        root, which is specified in the discovery document.</tt> </tt>
-<a name="L475"></a><tt class="py-lineno"> 475</tt>  <tt class="py-line"><tt class="py-docstring">    parameters: A dictionary describing method parameters for method described</tt> </tt>
-<a name="L476"></a><tt class="py-lineno"> 476</tt>  <tt class="py-line"><tt class="py-docstring">        in method_desc.</tt> </tt>
-<a name="L477"></a><tt class="py-lineno"> 477</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L478"></a><tt class="py-lineno"> 478</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L479"></a><tt class="py-lineno"> 479</tt>  <tt class="py-line"><tt class="py-docstring">    Triple (accept, max_size, media_path_url) where:</tt> </tt>
-<a name="L480"></a><tt class="py-lineno"> 480</tt>  <tt class="py-line"><tt class="py-docstring">      - accept is a list of strings representing what content types are</tt> </tt>
-<a name="L481"></a><tt class="py-lineno"> 481</tt>  <tt class="py-line"><tt class="py-docstring">        accepted for media upload. Defaults to empty list if not in the</tt> </tt>
-<a name="L482"></a><tt class="py-lineno"> 482</tt>  <tt class="py-line"><tt class="py-docstring">        discovery document.</tt> </tt>
-<a name="L483"></a><tt class="py-lineno"> 483</tt>  <tt class="py-line"><tt class="py-docstring">      - max_size is a long representing the max size in bytes allowed for a</tt> </tt>
-<a name="L484"></a><tt class="py-lineno"> 484</tt>  <tt class="py-line"><tt class="py-docstring">        media upload. Defaults to 0L if not in the discovery document.</tt> </tt>
-<a name="L485"></a><tt class="py-lineno"> 485</tt>  <tt class="py-line"><tt class="py-docstring">      - media_path_url is a String; the absolute URI for media upload for the</tt> </tt>
-<a name="L486"></a><tt class="py-lineno"> 486</tt>  <tt class="py-line"><tt class="py-docstring">        API method. Constructed using the API root URI and service path from</tt> </tt>
-<a name="L487"></a><tt class="py-lineno"> 487</tt>  <tt class="py-line"><tt class="py-docstring">        the discovery document and the relative path for the API method. If</tt> </tt>
-<a name="L488"></a><tt class="py-lineno"> 488</tt>  <tt class="py-line"><tt class="py-docstring">        media upload is not supported, this is None.</tt> </tt>
-<a name="L489"></a><tt class="py-lineno"> 489</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L490"></a><tt class="py-lineno"> 490</tt>  <tt class="py-line">  <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">.</tt><tt id="link-126" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+<a name="L468"></a><tt class="py-lineno"> 468</tt>  <tt class="py-line"><tt class="py-docstring">  SIDE EFFECTS: If the method supports media upload and has a required body,</tt> </tt>
+<a name="L469"></a><tt class="py-lineno"> 469</tt>  <tt class="py-line"><tt class="py-docstring">  sets body to be optional (required=False) instead. Also, if there is a</tt> </tt>
+<a name="L470"></a><tt class="py-lineno"> 470</tt>  <tt class="py-line"><tt class="py-docstring">  'mediaUpload' in the method description, adds 'media_upload' key to</tt> </tt>
+<a name="L471"></a><tt class="py-lineno"> 471</tt>  <tt class="py-line"><tt class="py-docstring">  parameters.</tt> </tt>
+<a name="L472"></a><tt class="py-lineno"> 472</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L473"></a><tt class="py-lineno"> 473</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L474"></a><tt class="py-lineno"> 474</tt>  <tt class="py-line"><tt class="py-docstring">    method_desc: Dictionary with metadata describing an API method. Value comes</tt> </tt>
+<a name="L475"></a><tt class="py-lineno"> 475</tt>  <tt class="py-line"><tt class="py-docstring">        from the dictionary of methods stored in the 'methods' key in the</tt> </tt>
+<a name="L476"></a><tt class="py-lineno"> 476</tt>  <tt class="py-line"><tt class="py-docstring">        deserialized discovery document.</tt> </tt>
+<a name="L477"></a><tt class="py-lineno"> 477</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
+<a name="L478"></a><tt class="py-lineno"> 478</tt>  <tt class="py-line"><tt class="py-docstring">    path_url: String; the relative URL for the API method. Relative to the API</tt> </tt>
+<a name="L479"></a><tt class="py-lineno"> 479</tt>  <tt class="py-line"><tt class="py-docstring">        root, which is specified in the discovery document.</tt> </tt>
+<a name="L480"></a><tt class="py-lineno"> 480</tt>  <tt class="py-line"><tt class="py-docstring">    parameters: A dictionary describing method parameters for method described</tt> </tt>
+<a name="L481"></a><tt class="py-lineno"> 481</tt>  <tt class="py-line"><tt class="py-docstring">        in method_desc.</tt> </tt>
+<a name="L482"></a><tt class="py-lineno"> 482</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L483"></a><tt class="py-lineno"> 483</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L484"></a><tt class="py-lineno"> 484</tt>  <tt class="py-line"><tt class="py-docstring">    Triple (accept, max_size, media_path_url) where:</tt> </tt>
+<a name="L485"></a><tt class="py-lineno"> 485</tt>  <tt class="py-line"><tt class="py-docstring">      - accept is a list of strings representing what content types are</tt> </tt>
+<a name="L486"></a><tt class="py-lineno"> 486</tt>  <tt class="py-line"><tt class="py-docstring">        accepted for media upload. Defaults to empty list if not in the</tt> </tt>
+<a name="L487"></a><tt class="py-lineno"> 487</tt>  <tt class="py-line"><tt class="py-docstring">        discovery document.</tt> </tt>
+<a name="L488"></a><tt class="py-lineno"> 488</tt>  <tt class="py-line"><tt class="py-docstring">      - max_size is a long representing the max size in bytes allowed for a</tt> </tt>
+<a name="L489"></a><tt class="py-lineno"> 489</tt>  <tt class="py-line"><tt class="py-docstring">        media upload. Defaults to 0L if not in the discovery document.</tt> </tt>
+<a name="L490"></a><tt class="py-lineno"> 490</tt>  <tt class="py-line"><tt class="py-docstring">      - media_path_url is a String; the absolute URI for media upload for the</tt> </tt>
+<a name="L491"></a><tt class="py-lineno"> 491</tt>  <tt class="py-line"><tt class="py-docstring">        API method. Constructed using the API root URI and service path from</tt> </tt>
+<a name="L492"></a><tt class="py-lineno"> 492</tt>  <tt class="py-line"><tt class="py-docstring">        the discovery document and the relative path for the API method. If</tt> </tt>
+<a name="L493"></a><tt class="py-lineno"> 493</tt>  <tt class="py-line"><tt class="py-docstring">        media upload is not supported, this is None.</tt> </tt>
+<a name="L494"></a><tt class="py-lineno"> 494</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L495"></a><tt class="py-lineno"> 495</tt>  <tt class="py-line">  <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-126', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'mediaUpload'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L491"></a><tt class="py-lineno"> 491</tt>  <tt class="py-line">  <tt id="link-127" class="py-name" targets="Variable googleapiclient.model.BaseModel.accept=googleapiclient.model.BaseModel-class.html#accept,Variable googleapiclient.model.JsonModel.accept=googleapiclient.model.JsonModel-class.html#accept,Variable googleapiclient.model.MediaModel.accept=googleapiclient.model.MediaModel-class.html#accept,Variable googleapiclient.model.ProtocolBufferModel.accept=googleapiclient.model.ProtocolBufferModel-class.html#accept,Variable googleapiclient.model.RawModel.accept=googleapiclient.model.RawModel-class.html#accept"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-130', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'mediaUpload'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L496"></a><tt class="py-lineno"> 496</tt>  <tt class="py-line">  <tt id="link-131" class="py-name" targets="Variable googleapiclient.model.BaseModel.accept=googleapiclient.model.BaseModel-class.html#accept,Variable googleapiclient.model.JsonModel.accept=googleapiclient.model.JsonModel-class.html#accept,Variable googleapiclient.model.MediaModel.accept=googleapiclient.model.MediaModel-class.html#accept,Variable googleapiclient.model.ProtocolBufferModel.accept=googleapiclient.model.ProtocolBufferModel-class.html#accept,Variable googleapiclient.model.RawModel.accept=googleapiclient.model.RawModel-class.html#accept"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-127', 'accept', 'link-127');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-131', 'accept', 'link-131');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-132" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-128', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'accept'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L492"></a><tt class="py-lineno"> 492</tt>  <tt class="py-line">  <tt class="py-name">max_size</tt> <tt class="py-op">=</tt> <tt id="link-129" class="py-name" targets="Function googleapiclient.discovery._media_size_to_long()=googleapiclient.discovery-module.html#_media_size_to_long"><a title="googleapiclient.discovery._media_size_to_long" class="py-name" href="#" onclick="return doclink('link-129', '_media_size_to_long', 'link-129');">_media_size_to_long</a></tt><tt class="py-op">(</tt><tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-132', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'accept'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L497"></a><tt class="py-lineno"> 497</tt>  <tt class="py-line">  <tt class="py-name">max_size</tt> <tt class="py-op">=</tt> <tt id="link-133" class="py-name" targets="Function googleapiclient.discovery._media_size_to_long()=googleapiclient.discovery-module.html#_media_size_to_long"><a title="googleapiclient.discovery._media_size_to_long" class="py-name" href="#" onclick="return doclink('link-133', '_media_size_to_long', 'link-133');">_media_size_to_long</a></tt><tt class="py-op">(</tt><tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-130', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'maxSize'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L493"></a><tt class="py-lineno"> 493</tt>  <tt class="py-line">  <tt class="py-name">media_path_url</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L494"></a><tt class="py-lineno"> 494</tt>  <tt class="py-line"> </tt>
-<a name="L495"></a><tt class="py-lineno"> 495</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">:</tt> </tt>
-<a name="L496"></a><tt class="py-lineno"> 496</tt>  <tt class="py-line">    <tt class="py-name">media_path_url</tt> <tt class="py-op">=</tt> <tt id="link-131" class="py-name" targets="Function googleapiclient.discovery._media_path_url_from_info()=googleapiclient.discovery-module.html#_media_path_url_from_info"><a title="googleapiclient.discovery._media_path_url_from_info" class="py-name" href="#" onclick="return doclink('link-131', '_media_path_url_from_info', 'link-131');">_media_path_url_from_info</a></tt><tt class="py-op">(</tt><tt class="py-name">root_desc</tt><tt class="py-op">,</tt> <tt class="py-name">path_url</tt><tt class="py-op">)</tt> </tt>
-<a name="L497"></a><tt class="py-lineno"> 497</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-string">'media_body'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-132" class="py-name"><a title="googleapiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-132', 'MEDIA_BODY_PARAMETER_DEFAULT_VALUE', 'link-52');">MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a></tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L498"></a><tt class="py-lineno"> 498</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'body'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">:</tt> </tt>
-<a name="L499"></a><tt class="py-lineno"> 499</tt>  <tt class="py-line">      <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'required'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L500"></a><tt class="py-lineno"> 500</tt>  <tt class="py-line"> </tt>
-<a name="L501"></a><tt class="py-lineno"> 501</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-133" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-134', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'maxSize'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L498"></a><tt class="py-lineno"> 498</tt>  <tt class="py-line">  <tt class="py-name">media_path_url</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L499"></a><tt class="py-lineno"> 499</tt>  <tt class="py-line"> </tt>
+<a name="L500"></a><tt class="py-lineno"> 500</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">:</tt> </tt>
+<a name="L501"></a><tt class="py-lineno"> 501</tt>  <tt class="py-line">    <tt class="py-name">media_path_url</tt> <tt class="py-op">=</tt> <tt id="link-135" class="py-name" targets="Function googleapiclient.discovery._media_path_url_from_info()=googleapiclient.discovery-module.html#_media_path_url_from_info"><a title="googleapiclient.discovery._media_path_url_from_info" class="py-name" href="#" onclick="return doclink('link-135', '_media_path_url_from_info', 'link-135');">_media_path_url_from_info</a></tt><tt class="py-op">(</tt><tt class="py-name">root_desc</tt><tt class="py-op">,</tt> <tt class="py-name">path_url</tt><tt class="py-op">)</tt> </tt>
+<a name="L502"></a><tt class="py-lineno"> 502</tt>  <tt class="py-line">    <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-string">'media_body'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-136" class="py-name"><a title="googleapiclient.discovery.MEDIA_BODY_PARAMETER_DEFAULT_VALUE" class="py-name" href="#" onclick="return doclink('link-136', 'MEDIA_BODY_PARAMETER_DEFAULT_VALUE', 'link-55');">MEDIA_BODY_PARAMETER_DEFAULT_VALUE</a></tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L503"></a><tt class="py-lineno"> 503</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'body'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">:</tt> </tt>
+<a name="L504"></a><tt class="py-lineno"> 504</tt>  <tt class="py-line">      <tt class="py-name">parameters</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'required'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L505"></a><tt class="py-lineno"> 505</tt>  <tt class="py-line"> </tt>
+<a name="L506"></a><tt class="py-lineno"> 506</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-137" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-133', 'accept', 'link-127');">accept</a></tt><tt class="py-op">,</tt> <tt class="py-name">max_size</tt><tt class="py-op">,</tt> <tt class="py-name">media_path_url</tt> </tt>
-</div><a name="L502"></a><tt class="py-lineno"> 502</tt>  <tt class="py-line"> </tt>
-<a name="_fix_up_method_description"></a><div id="_fix_up_method_description-def"><a name="L503"></a><tt class="py-lineno"> 503</tt>  <tt class="py-line"> </tt>
-<a name="L504"></a><tt class="py-lineno"> 504</tt> <a class="py-toggle" href="#" id="_fix_up_method_description-toggle" onclick="return toggle('_fix_up_method_description');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_fix_up_method_description">_fix_up_method_description</a><tt class="py-op">(</tt><tt class="py-param">method_desc</tt><tt class="py-op">,</tt> <tt class="py-param">root_desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_fix_up_method_description-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_fix_up_method_description-expanded"><a name="L505"></a><tt class="py-lineno"> 505</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates a method description in a discovery document.</tt> </tt>
-<a name="L506"></a><tt class="py-lineno"> 506</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L507"></a><tt class="py-lineno"> 507</tt>  <tt class="py-line"><tt class="py-docstring">  SIDE EFFECTS: Changes the parameters dictionary in the method description with</tt> </tt>
-<a name="L508"></a><tt class="py-lineno"> 508</tt>  <tt class="py-line"><tt class="py-docstring">  extra parameters which are used locally.</tt> </tt>
-<a name="L509"></a><tt class="py-lineno"> 509</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L510"></a><tt class="py-lineno"> 510</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L511"></a><tt class="py-lineno"> 511</tt>  <tt class="py-line"><tt class="py-docstring">    method_desc: Dictionary with metadata describing an API method. Value comes</tt> </tt>
-<a name="L512"></a><tt class="py-lineno"> 512</tt>  <tt class="py-line"><tt class="py-docstring">        from the dictionary of methods stored in the 'methods' key in the</tt> </tt>
-<a name="L513"></a><tt class="py-lineno"> 513</tt>  <tt class="py-line"><tt class="py-docstring">        deserialized discovery document.</tt> </tt>
-<a name="L514"></a><tt class="py-lineno"> 514</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
-<a name="L515"></a><tt class="py-lineno"> 515</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L516"></a><tt class="py-lineno"> 516</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L517"></a><tt class="py-lineno"> 517</tt>  <tt class="py-line"><tt class="py-docstring">    Tuple (path_url, http_method, method_id, accept, max_size, media_path_url)</tt> </tt>
-<a name="L518"></a><tt class="py-lineno"> 518</tt>  <tt class="py-line"><tt class="py-docstring">    where:</tt> </tt>
-<a name="L519"></a><tt class="py-lineno"> 519</tt>  <tt class="py-line"><tt class="py-docstring">      - path_url is a String; the relative URL for the API method. Relative to</tt> </tt>
-<a name="L520"></a><tt class="py-lineno"> 520</tt>  <tt class="py-line"><tt class="py-docstring">        the API root, which is specified in the discovery document.</tt> </tt>
-<a name="L521"></a><tt class="py-lineno"> 521</tt>  <tt class="py-line"><tt class="py-docstring">      - http_method is a String; the HTTP method used to call the API method</tt> </tt>
-<a name="L522"></a><tt class="py-lineno"> 522</tt>  <tt class="py-line"><tt class="py-docstring">        described in the method description.</tt> </tt>
-<a name="L523"></a><tt class="py-lineno"> 523</tt>  <tt class="py-line"><tt class="py-docstring">      - method_id is a String; the name of the RPC method associated with the</tt> </tt>
-<a name="L524"></a><tt class="py-lineno"> 524</tt>  <tt class="py-line"><tt class="py-docstring">        API method, and is in the method description in the 'id' key.</tt> </tt>
-<a name="L525"></a><tt class="py-lineno"> 525</tt>  <tt class="py-line"><tt class="py-docstring">      - accept is a list of strings representing what content types are</tt> </tt>
-<a name="L526"></a><tt class="py-lineno"> 526</tt>  <tt class="py-line"><tt class="py-docstring">        accepted for media upload. Defaults to empty list if not in the</tt> </tt>
-<a name="L527"></a><tt class="py-lineno"> 527</tt>  <tt class="py-line"><tt class="py-docstring">        discovery document.</tt> </tt>
-<a name="L528"></a><tt class="py-lineno"> 528</tt>  <tt class="py-line"><tt class="py-docstring">      - max_size is a long representing the max size in bytes allowed for a</tt> </tt>
-<a name="L529"></a><tt class="py-lineno"> 529</tt>  <tt class="py-line"><tt class="py-docstring">        media upload. Defaults to 0L if not in the discovery document.</tt> </tt>
-<a name="L530"></a><tt class="py-lineno"> 530</tt>  <tt class="py-line"><tt class="py-docstring">      - media_path_url is a String; the absolute URI for media upload for the</tt> </tt>
-<a name="L531"></a><tt class="py-lineno"> 531</tt>  <tt class="py-line"><tt class="py-docstring">        API method. Constructed using the API root URI and service path from</tt> </tt>
-<a name="L532"></a><tt class="py-lineno"> 532</tt>  <tt class="py-line"><tt class="py-docstring">        the discovery document and the relative path for the API method. If</tt> </tt>
-<a name="L533"></a><tt class="py-lineno"> 533</tt>  <tt class="py-line"><tt class="py-docstring">        media upload is not supported, this is None.</tt> </tt>
-<a name="L534"></a><tt class="py-lineno"> 534</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L535"></a><tt class="py-lineno"> 535</tt>  <tt class="py-line">  <tt class="py-name">path_url</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'path'</tt><tt class="py-op">]</tt> </tt>
-<a name="L536"></a><tt class="py-lineno"> 536</tt>  <tt class="py-line">  <tt class="py-name">http_method</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'httpMethod'</tt><tt class="py-op">]</tt> </tt>
-<a name="L537"></a><tt class="py-lineno"> 537</tt>  <tt class="py-line">  <tt class="py-name">method_id</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'id'</tt><tt class="py-op">]</tt> </tt>
-<a name="L538"></a><tt class="py-lineno"> 538</tt>  <tt class="py-line"> </tt>
-<a name="L539"></a><tt class="py-lineno"> 539</tt>  <tt class="py-line">  <tt class="py-name">parameters</tt> <tt class="py-op">=</tt> <tt id="link-134" class="py-name" targets="Function googleapiclient.discovery._fix_up_parameters()=googleapiclient.discovery-module.html#_fix_up_parameters"><a title="googleapiclient.discovery._fix_up_parameters" class="py-name" href="#" onclick="return doclink('link-134', '_fix_up_parameters', 'link-134');">_fix_up_parameters</a></tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">,</tt> <tt class="py-name">root_desc</tt><tt class="py-op">,</tt> <tt class="py-name">http_method</tt><tt class="py-op">)</tt> </tt>
-<a name="L540"></a><tt class="py-lineno"> 540</tt>  <tt class="py-line">  <tt class="py-comment"># Order is important. `_fix_up_media_upload` needs `method_desc` to have a</tt> </tt>
-<a name="L541"></a><tt class="py-lineno"> 541</tt>  <tt class="py-line">  <tt class="py-comment"># 'parameters' key and needs to know if there is a 'body' parameter because it</tt> </tt>
-<a name="L542"></a><tt class="py-lineno"> 542</tt>  <tt class="py-line">  <tt class="py-comment"># also sets a 'media_body' parameter.</tt> </tt>
-<a name="L543"></a><tt class="py-lineno"> 543</tt>  <tt class="py-line">  <tt id="link-135" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-137', 'accept', 'link-131');">accept</a></tt><tt class="py-op">,</tt> <tt class="py-name">max_size</tt><tt class="py-op">,</tt> <tt class="py-name">media_path_url</tt> </tt>
+</div><a name="L507"></a><tt class="py-lineno"> 507</tt>  <tt class="py-line"> </tt>
+<a name="_fix_up_method_description"></a><div id="_fix_up_method_description-def"><a name="L508"></a><tt class="py-lineno"> 508</tt>  <tt class="py-line"> </tt>
+<a name="L509"></a><tt class="py-lineno"> 509</tt> <a class="py-toggle" href="#" id="_fix_up_method_description-toggle" onclick="return toggle('_fix_up_method_description');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_fix_up_method_description">_fix_up_method_description</a><tt class="py-op">(</tt><tt class="py-param">method_desc</tt><tt class="py-op">,</tt> <tt class="py-param">root_desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_fix_up_method_description-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_fix_up_method_description-expanded"><a name="L510"></a><tt class="py-lineno"> 510</tt>  <tt class="py-line">  <tt class="py-docstring">"""Updates a method description in a discovery document.</tt> </tt>
+<a name="L511"></a><tt class="py-lineno"> 511</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L512"></a><tt class="py-lineno"> 512</tt>  <tt class="py-line"><tt class="py-docstring">  SIDE EFFECTS: Changes the parameters dictionary in the method description with</tt> </tt>
+<a name="L513"></a><tt class="py-lineno"> 513</tt>  <tt class="py-line"><tt class="py-docstring">  extra parameters which are used locally.</tt> </tt>
+<a name="L514"></a><tt class="py-lineno"> 514</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L515"></a><tt class="py-lineno"> 515</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L516"></a><tt class="py-lineno"> 516</tt>  <tt class="py-line"><tt class="py-docstring">    method_desc: Dictionary with metadata describing an API method. Value comes</tt> </tt>
+<a name="L517"></a><tt class="py-lineno"> 517</tt>  <tt class="py-line"><tt class="py-docstring">        from the dictionary of methods stored in the 'methods' key in the</tt> </tt>
+<a name="L518"></a><tt class="py-lineno"> 518</tt>  <tt class="py-line"><tt class="py-docstring">        deserialized discovery document.</tt> </tt>
+<a name="L519"></a><tt class="py-lineno"> 519</tt>  <tt class="py-line"><tt class="py-docstring">    root_desc: Dictionary; the entire original deserialized discovery document.</tt> </tt>
+<a name="L520"></a><tt class="py-lineno"> 520</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L521"></a><tt class="py-lineno"> 521</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L522"></a><tt class="py-lineno"> 522</tt>  <tt class="py-line"><tt class="py-docstring">    Tuple (path_url, http_method, method_id, accept, max_size, media_path_url)</tt> </tt>
+<a name="L523"></a><tt class="py-lineno"> 523</tt>  <tt class="py-line"><tt class="py-docstring">    where:</tt> </tt>
+<a name="L524"></a><tt class="py-lineno"> 524</tt>  <tt class="py-line"><tt class="py-docstring">      - path_url is a String; the relative URL for the API method. Relative to</tt> </tt>
+<a name="L525"></a><tt class="py-lineno"> 525</tt>  <tt class="py-line"><tt class="py-docstring">        the API root, which is specified in the discovery document.</tt> </tt>
+<a name="L526"></a><tt class="py-lineno"> 526</tt>  <tt class="py-line"><tt class="py-docstring">      - http_method is a String; the HTTP method used to call the API method</tt> </tt>
+<a name="L527"></a><tt class="py-lineno"> 527</tt>  <tt class="py-line"><tt class="py-docstring">        described in the method description.</tt> </tt>
+<a name="L528"></a><tt class="py-lineno"> 528</tt>  <tt class="py-line"><tt class="py-docstring">      - method_id is a String; the name of the RPC method associated with the</tt> </tt>
+<a name="L529"></a><tt class="py-lineno"> 529</tt>  <tt class="py-line"><tt class="py-docstring">        API method, and is in the method description in the 'id' key.</tt> </tt>
+<a name="L530"></a><tt class="py-lineno"> 530</tt>  <tt class="py-line"><tt class="py-docstring">      - accept is a list of strings representing what content types are</tt> </tt>
+<a name="L531"></a><tt class="py-lineno"> 531</tt>  <tt class="py-line"><tt class="py-docstring">        accepted for media upload. Defaults to empty list if not in the</tt> </tt>
+<a name="L532"></a><tt class="py-lineno"> 532</tt>  <tt class="py-line"><tt class="py-docstring">        discovery document.</tt> </tt>
+<a name="L533"></a><tt class="py-lineno"> 533</tt>  <tt class="py-line"><tt class="py-docstring">      - max_size is a long representing the max size in bytes allowed for a</tt> </tt>
+<a name="L534"></a><tt class="py-lineno"> 534</tt>  <tt class="py-line"><tt class="py-docstring">        media upload. Defaults to 0L if not in the discovery document.</tt> </tt>
+<a name="L535"></a><tt class="py-lineno"> 535</tt>  <tt class="py-line"><tt class="py-docstring">      - media_path_url is a String; the absolute URI for media upload for the</tt> </tt>
+<a name="L536"></a><tt class="py-lineno"> 536</tt>  <tt class="py-line"><tt class="py-docstring">        API method. Constructed using the API root URI and service path from</tt> </tt>
+<a name="L537"></a><tt class="py-lineno"> 537</tt>  <tt class="py-line"><tt class="py-docstring">        the discovery document and the relative path for the API method. If</tt> </tt>
+<a name="L538"></a><tt class="py-lineno"> 538</tt>  <tt class="py-line"><tt class="py-docstring">        media upload is not supported, this is None.</tt> </tt>
+<a name="L539"></a><tt class="py-lineno"> 539</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L540"></a><tt class="py-lineno"> 540</tt>  <tt class="py-line">  <tt class="py-name">path_url</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'path'</tt><tt class="py-op">]</tt> </tt>
+<a name="L541"></a><tt class="py-lineno"> 541</tt>  <tt class="py-line">  <tt class="py-name">http_method</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'httpMethod'</tt><tt class="py-op">]</tt> </tt>
+<a name="L542"></a><tt class="py-lineno"> 542</tt>  <tt class="py-line">  <tt class="py-name">method_id</tt> <tt class="py-op">=</tt> <tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'id'</tt><tt class="py-op">]</tt> </tt>
+<a name="L543"></a><tt class="py-lineno"> 543</tt>  <tt class="py-line"> </tt>
+<a name="L544"></a><tt class="py-lineno"> 544</tt>  <tt class="py-line">  <tt class="py-name">parameters</tt> <tt class="py-op">=</tt> <tt id="link-138" class="py-name" targets="Function googleapiclient.discovery._fix_up_parameters()=googleapiclient.discovery-module.html#_fix_up_parameters"><a title="googleapiclient.discovery._fix_up_parameters" class="py-name" href="#" onclick="return doclink('link-138', '_fix_up_parameters', 'link-138');">_fix_up_parameters</a></tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">,</tt> <tt class="py-name">root_desc</tt><tt class="py-op">,</tt> <tt class="py-name">http_method</tt><tt class="py-op">)</tt> </tt>
+<a name="L545"></a><tt class="py-lineno"> 545</tt>  <tt class="py-line">  <tt class="py-comment"># Order is important. `_fix_up_media_upload` needs `method_desc` to have a</tt> </tt>
+<a name="L546"></a><tt class="py-lineno"> 546</tt>  <tt class="py-line">  <tt class="py-comment"># 'parameters' key and needs to know if there is a 'body' parameter because it</tt> </tt>
+<a name="L547"></a><tt class="py-lineno"> 547</tt>  <tt class="py-line">  <tt class="py-comment"># also sets a 'media_body' parameter.</tt> </tt>
+<a name="L548"></a><tt class="py-lineno"> 548</tt>  <tt class="py-line">  <tt id="link-139" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-135', 'accept', 'link-127');">accept</a></tt><tt class="py-op">,</tt> <tt class="py-name">max_size</tt><tt class="py-op">,</tt> <tt class="py-name">media_path_url</tt> <tt class="py-op">=</tt> <tt id="link-136" class="py-name" targets="Function googleapiclient.discovery._fix_up_media_upload()=googleapiclient.discovery-module.html#_fix_up_media_upload"><a title="googleapiclient.discovery._fix_up_media_upload" class="py-name" href="#" onclick="return doclink('link-136', '_fix_up_media_upload', 'link-136');">_fix_up_media_upload</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L544"></a><tt class="py-lineno"> 544</tt>  <tt class="py-line">      <tt class="py-name">method_desc</tt><tt class="py-op">,</tt> <tt class="py-name">root_desc</tt><tt class="py-op">,</tt> <tt class="py-name">path_url</tt><tt class="py-op">,</tt> <tt class="py-name">parameters</tt><tt class="py-op">)</tt> </tt>
-<a name="L545"></a><tt class="py-lineno"> 545</tt>  <tt class="py-line"> </tt>
-<a name="L546"></a><tt class="py-lineno"> 546</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">path_url</tt><tt class="py-op">,</tt> <tt class="py-name">http_method</tt><tt class="py-op">,</tt> <tt class="py-name">method_id</tt><tt class="py-op">,</tt> <tt id="link-137" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-139', 'accept', 'link-131');">accept</a></tt><tt class="py-op">,</tt> <tt class="py-name">max_size</tt><tt class="py-op">,</tt> <tt class="py-name">media_path_url</tt> <tt class="py-op">=</tt> <tt id="link-140" class="py-name" targets="Function googleapiclient.discovery._fix_up_media_upload()=googleapiclient.discovery-module.html#_fix_up_media_upload"><a title="googleapiclient.discovery._fix_up_media_upload" class="py-name" href="#" onclick="return doclink('link-140', '_fix_up_media_upload', 'link-140');">_fix_up_media_upload</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L549"></a><tt class="py-lineno"> 549</tt>  <tt class="py-line">      <tt class="py-name">method_desc</tt><tt class="py-op">,</tt> <tt class="py-name">root_desc</tt><tt class="py-op">,</tt> <tt class="py-name">path_url</tt><tt class="py-op">,</tt> <tt class="py-name">parameters</tt><tt class="py-op">)</tt> </tt>
+<a name="L550"></a><tt class="py-lineno"> 550</tt>  <tt class="py-line"> </tt>
+<a name="L551"></a><tt class="py-lineno"> 551</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">path_url</tt><tt class="py-op">,</tt> <tt class="py-name">http_method</tt><tt class="py-op">,</tt> <tt class="py-name">method_id</tt><tt class="py-op">,</tt> <tt id="link-141" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-137', 'accept', 'link-127');">accept</a></tt><tt class="py-op">,</tt> <tt class="py-name">max_size</tt><tt class="py-op">,</tt> <tt class="py-name">media_path_url</tt> </tt>
-</div><a name="L547"></a><tt class="py-lineno"> 547</tt>  <tt class="py-line"> </tt>
-<a name="_urljoin"></a><div id="_urljoin-def"><a name="L548"></a><tt class="py-lineno"> 548</tt>  <tt class="py-line"> </tt>
-<a name="L549"></a><tt class="py-lineno"> 549</tt> <a class="py-toggle" href="#" id="_urljoin-toggle" onclick="return toggle('_urljoin');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_urljoin">_urljoin</a><tt class="py-op">(</tt><tt class="py-param">base</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_urljoin-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_urljoin-expanded"><a name="L550"></a><tt class="py-lineno"> 550</tt>  <tt class="py-line">  <tt class="py-docstring">"""Custom urljoin replacement supporting : before / in url."""</tt> </tt>
-<a name="L551"></a><tt class="py-lineno"> 551</tt>  <tt class="py-line">  <tt class="py-comment"># In general, it's unsafe to simply join base and url. However, for</tt> </tt>
-<a name="L552"></a><tt class="py-lineno"> 552</tt>  <tt class="py-line">  <tt class="py-comment"># the case of discovery documents, we know:</tt> </tt>
-<a name="L553"></a><tt class="py-lineno"> 553</tt>  <tt class="py-line">  <tt class="py-comment">#  * base will never contain params, query, or fragment</tt> </tt>
-<a name="L554"></a><tt class="py-lineno"> 554</tt>  <tt class="py-line">  <tt class="py-comment">#  * url will never contain a scheme or net_loc.</tt> </tt>
-<a name="L555"></a><tt class="py-lineno"> 555</tt>  <tt class="py-line">  <tt class="py-comment"># In general, this means we can safely join on /; we just need to</tt> </tt>
-<a name="L556"></a><tt class="py-lineno"> 556</tt>  <tt class="py-line">  <tt class="py-comment"># ensure we end up with precisely one / joining base and url. The</tt> </tt>
-<a name="L557"></a><tt class="py-lineno"> 557</tt>  <tt class="py-line">  <tt class="py-comment"># exception here is the case of media uploads, where url will be an</tt> </tt>
-<a name="L558"></a><tt class="py-lineno"> 558</tt>  <tt class="py-line">  <tt class="py-comment"># absolute url.</tt> </tt>
-<a name="L559"></a><tt class="py-lineno"> 559</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">url</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'http://'</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">url</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'https://'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L560"></a><tt class="py-lineno"> 560</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt id="link-138" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-138', 'base', 'link-68');">base</a></tt><tt class="py-op">,</tt> <tt class="py-name">url</tt><tt class="py-op">)</tt> </tt>
-<a name="L561"></a><tt class="py-lineno"> 561</tt>  <tt class="py-line">  <tt class="py-name">new_base</tt> <tt class="py-op">=</tt> <tt id="link-139" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-139', 'base', 'link-68');">base</a></tt> <tt class="py-keyword">if</tt> <tt id="link-140" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-140', 'base', 'link-68');">base</a></tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt id="link-141" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-141', 'base', 'link-68');">base</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'/'</tt> </tt>
-<a name="L562"></a><tt class="py-lineno"> 562</tt>  <tt class="py-line">  <tt class="py-name">new_url</tt> <tt class="py-op">=</tt> <tt class="py-name">url</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">url</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-name">url</tt> </tt>
-<a name="L563"></a><tt class="py-lineno"> 563</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">new_base</tt> <tt class="py-op">+</tt> <tt class="py-name">new_url</tt> </tt>
-</div><a name="L564"></a><tt class="py-lineno"> 564</tt>  <tt class="py-line"> </tt>
-<a name="ResourceMethodParameters"></a><div id="ResourceMethodParameters-def"><a name="L565"></a><tt class="py-lineno"> 565</tt>  <tt class="py-line"> </tt>
-<a name="L566"></a><tt class="py-lineno"> 566</tt>  <tt class="py-line"><tt class="py-comment"># TODO(dhermes): Convert this class to ResourceMethod and make it callable</tt> </tt>
-<a name="L567"></a><tt class="py-lineno"> 567</tt> <a class="py-toggle" href="#" id="ResourceMethodParameters-toggle" onclick="return toggle('ResourceMethodParameters');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery.ResourceMethodParameters-class.html">ResourceMethodParameters</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ResourceMethodParameters-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ResourceMethodParameters-expanded"><a name="L568"></a><tt class="py-lineno"> 568</tt>  <tt class="py-line">  <tt class="py-docstring">"""Represents the parameters associated with a method.</tt> </tt>
-<a name="L569"></a><tt class="py-lineno"> 569</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L570"></a><tt class="py-lineno"> 570</tt>  <tt class="py-line"><tt class="py-docstring">  Attributes:</tt> </tt>
-<a name="L571"></a><tt class="py-lineno"> 571</tt>  <tt class="py-line"><tt class="py-docstring">    argmap: Map from method parameter name (string) to query parameter name</tt> </tt>
-<a name="L572"></a><tt class="py-lineno"> 572</tt>  <tt class="py-line"><tt class="py-docstring">        (string).</tt> </tt>
-<a name="L573"></a><tt class="py-lineno"> 573</tt>  <tt class="py-line"><tt class="py-docstring">    required_params: List of required parameters (represented by parameter</tt> </tt>
-<a name="L574"></a><tt class="py-lineno"> 574</tt>  <tt class="py-line"><tt class="py-docstring">        name as string).</tt> </tt>
-<a name="L575"></a><tt class="py-lineno"> 575</tt>  <tt class="py-line"><tt class="py-docstring">    repeated_params: List of repeated parameters (represented by parameter</tt> </tt>
-<a name="L576"></a><tt class="py-lineno"> 576</tt>  <tt class="py-line"><tt class="py-docstring">        name as string).</tt> </tt>
-<a name="L577"></a><tt class="py-lineno"> 577</tt>  <tt class="py-line"><tt class="py-docstring">    pattern_params: Map from method parameter name (string) to regular</tt> </tt>
-<a name="L578"></a><tt class="py-lineno"> 578</tt>  <tt class="py-line"><tt class="py-docstring">        expression (as a string). If the pattern is set for a parameter, the</tt> </tt>
-<a name="L579"></a><tt class="py-lineno"> 579</tt>  <tt class="py-line"><tt class="py-docstring">        value for that parameter must match the regular expression.</tt> </tt>
-<a name="L580"></a><tt class="py-lineno"> 580</tt>  <tt class="py-line"><tt class="py-docstring">    query_params: List of parameters (represented by parameter name as string)</tt> </tt>
-<a name="L581"></a><tt class="py-lineno"> 581</tt>  <tt class="py-line"><tt class="py-docstring">        that will be used in the query string.</tt> </tt>
-<a name="L582"></a><tt class="py-lineno"> 582</tt>  <tt class="py-line"><tt class="py-docstring">    path_params: Set of parameters (represented by parameter name as string)</tt> </tt>
-<a name="L583"></a><tt class="py-lineno"> 583</tt>  <tt class="py-line"><tt class="py-docstring">        that will be used in the base URL path.</tt> </tt>
-<a name="L584"></a><tt class="py-lineno"> 584</tt>  <tt class="py-line"><tt class="py-docstring">    param_types: Map from method parameter name (string) to parameter type. Type</tt> </tt>
-<a name="L585"></a><tt class="py-lineno"> 585</tt>  <tt class="py-line"><tt class="py-docstring">        can be any valid JSON schema type; valid values are 'any', 'array',</tt> </tt>
-<a name="L586"></a><tt class="py-lineno"> 586</tt>  <tt class="py-line"><tt class="py-docstring">        'boolean', 'integer', 'number', 'object', or 'string'. Reference:</tt> </tt>
-<a name="L587"></a><tt class="py-lineno"> 587</tt>  <tt class="py-line"><tt class="py-docstring">        http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1</tt> </tt>
-<a name="L588"></a><tt class="py-lineno"> 588</tt>  <tt class="py-line"><tt class="py-docstring">    enum_params: Map from method parameter name (string) to list of strings,</tt> </tt>
-<a name="L589"></a><tt class="py-lineno"> 589</tt>  <tt class="py-line"><tt class="py-docstring">       where each list of strings is the list of acceptable enum values.</tt> </tt>
-<a name="L590"></a><tt class="py-lineno"> 590</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L591"></a><tt class="py-lineno"> 591</tt>  <tt class="py-line"> </tt>
-<a name="ResourceMethodParameters.__init__"></a><div id="ResourceMethodParameters.__init__-def"><a name="L592"></a><tt class="py-lineno"> 592</tt> <a class="py-toggle" href="#" id="ResourceMethodParameters.__init__-toggle" onclick="return toggle('ResourceMethodParameters.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.ResourceMethodParameters-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">method_desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ResourceMethodParameters.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="ResourceMethodParameters.__init__-expanded"><a name="L593"></a><tt class="py-lineno"> 593</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for ResourceMethodParameters.</tt> </tt>
-<a name="L594"></a><tt class="py-lineno"> 594</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L595"></a><tt class="py-lineno"> 595</tt>  <tt class="py-line"><tt class="py-docstring">    Sets default values and defers to set_parameters to populate.</tt> </tt>
-<a name="L596"></a><tt class="py-lineno"> 596</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L597"></a><tt class="py-lineno"> 597</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L598"></a><tt class="py-lineno"> 598</tt>  <tt class="py-line"><tt class="py-docstring">      method_desc: Dictionary with metadata describing an API method. Value</tt> </tt>
-<a name="L599"></a><tt class="py-lineno"> 599</tt>  <tt class="py-line"><tt class="py-docstring">          comes from the dictionary of methods stored in the 'methods' key in</tt> </tt>
-<a name="L600"></a><tt class="py-lineno"> 600</tt>  <tt class="py-line"><tt class="py-docstring">          the deserialized discovery document.</tt> </tt>
-<a name="L601"></a><tt class="py-lineno"> 601</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L602"></a><tt class="py-lineno"> 602</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L603"></a><tt class="py-lineno"> 603</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L604"></a><tt class="py-lineno"> 604</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L605"></a><tt class="py-lineno"> 605</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pattern_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L606"></a><tt class="py-lineno"> 606</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L607"></a><tt class="py-lineno"> 607</tt>  <tt class="py-line">    <tt class="py-comment"># TODO(dhermes): Change path_params to a list if the extra URITEMPLATE</tt> </tt>
-<a name="L608"></a><tt class="py-lineno"> 608</tt>  <tt class="py-line">    <tt class="py-comment">#                parsing is gotten rid of.</tt> </tt>
-<a name="L609"></a><tt class="py-lineno"> 609</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt> <tt class="py-op">=</tt> <tt id="link-142" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.set
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-141', 'accept', 'link-131');">accept</a></tt><tt class="py-op">,</tt> <tt class="py-name">max_size</tt><tt class="py-op">,</tt> <tt class="py-name">media_path_url</tt> </tt>
+</div><a name="L552"></a><tt class="py-lineno"> 552</tt>  <tt class="py-line"> </tt>
+<a name="_urljoin"></a><div id="_urljoin-def"><a name="L553"></a><tt class="py-lineno"> 553</tt>  <tt class="py-line"> </tt>
+<a name="L554"></a><tt class="py-lineno"> 554</tt> <a class="py-toggle" href="#" id="_urljoin-toggle" onclick="return toggle('_urljoin');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#_urljoin">_urljoin</a><tt class="py-op">(</tt><tt class="py-param">base</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_urljoin-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_urljoin-expanded"><a name="L555"></a><tt class="py-lineno"> 555</tt>  <tt class="py-line">  <tt class="py-docstring">"""Custom urljoin replacement supporting : before / in url."""</tt> </tt>
+<a name="L556"></a><tt class="py-lineno"> 556</tt>  <tt class="py-line">  <tt class="py-comment"># In general, it's unsafe to simply join base and url. However, for</tt> </tt>
+<a name="L557"></a><tt class="py-lineno"> 557</tt>  <tt class="py-line">  <tt class="py-comment"># the case of discovery documents, we know:</tt> </tt>
+<a name="L558"></a><tt class="py-lineno"> 558</tt>  <tt class="py-line">  <tt class="py-comment">#  * base will never contain params, query, or fragment</tt> </tt>
+<a name="L559"></a><tt class="py-lineno"> 559</tt>  <tt class="py-line">  <tt class="py-comment">#  * url will never contain a scheme or net_loc.</tt> </tt>
+<a name="L560"></a><tt class="py-lineno"> 560</tt>  <tt class="py-line">  <tt class="py-comment"># In general, this means we can safely join on /; we just need to</tt> </tt>
+<a name="L561"></a><tt class="py-lineno"> 561</tt>  <tt class="py-line">  <tt class="py-comment"># ensure we end up with precisely one / joining base and url. The</tt> </tt>
+<a name="L562"></a><tt class="py-lineno"> 562</tt>  <tt class="py-line">  <tt class="py-comment"># exception here is the case of media uploads, where url will be an</tt> </tt>
+<a name="L563"></a><tt class="py-lineno"> 563</tt>  <tt class="py-line">  <tt class="py-comment"># absolute url.</tt> </tt>
+<a name="L564"></a><tt class="py-lineno"> 564</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">url</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'http://'</tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-name">url</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'https://'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L565"></a><tt class="py-lineno"> 565</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">urljoin</tt><tt class="py-op">(</tt><tt id="link-142" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-142', 'base', 'link-70');">base</a></tt><tt class="py-op">,</tt> <tt class="py-name">url</tt><tt class="py-op">)</tt> </tt>
+<a name="L566"></a><tt class="py-lineno"> 566</tt>  <tt class="py-line">  <tt class="py-name">new_base</tt> <tt class="py-op">=</tt> <tt id="link-143" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-143', 'base', 'link-70');">base</a></tt> <tt class="py-keyword">if</tt> <tt id="link-144" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-144', 'base', 'link-70');">base</a></tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt id="link-145" class="py-name"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-145', 'base', 'link-70');">base</a></tt> <tt class="py-op">+</tt> <tt class="py-string">'/'</tt> </tt>
+<a name="L567"></a><tt class="py-lineno"> 567</tt>  <tt class="py-line">  <tt class="py-name">new_url</tt> <tt class="py-op">=</tt> <tt class="py-name">url</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> <tt class="py-keyword">if</tt> <tt class="py-name">url</tt><tt class="py-op">.</tt><tt class="py-name">startswith</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> <tt class="py-keyword">else</tt> <tt class="py-name">url</tt> </tt>
+<a name="L568"></a><tt class="py-lineno"> 568</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">new_base</tt> <tt class="py-op">+</tt> <tt class="py-name">new_url</tt> </tt>
+</div><a name="L569"></a><tt class="py-lineno"> 569</tt>  <tt class="py-line"> </tt>
+<a name="ResourceMethodParameters"></a><div id="ResourceMethodParameters-def"><a name="L570"></a><tt class="py-lineno"> 570</tt>  <tt class="py-line"> </tt>
+<a name="L571"></a><tt class="py-lineno"> 571</tt>  <tt class="py-line"><tt class="py-comment"># TODO(dhermes): Convert this class to ResourceMethod and make it callable</tt> </tt>
+<a name="L572"></a><tt class="py-lineno"> 572</tt> <a class="py-toggle" href="#" id="ResourceMethodParameters-toggle" onclick="return toggle('ResourceMethodParameters');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery.ResourceMethodParameters-class.html">ResourceMethodParameters</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ResourceMethodParameters-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="ResourceMethodParameters-expanded"><a name="L573"></a><tt class="py-lineno"> 573</tt>  <tt class="py-line">  <tt class="py-docstring">"""Represents the parameters associated with a method.</tt> </tt>
+<a name="L574"></a><tt class="py-lineno"> 574</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L575"></a><tt class="py-lineno"> 575</tt>  <tt class="py-line"><tt class="py-docstring">  Attributes:</tt> </tt>
+<a name="L576"></a><tt class="py-lineno"> 576</tt>  <tt class="py-line"><tt class="py-docstring">    argmap: Map from method parameter name (string) to query parameter name</tt> </tt>
+<a name="L577"></a><tt class="py-lineno"> 577</tt>  <tt class="py-line"><tt class="py-docstring">        (string).</tt> </tt>
+<a name="L578"></a><tt class="py-lineno"> 578</tt>  <tt class="py-line"><tt class="py-docstring">    required_params: List of required parameters (represented by parameter</tt> </tt>
+<a name="L579"></a><tt class="py-lineno"> 579</tt>  <tt class="py-line"><tt class="py-docstring">        name as string).</tt> </tt>
+<a name="L580"></a><tt class="py-lineno"> 580</tt>  <tt class="py-line"><tt class="py-docstring">    repeated_params: List of repeated parameters (represented by parameter</tt> </tt>
+<a name="L581"></a><tt class="py-lineno"> 581</tt>  <tt class="py-line"><tt class="py-docstring">        name as string).</tt> </tt>
+<a name="L582"></a><tt class="py-lineno"> 582</tt>  <tt class="py-line"><tt class="py-docstring">    pattern_params: Map from method parameter name (string) to regular</tt> </tt>
+<a name="L583"></a><tt class="py-lineno"> 583</tt>  <tt class="py-line"><tt class="py-docstring">        expression (as a string). If the pattern is set for a parameter, the</tt> </tt>
+<a name="L584"></a><tt class="py-lineno"> 584</tt>  <tt class="py-line"><tt class="py-docstring">        value for that parameter must match the regular expression.</tt> </tt>
+<a name="L585"></a><tt class="py-lineno"> 585</tt>  <tt class="py-line"><tt class="py-docstring">    query_params: List of parameters (represented by parameter name as string)</tt> </tt>
+<a name="L586"></a><tt class="py-lineno"> 586</tt>  <tt class="py-line"><tt class="py-docstring">        that will be used in the query string.</tt> </tt>
+<a name="L587"></a><tt class="py-lineno"> 587</tt>  <tt class="py-line"><tt class="py-docstring">    path_params: Set of parameters (represented by parameter name as string)</tt> </tt>
+<a name="L588"></a><tt class="py-lineno"> 588</tt>  <tt class="py-line"><tt class="py-docstring">        that will be used in the base URL path.</tt> </tt>
+<a name="L589"></a><tt class="py-lineno"> 589</tt>  <tt class="py-line"><tt class="py-docstring">    param_types: Map from method parameter name (string) to parameter type. Type</tt> </tt>
+<a name="L590"></a><tt class="py-lineno"> 590</tt>  <tt class="py-line"><tt class="py-docstring">        can be any valid JSON schema type; valid values are 'any', 'array',</tt> </tt>
+<a name="L591"></a><tt class="py-lineno"> 591</tt>  <tt class="py-line"><tt class="py-docstring">        'boolean', 'integer', 'number', 'object', or 'string'. Reference:</tt> </tt>
+<a name="L592"></a><tt class="py-lineno"> 592</tt>  <tt class="py-line"><tt class="py-docstring">        http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1</tt> </tt>
+<a name="L593"></a><tt class="py-lineno"> 593</tt>  <tt class="py-line"><tt class="py-docstring">    enum_params: Map from method parameter name (string) to list of strings,</tt> </tt>
+<a name="L594"></a><tt class="py-lineno"> 594</tt>  <tt class="py-line"><tt class="py-docstring">       where each list of strings is the list of acceptable enum values.</tt> </tt>
+<a name="L595"></a><tt class="py-lineno"> 595</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L596"></a><tt class="py-lineno"> 596</tt>  <tt class="py-line"> </tt>
+<a name="ResourceMethodParameters.__init__"></a><div id="ResourceMethodParameters.__init__-def"><a name="L597"></a><tt class="py-lineno"> 597</tt> <a class="py-toggle" href="#" id="ResourceMethodParameters.__init__-toggle" onclick="return toggle('ResourceMethodParameters.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.ResourceMethodParameters-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">method_desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ResourceMethodParameters.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="ResourceMethodParameters.__init__-expanded"><a name="L598"></a><tt class="py-lineno"> 598</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for ResourceMethodParameters.</tt> </tt>
+<a name="L599"></a><tt class="py-lineno"> 599</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L600"></a><tt class="py-lineno"> 600</tt>  <tt class="py-line"><tt class="py-docstring">    Sets default values and defers to set_parameters to populate.</tt> </tt>
+<a name="L601"></a><tt class="py-lineno"> 601</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L602"></a><tt class="py-lineno"> 602</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L603"></a><tt class="py-lineno"> 603</tt>  <tt class="py-line"><tt class="py-docstring">      method_desc: Dictionary with metadata describing an API method. Value</tt> </tt>
+<a name="L604"></a><tt class="py-lineno"> 604</tt>  <tt class="py-line"><tt class="py-docstring">          comes from the dictionary of methods stored in the 'methods' key in</tt> </tt>
+<a name="L605"></a><tt class="py-lineno"> 605</tt>  <tt class="py-line"><tt class="py-docstring">          the deserialized discovery document.</tt> </tt>
+<a name="L606"></a><tt class="py-lineno"> 606</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L607"></a><tt class="py-lineno"> 607</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L608"></a><tt class="py-lineno"> 608</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L609"></a><tt class="py-lineno"> 609</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L610"></a><tt class="py-lineno"> 610</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pattern_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L611"></a><tt class="py-lineno"> 611</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L612"></a><tt class="py-lineno"> 612</tt>  <tt class="py-line">    <tt class="py-comment"># TODO(dhermes): Change path_params to a list if the extra URITEMPLATE</tt> </tt>
+<a name="L613"></a><tt class="py-lineno"> 613</tt>  <tt class="py-line">    <tt class="py-comment">#                parsing is gotten rid of.</tt> </tt>
+<a name="L614"></a><tt class="py-lineno"> 614</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt> <tt class="py-op">=</tt> <tt id="link-146" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.set
 googleapiclient.discovery_cache.base.Cache.set
-googleapiclient.discovery_cache.file_cache.Cache.set" class="py-name" href="#" onclick="return doclink('link-142', 'set', 'link-91');">set</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L610"></a><tt class="py-lineno"> 610</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">param_types</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L611"></a><tt class="py-lineno"> 611</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enum_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L612"></a><tt class="py-lineno"> 612</tt>  <tt class="py-line"> </tt>
-<a name="L613"></a><tt class="py-lineno"> 613</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name" targets="Method googleapiclient.discovery.ResourceMethodParameters.set_parameters()=googleapiclient.discovery.ResourceMethodParameters-class.html#set_parameters"><a title="googleapiclient.discovery.ResourceMethodParameters.set_parameters" class="py-name" href="#" onclick="return doclink('link-143', 'set_parameters', 'link-143');">set_parameters</a></tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L614"></a><tt class="py-lineno"> 614</tt>  <tt class="py-line"> </tt>
-<a name="ResourceMethodParameters.set_parameters"></a><div id="ResourceMethodParameters.set_parameters-def"><a name="L615"></a><tt class="py-lineno"> 615</tt> <a class="py-toggle" href="#" id="ResourceMethodParameters.set_parameters-toggle" onclick="return toggle('ResourceMethodParameters.set_parameters');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.ResourceMethodParameters-class.html#set_parameters">set_parameters</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">method_desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ResourceMethodParameters.set_parameters-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="ResourceMethodParameters.set_parameters-expanded"><a name="L616"></a><tt class="py-lineno"> 616</tt>  <tt class="py-line">    <tt class="py-docstring">"""Populates maps and lists based on method description.</tt> </tt>
-<a name="L617"></a><tt class="py-lineno"> 617</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L618"></a><tt class="py-lineno"> 618</tt>  <tt class="py-line"><tt class="py-docstring">    Iterates through each parameter for the method and parses the values from</tt> </tt>
-<a name="L619"></a><tt class="py-lineno"> 619</tt>  <tt class="py-line"><tt class="py-docstring">    the parameter dictionary.</tt> </tt>
-<a name="L620"></a><tt class="py-lineno"> 620</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L621"></a><tt class="py-lineno"> 621</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L622"></a><tt class="py-lineno"> 622</tt>  <tt class="py-line"><tt class="py-docstring">      method_desc: Dictionary with metadata describing an API method. Value</tt> </tt>
-<a name="L623"></a><tt class="py-lineno"> 623</tt>  <tt class="py-line"><tt class="py-docstring">          comes from the dictionary of methods stored in the 'methods' key in</tt> </tt>
-<a name="L624"></a><tt class="py-lineno"> 624</tt>  <tt class="py-line"><tt class="py-docstring">          the deserialized discovery document.</tt> </tt>
-<a name="L625"></a><tt class="py-lineno"> 625</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L626"></a><tt class="py-lineno"> 626</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.discovery_cache.file_cache.Cache.set" class="py-name" href="#" onclick="return doclink('link-146', 'set', 'link-95');">set</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L615"></a><tt class="py-lineno"> 615</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">param_types</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L616"></a><tt class="py-lineno"> 616</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enum_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L617"></a><tt class="py-lineno"> 617</tt>  <tt class="py-line"> </tt>
+<a name="L618"></a><tt class="py-lineno"> 618</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-147" class="py-name" targets="Method googleapiclient.discovery.ResourceMethodParameters.set_parameters()=googleapiclient.discovery.ResourceMethodParameters-class.html#set_parameters"><a title="googleapiclient.discovery.ResourceMethodParameters.set_parameters" class="py-name" href="#" onclick="return doclink('link-147', 'set_parameters', 'link-147');">set_parameters</a></tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L619"></a><tt class="py-lineno"> 619</tt>  <tt class="py-line"> </tt>
+<a name="ResourceMethodParameters.set_parameters"></a><div id="ResourceMethodParameters.set_parameters-def"><a name="L620"></a><tt class="py-lineno"> 620</tt> <a class="py-toggle" href="#" id="ResourceMethodParameters.set_parameters-toggle" onclick="return toggle('ResourceMethodParameters.set_parameters');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.ResourceMethodParameters-class.html#set_parameters">set_parameters</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">method_desc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ResourceMethodParameters.set_parameters-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="ResourceMethodParameters.set_parameters-expanded"><a name="L621"></a><tt class="py-lineno"> 621</tt>  <tt class="py-line">    <tt class="py-docstring">"""Populates maps and lists based on method description.</tt> </tt>
+<a name="L622"></a><tt class="py-lineno"> 622</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L623"></a><tt class="py-lineno"> 623</tt>  <tt class="py-line"><tt class="py-docstring">    Iterates through each parameter for the method and parses the values from</tt> </tt>
+<a name="L624"></a><tt class="py-lineno"> 624</tt>  <tt class="py-line"><tt class="py-docstring">    the parameter dictionary.</tt> </tt>
+<a name="L625"></a><tt class="py-lineno"> 625</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L626"></a><tt class="py-lineno"> 626</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L627"></a><tt class="py-lineno"> 627</tt>  <tt class="py-line"><tt class="py-docstring">      method_desc: Dictionary with metadata describing an API method. Value</tt> </tt>
+<a name="L628"></a><tt class="py-lineno"> 628</tt>  <tt class="py-line"><tt class="py-docstring">          comes from the dictionary of methods stored in the 'methods' key in</tt> </tt>
+<a name="L629"></a><tt class="py-lineno"> 629</tt>  <tt class="py-line"><tt class="py-docstring">          the deserialized discovery document.</tt> </tt>
+<a name="L630"></a><tt class="py-lineno"> 630</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L631"></a><tt class="py-lineno"> 631</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-144', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L627"></a><tt class="py-lineno"> 627</tt>  <tt class="py-line">      <tt class="py-name">param</tt> <tt class="py-op">=</tt> <tt id="link-145" class="py-name" targets="Function googleapiclient.discovery.key2param()=googleapiclient.discovery-module.html#key2param"><a title="googleapiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-145', 'key2param', 'link-145');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">)</tt> </tt>
-<a name="L628"></a><tt class="py-lineno"> 628</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">arg</tt> </tt>
-<a name="L629"></a><tt class="py-lineno"> 629</tt>  <tt class="py-line"> </tt>
-<a name="L630"></a><tt class="py-lineno"> 630</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-148', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L632"></a><tt class="py-lineno"> 632</tt>  <tt class="py-line">      <tt class="py-name">param</tt> <tt class="py-op">=</tt> <tt id="link-149" class="py-name" targets="Function googleapiclient.discovery.key2param()=googleapiclient.discovery-module.html#key2param"><a title="googleapiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-149', 'key2param', 'link-149');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">)</tt> </tt>
+<a name="L633"></a><tt class="py-lineno"> 633</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">arg</tt> </tt>
+<a name="L634"></a><tt class="py-lineno"> 634</tt>  <tt class="py-line"> </tt>
+<a name="L635"></a><tt class="py-lineno"> 635</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-146', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'pattern'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L631"></a><tt class="py-lineno"> 631</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pattern_params</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">[</tt><tt class="py-string">'pattern'</tt><tt class="py-op">]</tt> </tt>
-<a name="L632"></a><tt class="py-lineno"> 632</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-147" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-150', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'pattern'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L636"></a><tt class="py-lineno"> 636</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">pattern_params</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">[</tt><tt class="py-string">'pattern'</tt><tt class="py-op">]</tt> </tt>
+<a name="L637"></a><tt class="py-lineno"> 637</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-147', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enum'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L633"></a><tt class="py-lineno"> 633</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enum_params</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">[</tt><tt class="py-string">'enum'</tt><tt class="py-op">]</tt> </tt>
-<a name="L634"></a><tt class="py-lineno"> 634</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-151', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enum'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L638"></a><tt class="py-lineno"> 638</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">enum_params</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">[</tt><tt class="py-string">'enum'</tt><tt class="py-op">]</tt> </tt>
+<a name="L639"></a><tt class="py-lineno"> 639</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-148', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'required'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L635"></a><tt class="py-lineno"> 635</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
-<a name="L636"></a><tt class="py-lineno"> 636</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-152', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'required'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L640"></a><tt class="py-lineno"> 640</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
+<a name="L641"></a><tt class="py-lineno"> 641</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-149', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'repeated'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L637"></a><tt class="py-lineno"> 637</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
-<a name="L638"></a><tt class="py-lineno"> 638</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-153', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'repeated'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L642"></a><tt class="py-lineno"> 642</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
+<a name="L643"></a><tt class="py-lineno"> 643</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-150', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'location'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'query'</tt><tt class="py-op">:</tt> </tt>
-<a name="L639"></a><tt class="py-lineno"> 639</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
-<a name="L640"></a><tt class="py-lineno"> 640</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-154', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'location'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'query'</tt><tt class="py-op">:</tt> </tt>
+<a name="L644"></a><tt class="py-lineno"> 644</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
+<a name="L645"></a><tt class="py-lineno"> 645</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-151', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'location'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'path'</tt><tt class="py-op">:</tt> </tt>
-<a name="L641"></a><tt class="py-lineno"> 641</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest.add()=googleapiclient.http.BatchHttpRequest-class.html#add"><a title="googleapiclient.http.BatchHttpRequest.add" class="py-name" href="#" onclick="return doclink('link-152', 'add', 'link-152');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
-<a name="L642"></a><tt class="py-lineno"> 642</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">param_types</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-155', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'location'</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-string">'path'</tt><tt class="py-op">:</tt> </tt>
+<a name="L646"></a><tt class="py-lineno"> 646</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt><tt class="py-op">.</tt><tt id="link-156" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest.add()=googleapiclient.http.BatchHttpRequest-class.html#add"><a title="googleapiclient.http.BatchHttpRequest.add" class="py-name" href="#" onclick="return doclink('link-156', 'add', 'link-156');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">param</tt><tt class="py-op">)</tt> </tt>
+<a name="L647"></a><tt class="py-lineno"> 647</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">param_types</tt><tt class="py-op">[</tt><tt class="py-name">param</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">desc</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-153', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
-<a name="L643"></a><tt class="py-lineno"> 643</tt>  <tt class="py-line"> </tt>
-<a name="L644"></a><tt class="py-lineno"> 644</tt>  <tt class="py-line">    <tt class="py-comment"># TODO(dhermes): Determine if this is still necessary. Discovery based APIs</tt> </tt>
-<a name="L645"></a><tt class="py-lineno"> 645</tt>  <tt class="py-line">    <tt class="py-comment">#                should have all path parameters already marked with</tt> </tt>
-<a name="L646"></a><tt class="py-lineno"> 646</tt>  <tt class="py-line">    <tt class="py-comment">#                'location: path'.</tt> </tt>
-<a name="L647"></a><tt class="py-lineno"> 647</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">match</tt> <tt class="py-keyword">in</tt> <tt id="link-154" class="py-name"><a title="googleapiclient.discovery.URITEMPLATE" class="py-name" href="#" onclick="return doclink('link-154', 'URITEMPLATE', 'link-45');">URITEMPLATE</a></tt><tt class="py-op">.</tt><tt class="py-name">finditer</tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'path'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L648"></a><tt class="py-lineno"> 648</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">namematch</tt> <tt class="py-keyword">in</tt> <tt id="link-155" class="py-name"><a title="googleapiclient.discovery.VARNAME" class="py-name" href="#" onclick="return doclink('link-155', 'VARNAME', 'link-46');">VARNAME</a></tt><tt class="py-op">.</tt><tt class="py-name">finditer</tt><tt class="py-op">(</tt><tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L649"></a><tt class="py-lineno"> 649</tt>  <tt class="py-line">        <tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt id="link-156" class="py-name"><a title="googleapiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-156', 'key2param', 'link-145');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">namematch</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L650"></a><tt class="py-lineno"> 650</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="googleapiclient.http.BatchHttpRequest.add" class="py-name" href="#" onclick="return doclink('link-157', 'add', 'link-152');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
-<a name="L651"></a><tt class="py-lineno"> 651</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt><tt class="py-op">:</tt> </tt>
-<a name="L652"></a><tt class="py-lineno"> 652</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L653"></a><tt class="py-lineno"> 653</tt>  <tt class="py-line"> </tt>
-<a name="createMethod"></a><div id="createMethod-def"><a name="L654"></a><tt class="py-lineno"> 654</tt>  <tt class="py-line"> </tt>
-<a name="L655"></a><tt class="py-lineno"> 655</tt> <a class="py-toggle" href="#" id="createMethod-toggle" onclick="return toggle('createMethod');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#createMethod">createMethod</a><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">,</tt> <tt class="py-param">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="createMethod-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="createMethod-expanded"><a name="L656"></a><tt class="py-lineno"> 656</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates a method for attaching to a Resource.</tt> </tt>
-<a name="L657"></a><tt class="py-lineno"> 657</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L658"></a><tt class="py-lineno"> 658</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L659"></a><tt class="py-lineno"> 659</tt>  <tt class="py-line"><tt class="py-docstring">    methodName: string, name of the method to use.</tt> </tt>
-<a name="L660"></a><tt class="py-lineno"> 660</tt>  <tt class="py-line"><tt class="py-docstring">    methodDesc: object, fragment of deserialized discovery document that</tt> </tt>
-<a name="L661"></a><tt class="py-lineno"> 661</tt>  <tt class="py-line"><tt class="py-docstring">      describes the method.</tt> </tt>
-<a name="L662"></a><tt class="py-lineno"> 662</tt>  <tt class="py-line"><tt class="py-docstring">    rootDesc: object, the entire deserialized discovery document.</tt> </tt>
-<a name="L663"></a><tt class="py-lineno"> 663</tt>  <tt class="py-line"><tt class="py-docstring">    schema: object, mapping of schema names to schema descriptions.</tt> </tt>
-<a name="L664"></a><tt class="py-lineno"> 664</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L665"></a><tt class="py-lineno"> 665</tt>  <tt class="py-line">  <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-158" class="py-name" targets="Function googleapiclient.discovery.fix_method_name()=googleapiclient.discovery-module.html#fix_method_name"><a title="googleapiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-158', 'fix_method_name', 'link-158');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
-<a name="L666"></a><tt class="py-lineno"> 666</tt>  <tt class="py-line">  <tt class="py-op">(</tt><tt class="py-name">pathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">httpMethod</tt><tt class="py-op">,</tt> <tt class="py-name">methodId</tt><tt class="py-op">,</tt> <tt id="link-159" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-157', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
+<a name="L648"></a><tt class="py-lineno"> 648</tt>  <tt class="py-line"> </tt>
+<a name="L649"></a><tt class="py-lineno"> 649</tt>  <tt class="py-line">    <tt class="py-comment"># TODO(dhermes): Determine if this is still necessary. Discovery based APIs</tt> </tt>
+<a name="L650"></a><tt class="py-lineno"> 650</tt>  <tt class="py-line">    <tt class="py-comment">#                should have all path parameters already marked with</tt> </tt>
+<a name="L651"></a><tt class="py-lineno"> 651</tt>  <tt class="py-line">    <tt class="py-comment">#                'location: path'.</tt> </tt>
+<a name="L652"></a><tt class="py-lineno"> 652</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">match</tt> <tt class="py-keyword">in</tt> <tt id="link-158" class="py-name"><a title="googleapiclient.discovery.URITEMPLATE" class="py-name" href="#" onclick="return doclink('link-158', 'URITEMPLATE', 'link-45');">URITEMPLATE</a></tt><tt class="py-op">.</tt><tt class="py-name">finditer</tt><tt class="py-op">(</tt><tt class="py-name">method_desc</tt><tt class="py-op">[</tt><tt class="py-string">'path'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L653"></a><tt class="py-lineno"> 653</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">namematch</tt> <tt class="py-keyword">in</tt> <tt id="link-159" class="py-name"><a title="googleapiclient.discovery.VARNAME" class="py-name" href="#" onclick="return doclink('link-159', 'VARNAME', 'link-46');">VARNAME</a></tt><tt class="py-op">.</tt><tt class="py-name">finditer</tt><tt class="py-op">(</tt><tt class="py-name">match</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L654"></a><tt class="py-lineno"> 654</tt>  <tt class="py-line">        <tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt id="link-160" class="py-name"><a title="googleapiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-160', 'key2param', 'link-149');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">namematch</tt><tt class="py-op">.</tt><tt class="py-name">group</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L655"></a><tt class="py-lineno"> 655</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="googleapiclient.http.BatchHttpRequest.add" class="py-name" href="#" onclick="return doclink('link-161', 'add', 'link-156');">add</a></tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L656"></a><tt class="py-lineno"> 656</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L657"></a><tt class="py-lineno"> 657</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L658"></a><tt class="py-lineno"> 658</tt>  <tt class="py-line"> </tt>
+<a name="createMethod"></a><div id="createMethod-def"><a name="L659"></a><tt class="py-lineno"> 659</tt>  <tt class="py-line"> </tt>
+<a name="L660"></a><tt class="py-lineno"> 660</tt> <a class="py-toggle" href="#" id="createMethod-toggle" onclick="return toggle('createMethod');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#createMethod">createMethod</a><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">,</tt> <tt class="py-param">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="createMethod-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="createMethod-expanded"><a name="L661"></a><tt class="py-lineno"> 661</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates a method for attaching to a Resource.</tt> </tt>
+<a name="L662"></a><tt class="py-lineno"> 662</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L663"></a><tt class="py-lineno"> 663</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L664"></a><tt class="py-lineno"> 664</tt>  <tt class="py-line"><tt class="py-docstring">    methodName: string, name of the method to use.</tt> </tt>
+<a name="L665"></a><tt class="py-lineno"> 665</tt>  <tt class="py-line"><tt class="py-docstring">    methodDesc: object, fragment of deserialized discovery document that</tt> </tt>
+<a name="L666"></a><tt class="py-lineno"> 666</tt>  <tt class="py-line"><tt class="py-docstring">      describes the method.</tt> </tt>
+<a name="L667"></a><tt class="py-lineno"> 667</tt>  <tt class="py-line"><tt class="py-docstring">    rootDesc: object, the entire deserialized discovery document.</tt> </tt>
+<a name="L668"></a><tt class="py-lineno"> 668</tt>  <tt class="py-line"><tt class="py-docstring">    schema: object, mapping of schema names to schema descriptions.</tt> </tt>
+<a name="L669"></a><tt class="py-lineno"> 669</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L670"></a><tt class="py-lineno"> 670</tt>  <tt class="py-line">  <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-162" class="py-name" targets="Function googleapiclient.discovery.fix_method_name()=googleapiclient.discovery-module.html#fix_method_name"><a title="googleapiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-162', 'fix_method_name', 'link-162');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
+<a name="L671"></a><tt class="py-lineno"> 671</tt>  <tt class="py-line">  <tt class="py-op">(</tt><tt class="py-name">pathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">httpMethod</tt><tt class="py-op">,</tt> <tt class="py-name">methodId</tt><tt class="py-op">,</tt> <tt id="link-163" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-159', 'accept', 'link-127');">accept</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L667"></a><tt class="py-lineno"> 667</tt>  <tt class="py-line">   <tt class="py-name">maxSize</tt><tt class="py-op">,</tt> <tt class="py-name">mediaPathUrl</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt id="link-160" class="py-name" targets="Function googleapiclient.discovery._fix_up_method_description()=googleapiclient.discovery-module.html#_fix_up_method_description"><a title="googleapiclient.discovery._fix_up_method_description" class="py-name" href="#" onclick="return doclink('link-160', '_fix_up_method_description', 'link-160');">_fix_up_method_description</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">)</tt> </tt>
-<a name="L668"></a><tt class="py-lineno"> 668</tt>  <tt class="py-line"> </tt>
-<a name="L669"></a><tt class="py-lineno"> 669</tt>  <tt class="py-line">  <tt class="py-name">parameters</tt> <tt class="py-op">=</tt> <tt id="link-161" class="py-name" targets="Class googleapiclient.discovery.ResourceMethodParameters=googleapiclient.discovery.ResourceMethodParameters-class.html"><a title="googleapiclient.discovery.ResourceMethodParameters" class="py-name" href="#" onclick="return doclink('link-161', 'ResourceMethodParameters', 'link-161');">ResourceMethodParameters</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">)</tt> </tt>
-<a name="L670"></a><tt class="py-lineno"> 670</tt>  <tt class="py-line"> </tt>
-<a name="L671"></a><tt class="py-lineno"> 671</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">method</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L672"></a><tt class="py-lineno"> 672</tt>  <tt class="py-line">    <tt class="py-comment"># Don't bother with doc string, it will be over-written by createMethod.</tt> </tt>
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-163', 'accept', 'link-131');">accept</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L672"></a><tt class="py-lineno"> 672</tt>  <tt class="py-line">   <tt class="py-name">maxSize</tt><tt class="py-op">,</tt> <tt class="py-name">mediaPathUrl</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt id="link-164" class="py-name" targets="Function googleapiclient.discovery._fix_up_method_description()=googleapiclient.discovery-module.html#_fix_up_method_description"><a title="googleapiclient.discovery._fix_up_method_description" class="py-name" href="#" onclick="return doclink('link-164', '_fix_up_method_description', 'link-164');">_fix_up_method_description</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">)</tt> </tt>
 <a name="L673"></a><tt class="py-lineno"> 673</tt>  <tt class="py-line"> </tt>
-<a name="L674"></a><tt class="py-lineno"> 674</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iterkeys</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L675"></a><tt class="py-lineno"> 675</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">:</tt> </tt>
-<a name="L676"></a><tt class="py-lineno"> 676</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Got an unexpected keyword argument "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
-<a name="L677"></a><tt class="py-lineno"> 677</tt>  <tt class="py-line"> </tt>
-<a name="L678"></a><tt class="py-lineno"> 678</tt>  <tt class="py-line">    <tt class="py-comment"># Remove args that have a value of None.</tt> </tt>
-<a name="L679"></a><tt class="py-lineno"> 679</tt>  <tt class="py-line">    <tt class="py-name">keys</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L680"></a><tt class="py-lineno"> 680</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">keys</tt><tt class="py-op">:</tt> </tt>
-<a name="L681"></a><tt class="py-lineno"> 681</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L682"></a><tt class="py-lineno"> 682</tt>  <tt class="py-line">        <tt class="py-keyword">del</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
-<a name="L683"></a><tt class="py-lineno"> 683</tt>  <tt class="py-line"> </tt>
-<a name="L684"></a><tt class="py-lineno"> 684</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt><tt class="py-op">:</tt> </tt>
-<a name="L685"></a><tt class="py-lineno"> 685</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
-<a name="L686"></a><tt class="py-lineno"> 686</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Missing required parameter "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
-<a name="L687"></a><tt class="py-lineno"> 687</tt>  <tt class="py-line"> </tt>
-<a name="L688"></a><tt class="py-lineno"> 688</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">pattern_params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L689"></a><tt class="py-lineno"> 689</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
-<a name="L690"></a><tt class="py-lineno"> 690</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">string_types</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L691"></a><tt class="py-lineno"> 691</tt>  <tt class="py-line">          <tt class="py-name">pvalues</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L692"></a><tt class="py-lineno"> 692</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L693"></a><tt class="py-lineno"> 693</tt>  <tt class="py-line">          <tt class="py-name">pvalues</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
-<a name="L694"></a><tt class="py-lineno"> 694</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">pvalue</tt> <tt class="py-keyword">in</tt> <tt class="py-name">pvalues</tt><tt class="py-op">:</tt> </tt>
-<a name="L695"></a><tt class="py-lineno"> 695</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">regex</tt><tt class="py-op">,</tt> <tt class="py-name">pvalue</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L696"></a><tt class="py-lineno"> 696</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt> </tt>
-<a name="L697"></a><tt class="py-lineno"> 697</tt>  <tt class="py-line">                <tt class="py-string">'Parameter "%s" value "%s" does not match the pattern "%s"'</tt> <tt class="py-op">%</tt> </tt>
-<a name="L698"></a><tt class="py-lineno"> 698</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">pvalue</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L699"></a><tt class="py-lineno"> 699</tt>  <tt class="py-line"> </tt>
-<a name="L700"></a><tt class="py-lineno"> 700</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">enums</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">enum_params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L701"></a><tt class="py-lineno"> 701</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
-<a name="L702"></a><tt class="py-lineno"> 702</tt>  <tt class="py-line">        <tt class="py-comment"># We need to handle the case of a repeated enum</tt> </tt>
-<a name="L703"></a><tt class="py-lineno"> 703</tt>  <tt class="py-line">        <tt class="py-comment"># name differently, since we want to handle both</tt> </tt>
-<a name="L704"></a><tt class="py-lineno"> 704</tt>  <tt class="py-line">        <tt class="py-comment"># arg='value' and arg=['value1', 'value2']</tt> </tt>
-<a name="L705"></a><tt class="py-lineno"> 705</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt> <tt class="py-keyword">and</tt> </tt>
-<a name="L706"></a><tt class="py-lineno"> 706</tt>  <tt class="py-line">            <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">string_types</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L707"></a><tt class="py-lineno"> 707</tt>  <tt class="py-line">          <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
-<a name="L708"></a><tt class="py-lineno"> 708</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L709"></a><tt class="py-lineno"> 709</tt>  <tt class="py-line">          <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L710"></a><tt class="py-lineno"> 710</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">values</tt><tt class="py-op">:</tt> </tt>
-<a name="L711"></a><tt class="py-lineno"> 711</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">enums</tt><tt class="py-op">:</tt> </tt>
-<a name="L712"></a><tt class="py-lineno"> 712</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt> </tt>
-<a name="L713"></a><tt class="py-lineno"> 713</tt>  <tt class="py-line">                <tt class="py-string">'Parameter "%s" value "%s" is not an allowed value in "%s"'</tt> <tt class="py-op">%</tt> </tt>
-<a name="L714"></a><tt class="py-lineno"> 714</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">enums</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L715"></a><tt class="py-lineno"> 715</tt>  <tt class="py-line"> </tt>
-<a name="L716"></a><tt class="py-lineno"> 716</tt>  <tt class="py-line">    <tt class="py-name">actual_query_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L717"></a><tt class="py-lineno"> 717</tt>  <tt class="py-line">    <tt class="py-name">actual_path_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L718"></a><tt class="py-lineno"> 718</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L719"></a><tt class="py-lineno"> 719</tt>  <tt class="py-line">      <tt class="py-name">to_type</tt> <tt class="py-op">=</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">param_types</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+<a name="L674"></a><tt class="py-lineno"> 674</tt>  <tt class="py-line">  <tt class="py-name">parameters</tt> <tt class="py-op">=</tt> <tt id="link-165" class="py-name" targets="Class googleapiclient.discovery.ResourceMethodParameters=googleapiclient.discovery.ResourceMethodParameters-class.html"><a title="googleapiclient.discovery.ResourceMethodParameters" class="py-name" href="#" onclick="return doclink('link-165', 'ResourceMethodParameters', 'link-165');">ResourceMethodParameters</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">)</tt> </tt>
+<a name="L675"></a><tt class="py-lineno"> 675</tt>  <tt class="py-line"> </tt>
+<a name="L676"></a><tt class="py-lineno"> 676</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">method</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L677"></a><tt class="py-lineno"> 677</tt>  <tt class="py-line">    <tt class="py-comment"># Don't bother with doc string, it will be over-written by createMethod.</tt> </tt>
+<a name="L678"></a><tt class="py-lineno"> 678</tt>  <tt class="py-line"> </tt>
+<a name="L679"></a><tt class="py-lineno"> 679</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iterkeys</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L680"></a><tt class="py-lineno"> 680</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">:</tt> </tt>
+<a name="L681"></a><tt class="py-lineno"> 681</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Got an unexpected keyword argument "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L682"></a><tt class="py-lineno"> 682</tt>  <tt class="py-line"> </tt>
+<a name="L683"></a><tt class="py-lineno"> 683</tt>  <tt class="py-line">    <tt class="py-comment"># Remove args that have a value of None.</tt> </tt>
+<a name="L684"></a><tt class="py-lineno"> 684</tt>  <tt class="py-line">    <tt class="py-name">keys</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L685"></a><tt class="py-lineno"> 685</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">keys</tt><tt class="py-op">:</tt> </tt>
+<a name="L686"></a><tt class="py-lineno"> 686</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L687"></a><tt class="py-lineno"> 687</tt>  <tt class="py-line">        <tt class="py-keyword">del</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
+<a name="L688"></a><tt class="py-lineno"> 688</tt>  <tt class="py-line"> </tt>
+<a name="L689"></a><tt class="py-lineno"> 689</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L690"></a><tt class="py-lineno"> 690</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L691"></a><tt class="py-lineno"> 691</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Missing required parameter "%s"'</tt> <tt class="py-op">%</tt> <tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L692"></a><tt class="py-lineno"> 692</tt>  <tt class="py-line"> </tt>
+<a name="L693"></a><tt class="py-lineno"> 693</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">pattern_params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L694"></a><tt class="py-lineno"> 694</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L695"></a><tt class="py-lineno"> 695</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">string_types</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L696"></a><tt class="py-lineno"> 696</tt>  <tt class="py-line">          <tt class="py-name">pvalues</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+<a name="L697"></a><tt class="py-lineno"> 697</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L698"></a><tt class="py-lineno"> 698</tt>  <tt class="py-line">          <tt class="py-name">pvalues</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
+<a name="L699"></a><tt class="py-lineno"> 699</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">pvalue</tt> <tt class="py-keyword">in</tt> <tt class="py-name">pvalues</tt><tt class="py-op">:</tt> </tt>
+<a name="L700"></a><tt class="py-lineno"> 700</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">re</tt><tt class="py-op">.</tt><tt class="py-name">match</tt><tt class="py-op">(</tt><tt class="py-name">regex</tt><tt class="py-op">,</tt> <tt class="py-name">pvalue</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L701"></a><tt class="py-lineno"> 701</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt> </tt>
+<a name="L702"></a><tt class="py-lineno"> 702</tt>  <tt class="py-line">                <tt class="py-string">'Parameter "%s" value "%s" does not match the pattern "%s"'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L703"></a><tt class="py-lineno"> 703</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">pvalue</tt><tt class="py-op">,</tt> <tt class="py-name">regex</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L704"></a><tt class="py-lineno"> 704</tt>  <tt class="py-line"> </tt>
+<a name="L705"></a><tt class="py-lineno"> 705</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">enums</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">enum_params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L706"></a><tt class="py-lineno"> 706</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">kwargs</tt><tt class="py-op">:</tt> </tt>
+<a name="L707"></a><tt class="py-lineno"> 707</tt>  <tt class="py-line">        <tt class="py-comment"># We need to handle the case of a repeated enum</tt> </tt>
+<a name="L708"></a><tt class="py-lineno"> 708</tt>  <tt class="py-line">        <tt class="py-comment"># name differently, since we want to handle both</tt> </tt>
+<a name="L709"></a><tt class="py-lineno"> 709</tt>  <tt class="py-line">        <tt class="py-comment"># arg='value' and arg=['value1', 'value2']</tt> </tt>
+<a name="L710"></a><tt class="py-lineno"> 710</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L711"></a><tt class="py-lineno"> 711</tt>  <tt class="py-line">            <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">string_types</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L712"></a><tt class="py-lineno"> 712</tt>  <tt class="py-line">          <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> </tt>
+<a name="L713"></a><tt class="py-lineno"> 713</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L714"></a><tt class="py-lineno"> 714</tt>  <tt class="py-line">          <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">kwargs</tt><tt class="py-op">[</tt><tt class="py-name">name</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+<a name="L715"></a><tt class="py-lineno"> 715</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">values</tt><tt class="py-op">:</tt> </tt>
+<a name="L716"></a><tt class="py-lineno"> 716</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">value</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">enums</tt><tt class="py-op">:</tt> </tt>
+<a name="L717"></a><tt class="py-lineno"> 717</tt>  <tt class="py-line">            <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt> </tt>
+<a name="L718"></a><tt class="py-lineno"> 718</tt>  <tt class="py-line">                <tt class="py-string">'Parameter "%s" value "%s" is not an allowed value in "%s"'</tt> <tt class="py-op">%</tt> </tt>
+<a name="L719"></a><tt class="py-lineno"> 719</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">enums</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L720"></a><tt class="py-lineno"> 720</tt>  <tt class="py-line"> </tt>
+<a name="L721"></a><tt class="py-lineno"> 721</tt>  <tt class="py-line">    <tt class="py-name">actual_query_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L722"></a><tt class="py-lineno"> 722</tt>  <tt class="py-line">    <tt class="py-name">actual_path_params</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L723"></a><tt class="py-lineno"> 723</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L724"></a><tt class="py-lineno"> 724</tt>  <tt class="py-line">      <tt class="py-name">to_type</tt> <tt class="py-op">=</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">param_types</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-162', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
-<a name="L720"></a><tt class="py-lineno"> 720</tt>  <tt class="py-line">      <tt class="py-comment"># For repeated parameters we cast each member of the list.</tt> </tt>
-<a name="L721"></a><tt class="py-lineno"> 721</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt> <tt class="py-keyword">and</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L722"></a><tt class="py-lineno"> 722</tt>  <tt class="py-line">        <tt class="py-name">cast_value</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-163" class="py-name" targets="Function googleapiclient.discovery._cast()=googleapiclient.discovery-module.html#_cast"><a title="googleapiclient.discovery._cast" class="py-name" href="#" onclick="return doclink('link-163', '_cast', 'link-163');">_cast</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">to_type</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">x</tt> <tt class="py-keyword">in</tt> <tt class="py-name">value</tt><tt class="py-op">]</tt> </tt>
-<a name="L723"></a><tt class="py-lineno"> 723</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L724"></a><tt class="py-lineno"> 724</tt>  <tt class="py-line">        <tt class="py-name">cast_value</tt> <tt class="py-op">=</tt> <tt id="link-164" class="py-name"><a title="googleapiclient.discovery._cast" class="py-name" href="#" onclick="return doclink('link-164', '_cast', 'link-163');">_cast</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">to_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L725"></a><tt class="py-lineno"> 725</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt><tt class="py-op">:</tt> </tt>
-<a name="L726"></a><tt class="py-lineno"> 726</tt>  <tt class="py-line">        <tt class="py-name">actual_query_params</tt><tt class="py-op">[</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">cast_value</tt> </tt>
-<a name="L727"></a><tt class="py-lineno"> 727</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt><tt class="py-op">:</tt> </tt>
-<a name="L728"></a><tt class="py-lineno"> 728</tt>  <tt class="py-line">        <tt class="py-name">actual_path_params</tt><tt class="py-op">[</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">cast_value</tt> </tt>
-<a name="L729"></a><tt class="py-lineno"> 729</tt>  <tt class="py-line">    <tt class="py-name">body_value</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-165" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-166', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
+<a name="L725"></a><tt class="py-lineno"> 725</tt>  <tt class="py-line">      <tt class="py-comment"># For repeated parameters we cast each member of the list.</tt> </tt>
+<a name="L726"></a><tt class="py-lineno"> 726</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt> <tt class="py-keyword">and</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L727"></a><tt class="py-lineno"> 727</tt>  <tt class="py-line">        <tt class="py-name">cast_value</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-167" class="py-name" targets="Function googleapiclient.discovery._cast()=googleapiclient.discovery-module.html#_cast"><a title="googleapiclient.discovery._cast" class="py-name" href="#" onclick="return doclink('link-167', '_cast', 'link-167');">_cast</a></tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">to_type</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">x</tt> <tt class="py-keyword">in</tt> <tt class="py-name">value</tt><tt class="py-op">]</tt> </tt>
+<a name="L728"></a><tt class="py-lineno"> 728</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L729"></a><tt class="py-lineno"> 729</tt>  <tt class="py-line">        <tt class="py-name">cast_value</tt> <tt class="py-op">=</tt> <tt id="link-168" class="py-name"><a title="googleapiclient.discovery._cast" class="py-name" href="#" onclick="return doclink('link-168', '_cast', 'link-167');">_cast</a></tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">to_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L730"></a><tt class="py-lineno"> 730</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">query_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L731"></a><tt class="py-lineno"> 731</tt>  <tt class="py-line">        <tt class="py-name">actual_query_params</tt><tt class="py-op">[</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">cast_value</tt> </tt>
+<a name="L732"></a><tt class="py-lineno"> 732</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">path_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L733"></a><tt class="py-lineno"> 733</tt>  <tt class="py-line">        <tt class="py-name">actual_path_params</tt><tt class="py-op">[</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">cast_value</tt> </tt>
+<a name="L734"></a><tt class="py-lineno"> 734</tt>  <tt class="py-line">    <tt class="py-name">body_value</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-169" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-165', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L730"></a><tt class="py-lineno"> 730</tt>  <tt class="py-line">    <tt class="py-name">media_filename</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-169', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L735"></a><tt class="py-lineno"> 735</tt>  <tt class="py-line">    <tt class="py-name">media_filename</tt> <tt class="py-op">=</tt> <tt class="py-name">kwargs</tt><tt class="py-op">.</tt><tt id="link-170" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-166', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'media_body'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L731"></a><tt class="py-lineno"> 731</tt>  <tt class="py-line"> </tt>
-<a name="L732"></a><tt class="py-lineno"> 732</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt><tt class="py-op">:</tt> </tt>
-<a name="L733"></a><tt class="py-lineno"> 733</tt>  <tt class="py-line">      <tt class="py-name">actual_query_params</tt><tt class="py-op">[</tt><tt class="py-string">'key'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt> </tt>
-<a name="L734"></a><tt class="py-lineno"> 734</tt>  <tt class="py-line"> </tt>
-<a name="L735"></a><tt class="py-lineno"> 735</tt>  <tt class="py-line">    <tt id="link-167" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-167', 'model', 'link-33');">model</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> </tt>
-<a name="L736"></a><tt class="py-lineno"> 736</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodName</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'_media'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L737"></a><tt class="py-lineno"> 737</tt>  <tt class="py-line">      <tt id="link-168" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-168', 'model', 'link-33');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-169" class="py-name"><a title="googleapiclient.model.MediaModel" class="py-name" href="#" onclick="return doclink('link-169', 'MediaModel', 'link-37');">MediaModel</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L738"></a><tt class="py-lineno"> 738</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L739"></a><tt class="py-lineno"> 739</tt>  <tt class="py-line">      <tt id="link-170" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-170', 'model', 'link-33');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-171" class="py-name"><a title="googleapiclient.model.RawModel" class="py-name" href="#" onclick="return doclink('link-171', 'RawModel', 'link-40');">RawModel</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L740"></a><tt class="py-lineno"> 740</tt>  <tt class="py-line"> </tt>
-<a name="L741"></a><tt class="py-lineno"> 741</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L742"></a><tt class="py-lineno"> 742</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">,</tt> <tt id="link-172" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-172', 'body', 'link-121');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-173" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-173', 'model', 'link-33');">model</a></tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-170', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'media_body'</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L736"></a><tt class="py-lineno"> 736</tt>  <tt class="py-line"> </tt>
+<a name="L737"></a><tt class="py-lineno"> 737</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt><tt class="py-op">:</tt> </tt>
+<a name="L738"></a><tt class="py-lineno"> 738</tt>  <tt class="py-line">      <tt class="py-name">actual_query_params</tt><tt class="py-op">[</tt><tt class="py-string">'key'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt> </tt>
+<a name="L739"></a><tt class="py-lineno"> 739</tt>  <tt class="py-line"> </tt>
+<a name="L740"></a><tt class="py-lineno"> 740</tt>  <tt class="py-line">    <tt id="link-171" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-171', 'model', 'link-33');">model</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> </tt>
+<a name="L741"></a><tt class="py-lineno"> 741</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodName</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'_media'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L742"></a><tt class="py-lineno"> 742</tt>  <tt class="py-line">      <tt id="link-172" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-172', 'model', 'link-33');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-173" class="py-name"><a title="googleapiclient.model.MediaModel" class="py-name" href="#" onclick="return doclink('link-173', 'MediaModel', 'link-37');">MediaModel</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L743"></a><tt class="py-lineno"> 743</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L744"></a><tt class="py-lineno"> 744</tt>  <tt class="py-line">      <tt id="link-174" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-174', 'model', 'link-33');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-175" class="py-name"><a title="googleapiclient.model.RawModel" class="py-name" href="#" onclick="return doclink('link-175', 'RawModel', 'link-40');">RawModel</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L745"></a><tt class="py-lineno"> 745</tt>  <tt class="py-line"> </tt>
+<a name="L746"></a><tt class="py-lineno"> 746</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">,</tt> <tt id="link-176" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-176', 'body', 'link-125');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-177" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-177', 'model', 'link-33');">model</a></tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-174', 'request', 'link-85');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
-<a name="L743"></a><tt class="py-lineno"> 743</tt>  <tt class="py-line">        <tt class="py-name">actual_path_params</tt><tt class="py-op">,</tt> <tt class="py-name">actual_query_params</tt><tt class="py-op">,</tt> <tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
-<a name="L744"></a><tt class="py-lineno"> 744</tt>  <tt class="py-line"> </tt>
-<a name="L745"></a><tt class="py-lineno"> 745</tt>  <tt class="py-line">    <tt class="py-name">expanded_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">pathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
-<a name="L746"></a><tt class="py-lineno"> 746</tt>  <tt class="py-line">    <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-175" class="py-name" targets="Function googleapiclient.discovery._urljoin()=googleapiclient.discovery-module.html#_urljoin"><a title="googleapiclient.discovery._urljoin" class="py-name" href="#" onclick="return doclink('link-175', '_urljoin', 'link-175');">_urljoin</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> <tt class="py-name">expanded_url</tt> <tt class="py-op">+</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
-<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line"> </tt>
-<a name="L748"></a><tt class="py-lineno"> 748</tt>  <tt class="py-line">    <tt id="link-176" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.resumable()=googleapiclient.http.MediaIoBaseUpload-class.html#resumable,Method googleapiclient.http.MediaUpload.resumable()=googleapiclient.http.MediaUpload-class.html#resumable"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-176', 'resumable', 'link-176');">resumable</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L749"></a><tt class="py-lineno"> 749</tt>  <tt class="py-line">    <tt class="py-name">multipart_boundary</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L750"></a><tt class="py-lineno"> 750</tt>  <tt class="py-line"> </tt>
-<a name="L751"></a><tt class="py-lineno"> 751</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">media_filename</tt><tt class="py-op">:</tt> </tt>
-<a name="L752"></a><tt class="py-lineno"> 752</tt>  <tt class="py-line">      <tt class="py-comment"># Ensure we end up with a valid MediaUpload object.</tt> </tt>
-<a name="L753"></a><tt class="py-lineno"> 753</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">string_types</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L754"></a><tt class="py-lineno"> 754</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">,</tt> <tt class="py-name">encoding</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">mimetypes</tt><tt class="py-op">.</tt><tt class="py-name">guess_type</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">)</tt> </tt>
-<a name="L755"></a><tt class="py-lineno"> 755</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">media_mime_type</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L756"></a><tt class="py-lineno"> 756</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-177" class="py-name"><a title="googleapiclient.errors.UnknownFileType" class="py-name" href="#" onclick="return doclink('link-177', 'UnknownFileType', 'link-19');">UnknownFileType</a></tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">)</tt> </tt>
-<a name="L757"></a><tt class="py-lineno"> 757</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-178" class="py-name"><a title="googleapiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-178', 'mimeparse', 'link-1');">mimeparse</a></tt><tt class="py-op">.</tt><tt id="link-179" class="py-name" targets="Function googleapiclient.mimeparse.best_match()=googleapiclient.mimeparse-module.html#best_match"><a title="googleapiclient.mimeparse.best_match" class="py-name" href="#" onclick="return doclink('link-179', 'best_match', 'link-179');">best_match</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">','</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt id="link-180" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-178', 'request', 'link-89');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
+<a name="L748"></a><tt class="py-lineno"> 748</tt>  <tt class="py-line">        <tt class="py-name">actual_path_params</tt><tt class="py-op">,</tt> <tt class="py-name">actual_query_params</tt><tt class="py-op">,</tt> <tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
+<a name="L749"></a><tt class="py-lineno"> 749</tt>  <tt class="py-line"> </tt>
+<a name="L750"></a><tt class="py-lineno"> 750</tt>  <tt class="py-line">    <tt class="py-name">expanded_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">pathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L751"></a><tt class="py-lineno"> 751</tt>  <tt class="py-line">    <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-179" class="py-name" targets="Function googleapiclient.discovery._urljoin()=googleapiclient.discovery-module.html#_urljoin"><a title="googleapiclient.discovery._urljoin" class="py-name" href="#" onclick="return doclink('link-179', '_urljoin', 'link-179');">_urljoin</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> <tt class="py-name">expanded_url</tt> <tt class="py-op">+</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
+<a name="L752"></a><tt class="py-lineno"> 752</tt>  <tt class="py-line"> </tt>
+<a name="L753"></a><tt class="py-lineno"> 753</tt>  <tt class="py-line">    <tt id="link-180" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.resumable()=googleapiclient.http.MediaIoBaseUpload-class.html#resumable,Method googleapiclient.http.MediaUpload.resumable()=googleapiclient.http.MediaUpload-class.html#resumable"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-180', 'resumable', 'link-180');">resumable</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L754"></a><tt class="py-lineno"> 754</tt>  <tt class="py-line">    <tt class="py-name">multipart_boundary</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L755"></a><tt class="py-lineno"> 755</tt>  <tt class="py-line"> </tt>
+<a name="L756"></a><tt class="py-lineno"> 756</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">media_filename</tt><tt class="py-op">:</tt> </tt>
+<a name="L757"></a><tt class="py-lineno"> 757</tt>  <tt class="py-line">      <tt class="py-comment"># Ensure we end up with a valid MediaUpload object.</tt> </tt>
+<a name="L758"></a><tt class="py-lineno"> 758</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">string_types</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L759"></a><tt class="py-lineno"> 759</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">,</tt> <tt class="py-name">encoding</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">mimetypes</tt><tt class="py-op">.</tt><tt class="py-name">guess_type</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">)</tt> </tt>
+<a name="L760"></a><tt class="py-lineno"> 760</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">media_mime_type</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L761"></a><tt class="py-lineno"> 761</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-181" class="py-name"><a title="googleapiclient.errors.UnknownFileType" class="py-name" href="#" onclick="return doclink('link-181', 'UnknownFileType', 'link-19');">UnknownFileType</a></tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">)</tt> </tt>
+<a name="L762"></a><tt class="py-lineno"> 762</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-182" class="py-name"><a title="googleapiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-182', 'mimeparse', 'link-1');">mimeparse</a></tt><tt class="py-op">.</tt><tt id="link-183" class="py-name" targets="Function googleapiclient.mimeparse.best_match()=googleapiclient.mimeparse-module.html#best_match"><a title="googleapiclient.mimeparse.best_match" class="py-name" href="#" onclick="return doclink('link-183', 'best_match', 'link-183');">best_match</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">','</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt id="link-184" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-180', 'accept', 'link-127');">accept</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L758"></a><tt class="py-lineno"> 758</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-181" class="py-name"><a title="googleapiclient.errors.UnacceptableMimeTypeError" class="py-name" href="#" onclick="return doclink('link-181', 'UnacceptableMimeTypeError', 'link-13');">UnacceptableMimeTypeError</a></tt><tt class="py-op">(</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L759"></a><tt class="py-lineno"> 759</tt>  <tt class="py-line">        <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt id="link-182" class="py-name"><a title="googleapiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-182', 'MediaFileUpload', 'link-28');">MediaFileUpload</a></tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> </tt>
-<a name="L760"></a><tt class="py-lineno"> 760</tt>  <tt class="py-line">                                       <tt id="link-183" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.mimetype()=googleapiclient.http.MediaIoBaseUpload-class.html#mimetype,Method googleapiclient.http.MediaUpload.mimetype()=googleapiclient.http.MediaUpload-class.html#mimetype"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-183', 'mimetype', 'link-183');">mimetype</a></tt><tt class="py-op">=</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L761"></a><tt class="py-lineno"> 761</tt>  <tt class="py-line">      <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> <tt id="link-184" class="py-name"><a title="googleapiclient.http.MediaUpload" class="py-name" href="#" onclick="return doclink('link-184', 'MediaUpload', 'link-31');">MediaUpload</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L762"></a><tt class="py-lineno"> 762</tt>  <tt class="py-line">        <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt class="py-name">media_filename</tt> </tt>
-<a name="L763"></a><tt class="py-lineno"> 763</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L764"></a><tt class="py-lineno"> 764</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'media_filename must be str or MediaUpload.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L765"></a><tt class="py-lineno"> 765</tt>  <tt class="py-line"> </tt>
-<a name="L766"></a><tt class="py-lineno"> 766</tt>  <tt class="py-line">      <tt class="py-comment"># Check the maxSize</tt> </tt>
-<a name="L767"></a><tt class="py-lineno"> 767</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-185" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.size()=googleapiclient.http.MediaIoBaseUpload-class.html#size,Method googleapiclient.http.MediaUpload.size()=googleapiclient.http.MediaUpload-class.html#size"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-185', 'size', 'link-185');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-186', 'size', 'link-185');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">maxSize</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L768"></a><tt class="py-lineno"> 768</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-187" class="py-name"><a title="googleapiclient.errors.MediaUploadSizeError" class="py-name" href="#" onclick="return doclink('link-187', 'MediaUploadSizeError', 'link-10');">MediaUploadSizeError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Media larger than: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">maxSize</tt><tt class="py-op">)</tt> </tt>
-<a name="L769"></a><tt class="py-lineno"> 769</tt>  <tt class="py-line"> </tt>
-<a name="L770"></a><tt class="py-lineno"> 770</tt>  <tt class="py-line">      <tt class="py-comment"># Use the media path uri for media uploads</tt> </tt>
-<a name="L771"></a><tt class="py-lineno"> 771</tt>  <tt class="py-line">      <tt class="py-name">expanded_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">mediaPathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
-<a name="L772"></a><tt class="py-lineno"> 772</tt>  <tt class="py-line">      <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-188" class="py-name"><a title="googleapiclient.discovery._urljoin" class="py-name" href="#" onclick="return doclink('link-188', '_urljoin', 'link-175');">_urljoin</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> <tt class="py-name">expanded_url</tt> <tt class="py-op">+</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
-<a name="L773"></a><tt class="py-lineno"> 773</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-189', 'resumable', 'link-176');">resumable</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L774"></a><tt class="py-lineno"> 774</tt>  <tt class="py-line">        <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">_add_query_parameter</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'resumable'</tt><tt class="py-op">)</tt> </tt>
-<a name="L775"></a><tt class="py-lineno"> 775</tt>  <tt class="py-line"> </tt>
-<a name="L776"></a><tt class="py-lineno"> 776</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-190" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-190', 'resumable', 'link-176');">resumable</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L777"></a><tt class="py-lineno"> 777</tt>  <tt class="py-line">        <tt class="py-comment"># This is all we need to do for resumable, if the body exists it gets</tt> </tt>
-<a name="L778"></a><tt class="py-lineno"> 778</tt>  <tt class="py-line">        <tt class="py-comment"># sent in the first request, otherwise an empty body is sent.</tt> </tt>
-<a name="L779"></a><tt class="py-lineno"> 779</tt>  <tt class="py-line">        <tt id="link-191" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-191', 'resumable', 'link-176');">resumable</a></tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt> </tt>
-<a name="L780"></a><tt class="py-lineno"> 780</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L781"></a><tt class="py-lineno"> 781</tt>  <tt class="py-line">        <tt class="py-comment"># A non-resumable upload</tt> </tt>
-<a name="L782"></a><tt class="py-lineno"> 782</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-192" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-192', 'body', 'link-121');">body</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L783"></a><tt class="py-lineno"> 783</tt>  <tt class="py-line">          <tt class="py-comment"># This is a simple media upload</tt> </tt>
-<a name="L784"></a><tt class="py-lineno"> 784</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-193', 'mimetype', 'link-183');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L785"></a><tt class="py-lineno"> 785</tt>  <tt class="py-line">          <tt id="link-194" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-194', 'body', 'link-121');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-195" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.getbytes()=googleapiclient.http.MediaIoBaseUpload-class.html#getbytes,Method googleapiclient.http.MediaUpload.getbytes()=googleapiclient.http.MediaUpload-class.html#getbytes"><a title="googleapiclient.http.MediaIoBaseUpload.getbytes
-googleapiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-195', 'getbytes', 'link-195');">getbytes</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-196" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-196', 'size', 'link-185');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L786"></a><tt class="py-lineno"> 786</tt>  <tt class="py-line">          <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">_add_query_parameter</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'media'</tt><tt class="py-op">)</tt> </tt>
-<a name="L787"></a><tt class="py-lineno"> 787</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L788"></a><tt class="py-lineno"> 788</tt>  <tt class="py-line">          <tt class="py-comment"># This is a multipart/related upload.</tt> </tt>
-<a name="L789"></a><tt class="py-lineno"> 789</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMEMultipart</tt><tt class="py-op">(</tt><tt class="py-string">'related'</tt><tt class="py-op">)</tt> </tt>
-<a name="L790"></a><tt class="py-lineno"> 790</tt>  <tt class="py-line">          <tt class="py-comment"># msgRoot should not write out it's own headers</tt> </tt>
-<a name="L791"></a><tt class="py-lineno"> 791</tt>  <tt class="py-line">          <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">msgRoot</tt><tt class="py-op">,</tt> <tt class="py-string">'_write_headers'</tt><tt class="py-op">,</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L792"></a><tt class="py-lineno"> 792</tt>  <tt class="py-line"> </tt>
-<a name="L793"></a><tt class="py-lineno"> 793</tt>  <tt class="py-line">          <tt class="py-comment"># attach the body as one part</tt> </tt>
-<a name="L794"></a><tt class="py-lineno"> 794</tt>  <tt class="py-line">          <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L795"></a><tt class="py-lineno"> 795</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt id="link-197" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-197', 'body', 'link-121');">body</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L796"></a><tt class="py-lineno"> 796</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-184', 'accept', 'link-131');">accept</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L763"></a><tt class="py-lineno"> 763</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-185" class="py-name"><a title="googleapiclient.errors.UnacceptableMimeTypeError" class="py-name" href="#" onclick="return doclink('link-185', 'UnacceptableMimeTypeError', 'link-13');">UnacceptableMimeTypeError</a></tt><tt class="py-op">(</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L764"></a><tt class="py-lineno"> 764</tt>  <tt class="py-line">        <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt id="link-186" class="py-name"><a title="googleapiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-186', 'MediaFileUpload', 'link-28');">MediaFileUpload</a></tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> </tt>
+<a name="L765"></a><tt class="py-lineno"> 765</tt>  <tt class="py-line">                                       <tt id="link-187" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.mimetype()=googleapiclient.http.MediaIoBaseUpload-class.html#mimetype,Method googleapiclient.http.MediaUpload.mimetype()=googleapiclient.http.MediaUpload-class.html#mimetype"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-187', 'mimetype', 'link-187');">mimetype</a></tt><tt class="py-op">=</tt><tt class="py-name">media_mime_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L766"></a><tt class="py-lineno"> 766</tt>  <tt class="py-line">      <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">media_filename</tt><tt class="py-op">,</tt> <tt id="link-188" class="py-name"><a title="googleapiclient.http.MediaUpload" class="py-name" href="#" onclick="return doclink('link-188', 'MediaUpload', 'link-31');">MediaUpload</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L767"></a><tt class="py-lineno"> 767</tt>  <tt class="py-line">        <tt class="py-name">media_upload</tt> <tt class="py-op">=</tt> <tt class="py-name">media_filename</tt> </tt>
+<a name="L768"></a><tt class="py-lineno"> 768</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L769"></a><tt class="py-lineno"> 769</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'media_filename must be str or MediaUpload.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L770"></a><tt class="py-lineno"> 770</tt>  <tt class="py-line"> </tt>
+<a name="L771"></a><tt class="py-lineno"> 771</tt>  <tt class="py-line">      <tt class="py-comment"># Check the maxSize</tt> </tt>
+<a name="L772"></a><tt class="py-lineno"> 772</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.size()=googleapiclient.http.MediaIoBaseUpload-class.html#size,Method googleapiclient.http.MediaUpload.size()=googleapiclient.http.MediaUpload-class.html#size"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-189', 'size', 'link-189');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-190" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-190', 'size', 'link-189');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">maxSize</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L773"></a><tt class="py-lineno"> 773</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-191" class="py-name"><a title="googleapiclient.errors.MediaUploadSizeError" class="py-name" href="#" onclick="return doclink('link-191', 'MediaUploadSizeError', 'link-10');">MediaUploadSizeError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Media larger than: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">maxSize</tt><tt class="py-op">)</tt> </tt>
+<a name="L774"></a><tt class="py-lineno"> 774</tt>  <tt class="py-line"> </tt>
+<a name="L775"></a><tt class="py-lineno"> 775</tt>  <tt class="py-line">      <tt class="py-comment"># Use the media path uri for media uploads</tt> </tt>
+<a name="L776"></a><tt class="py-lineno"> 776</tt>  <tt class="py-line">      <tt class="py-name">expanded_url</tt> <tt class="py-op">=</tt> <tt class="py-name">uritemplate</tt><tt class="py-op">.</tt><tt class="py-name">expand</tt><tt class="py-op">(</tt><tt class="py-name">mediaPathUrl</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt><tt class="py-op">)</tt> </tt>
+<a name="L777"></a><tt class="py-lineno"> 777</tt>  <tt class="py-line">      <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt id="link-192" class="py-name"><a title="googleapiclient.discovery._urljoin" class="py-name" href="#" onclick="return doclink('link-192', '_urljoin', 'link-179');">_urljoin</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> <tt class="py-name">expanded_url</tt> <tt class="py-op">+</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
+<a name="L778"></a><tt class="py-lineno"> 778</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-193', 'resumable', 'link-180');">resumable</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L779"></a><tt class="py-lineno"> 779</tt>  <tt class="py-line">        <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">_add_query_parameter</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'resumable'</tt><tt class="py-op">)</tt> </tt>
+<a name="L780"></a><tt class="py-lineno"> 780</tt>  <tt class="py-line"> </tt>
+<a name="L781"></a><tt class="py-lineno"> 781</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-194" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-194', 'resumable', 'link-180');">resumable</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L782"></a><tt class="py-lineno"> 782</tt>  <tt class="py-line">        <tt class="py-comment"># This is all we need to do for resumable, if the body exists it gets</tt> </tt>
+<a name="L783"></a><tt class="py-lineno"> 783</tt>  <tt class="py-line">        <tt class="py-comment"># sent in the first request, otherwise an empty body is sent.</tt> </tt>
+<a name="L784"></a><tt class="py-lineno"> 784</tt>  <tt class="py-line">        <tt id="link-195" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-195', 'resumable', 'link-180');">resumable</a></tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt> </tt>
+<a name="L785"></a><tt class="py-lineno"> 785</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L786"></a><tt class="py-lineno"> 786</tt>  <tt class="py-line">        <tt class="py-comment"># A non-resumable upload</tt> </tt>
+<a name="L787"></a><tt class="py-lineno"> 787</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-196" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-196', 'body', 'link-125');">body</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L788"></a><tt class="py-lineno"> 788</tt>  <tt class="py-line">          <tt class="py-comment"># This is a simple media upload</tt> </tt>
+<a name="L789"></a><tt class="py-lineno"> 789</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-197" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-197', 'mimetype', 'link-187');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L790"></a><tt class="py-lineno"> 790</tt>  <tt class="py-line">          <tt id="link-198" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-198', 'body', 'link-125');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.getbytes()=googleapiclient.http.MediaIoBaseUpload-class.html#getbytes,Method googleapiclient.http.MediaUpload.getbytes()=googleapiclient.http.MediaUpload-class.html#getbytes"><a title="googleapiclient.http.MediaIoBaseUpload.getbytes
+googleapiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-199', 'getbytes', 'link-199');">getbytes</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-200" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-200', 'size', 'link-189');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L791"></a><tt class="py-lineno"> 791</tt>  <tt class="py-line">          <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">_add_query_parameter</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'media'</tt><tt class="py-op">)</tt> </tt>
+<a name="L792"></a><tt class="py-lineno"> 792</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L793"></a><tt class="py-lineno"> 793</tt>  <tt class="py-line">          <tt class="py-comment"># This is a multipart/related upload.</tt> </tt>
+<a name="L794"></a><tt class="py-lineno"> 794</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMEMultipart</tt><tt class="py-op">(</tt><tt class="py-string">'related'</tt><tt class="py-op">)</tt> </tt>
+<a name="L795"></a><tt class="py-lineno"> 795</tt>  <tt class="py-line">          <tt class="py-comment"># msgRoot should not write out it's own headers</tt> </tt>
+<a name="L796"></a><tt class="py-lineno"> 796</tt>  <tt class="py-line">          <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">msgRoot</tt><tt class="py-op">,</tt> <tt class="py-string">'_write_headers'</tt><tt class="py-op">,</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
 <a name="L797"></a><tt class="py-lineno"> 797</tt>  <tt class="py-line"> </tt>
-<a name="L798"></a><tt class="py-lineno"> 798</tt>  <tt class="py-line">          <tt class="py-comment"># attach the media as the second part</tt> </tt>
-<a name="L799"></a><tt class="py-lineno"> 799</tt>  <tt class="py-line">          <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-198" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-198', 'mimetype', 'link-183');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L800"></a><tt class="py-lineno"> 800</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Content-Transfer-Encoding'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'binary'</tt> </tt>
-<a name="L801"></a><tt class="py-lineno"> 801</tt>  <tt class="py-line"> </tt>
-<a name="L802"></a><tt class="py-lineno"> 802</tt>  <tt class="py-line">          <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.getbytes
-googleapiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-199', 'getbytes', 'link-195');">getbytes</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-200" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-200', 'size', 'link-185');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L803"></a><tt class="py-lineno"> 803</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
-<a name="L804"></a><tt class="py-lineno"> 804</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
-<a name="L805"></a><tt class="py-lineno"> 805</tt>  <tt class="py-line">          <tt class="py-comment"># encode the body: note that we can't use `as_string`, because</tt> </tt>
-<a name="L806"></a><tt class="py-lineno"> 806</tt>  <tt class="py-line">          <tt class="py-comment"># it plays games with `From ` lines.</tt> </tt>
-<a name="L807"></a><tt class="py-lineno"> 807</tt>  <tt class="py-line">          <tt class="py-name">fp</tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L808"></a><tt class="py-lineno"> 808</tt>  <tt class="py-line">          <tt class="py-name">g</tt> <tt class="py-op">=</tt> <tt id="link-201" class="py-name" targets="Class googleapiclient.discovery._BytesGenerator=googleapiclient.discovery._BytesGenerator-class.html"><a title="googleapiclient.discovery._BytesGenerator" class="py-name" href="#" onclick="return doclink('link-201', '_BytesGenerator', 'link-201');">_BytesGenerator</a></tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">,</tt> <tt class="py-name">mangle_from_</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
-<a name="L809"></a><tt class="py-lineno"> 809</tt>  <tt class="py-line">          <tt class="py-name">g</tt><tt class="py-op">.</tt><tt class="py-name">flatten</tt><tt class="py-op">(</tt><tt class="py-name">msgRoot</tt><tt class="py-op">,</tt> <tt class="py-name">unixfrom</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
-<a name="L810"></a><tt class="py-lineno"> 810</tt>  <tt class="py-line">          <tt id="link-202" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-202', 'body', 'link-121');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">fp</tt><tt class="py-op">.</tt><tt class="py-name">getvalue</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L811"></a><tt class="py-lineno"> 811</tt>  <tt class="py-line"> </tt>
-<a name="L812"></a><tt class="py-lineno"> 812</tt>  <tt class="py-line">          <tt class="py-name">multipart_boundary</tt> <tt class="py-op">=</tt> <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">get_boundary</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L813"></a><tt class="py-lineno"> 813</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'multipart/related; '</tt> </tt>
-<a name="L814"></a><tt class="py-lineno"> 814</tt>  <tt class="py-line">                                     <tt class="py-string">'boundary="%s"'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">multipart_boundary</tt> </tt>
-<a name="L815"></a><tt class="py-lineno"> 815</tt>  <tt class="py-line">          <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">_add_query_parameter</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'multipart'</tt><tt class="py-op">)</tt> </tt>
+<a name="L798"></a><tt class="py-lineno"> 798</tt>  <tt class="py-line">          <tt class="py-comment"># attach the body as one part</tt> </tt>
+<a name="L799"></a><tt class="py-lineno"> 799</tt>  <tt class="py-line">          <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L800"></a><tt class="py-lineno"> 800</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt id="link-201" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-201', 'body', 'link-125');">body</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L801"></a><tt class="py-lineno"> 801</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L802"></a><tt class="py-lineno"> 802</tt>  <tt class="py-line"> </tt>
+<a name="L803"></a><tt class="py-lineno"> 803</tt>  <tt class="py-line">          <tt class="py-comment"># attach the media as the second part</tt> </tt>
+<a name="L804"></a><tt class="py-lineno"> 804</tt>  <tt class="py-line">          <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-202" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-202', 'mimetype', 'link-187');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L805"></a><tt class="py-lineno"> 805</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Content-Transfer-Encoding'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'binary'</tt> </tt>
+<a name="L806"></a><tt class="py-lineno"> 806</tt>  <tt class="py-line"> </tt>
+<a name="L807"></a><tt class="py-lineno"> 807</tt>  <tt class="py-line">          <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-203" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.getbytes
+googleapiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-203', 'getbytes', 'link-199');">getbytes</a></tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">media_upload</tt><tt class="py-op">.</tt><tt id="link-204" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-204', 'size', 'link-189');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L808"></a><tt class="py-lineno"> 808</tt>  <tt class="py-line">          <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
+<a name="L809"></a><tt class="py-lineno"> 809</tt>  <tt class="py-line">          <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L810"></a><tt class="py-lineno"> 810</tt>  <tt class="py-line">          <tt class="py-comment"># encode the body: note that we can't use `as_string`, because</tt> </tt>
+<a name="L811"></a><tt class="py-lineno"> 811</tt>  <tt class="py-line">          <tt class="py-comment"># it plays games with `From ` lines.</tt> </tt>
+<a name="L812"></a><tt class="py-lineno"> 812</tt>  <tt class="py-line">          <tt class="py-name">fp</tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L813"></a><tt class="py-lineno"> 813</tt>  <tt class="py-line">          <tt class="py-name">g</tt> <tt class="py-op">=</tt> <tt id="link-205" class="py-name" targets="Class googleapiclient.discovery._BytesGenerator=googleapiclient.discovery._BytesGenerator-class.html"><a title="googleapiclient.discovery._BytesGenerator" class="py-name" href="#" onclick="return doclink('link-205', '_BytesGenerator', 'link-205');">_BytesGenerator</a></tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">,</tt> <tt class="py-name">mangle_from_</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L814"></a><tt class="py-lineno"> 814</tt>  <tt class="py-line">          <tt class="py-name">g</tt><tt class="py-op">.</tt><tt class="py-name">flatten</tt><tt class="py-op">(</tt><tt class="py-name">msgRoot</tt><tt class="py-op">,</tt> <tt class="py-name">unixfrom</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L815"></a><tt class="py-lineno"> 815</tt>  <tt class="py-line">          <tt id="link-206" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-206', 'body', 'link-125');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">fp</tt><tt class="py-op">.</tt><tt class="py-name">getvalue</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
 <a name="L816"></a><tt class="py-lineno"> 816</tt>  <tt class="py-line"> </tt>
-<a name="L817"></a><tt class="py-lineno"> 817</tt>  <tt class="py-line">    <tt id="link-203" class="py-name"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-203', 'logger', 'link-44');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">httpMethod</tt><tt class="py-op">,</tt><tt class="py-name">url</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L818"></a><tt class="py-lineno"> 818</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt><tt class="py-op">,</tt> </tt>
-<a name="L819"></a><tt class="py-lineno"> 819</tt>  <tt class="py-line">                                <tt id="link-204" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-204', 'model', 'link-33');">model</a></tt><tt class="py-op">.</tt><tt id="link-205" class="py-name" targets="Method googleapiclient.model.BaseModel.response()=googleapiclient.model.BaseModel-class.html#response,Method googleapiclient.model.Model.response()=googleapiclient.model.Model-class.html#response"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-205', 'response', 'link-205');">response</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L820"></a><tt class="py-lineno"> 820</tt>  <tt class="py-line">                                <tt class="py-name">url</tt><tt class="py-op">,</tt> </tt>
-<a name="L821"></a><tt class="py-lineno"> 821</tt>  <tt class="py-line">                                <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">httpMethod</tt><tt class="py-op">,</tt> </tt>
-<a name="L822"></a><tt class="py-lineno"> 822</tt>  <tt class="py-line">                                <tt id="link-206" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-206', 'body', 'link-121');">body</a></tt><tt class="py-op">=</tt><tt id="link-207" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-207', 'body', 'link-121');">body</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L823"></a><tt class="py-lineno"> 823</tt>  <tt class="py-line">                                <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
-<a name="L824"></a><tt class="py-lineno"> 824</tt>  <tt class="py-line">                                <tt class="py-name">methodId</tt><tt class="py-op">=</tt><tt class="py-name">methodId</tt><tt class="py-op">,</tt> </tt>
-<a name="L825"></a><tt class="py-lineno"> 825</tt>  <tt class="py-line">                                <tt id="link-208" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-208', 'resumable', 'link-176');">resumable</a></tt><tt class="py-op">=</tt><tt id="link-209" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-209', 'resumable', 'link-176');">resumable</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L826"></a><tt class="py-lineno"> 826</tt>  <tt class="py-line"> </tt>
-<a name="L827"></a><tt class="py-lineno"> 827</tt>  <tt class="py-line">  <tt class="py-name">docs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-210" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+<a name="L817"></a><tt class="py-lineno"> 817</tt>  <tt class="py-line">          <tt class="py-name">multipart_boundary</tt> <tt class="py-op">=</tt> <tt class="py-name">msgRoot</tt><tt class="py-op">.</tt><tt class="py-name">get_boundary</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L818"></a><tt class="py-lineno"> 818</tt>  <tt class="py-line">          <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'multipart/related; '</tt> </tt>
+<a name="L819"></a><tt class="py-lineno"> 819</tt>  <tt class="py-line">                                     <tt class="py-string">'boundary="%s"'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">multipart_boundary</tt> </tt>
+<a name="L820"></a><tt class="py-lineno"> 820</tt>  <tt class="py-line">          <tt class="py-name">url</tt> <tt class="py-op">=</tt> <tt class="py-name">_add_query_parameter</tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-string">'uploadType'</tt><tt class="py-op">,</tt> <tt class="py-string">'multipart'</tt><tt class="py-op">)</tt> </tt>
+<a name="L821"></a><tt class="py-lineno"> 821</tt>  <tt class="py-line"> </tt>
+<a name="L822"></a><tt class="py-lineno"> 822</tt>  <tt class="py-line">    <tt id="link-207" class="py-name"><a title="googleapiclient.discovery.logger" class="py-name" href="#" onclick="return doclink('link-207', 'logger', 'link-44');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">httpMethod</tt><tt class="py-op">,</tt><tt class="py-name">url</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L823"></a><tt class="py-lineno"> 823</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt><tt class="py-op">,</tt> </tt>
+<a name="L824"></a><tt class="py-lineno"> 824</tt>  <tt class="py-line">                                <tt id="link-208" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-208', 'model', 'link-33');">model</a></tt><tt class="py-op">.</tt><tt id="link-209" class="py-name" targets="Method googleapiclient.model.BaseModel.response()=googleapiclient.model.BaseModel-class.html#response,Method googleapiclient.model.Model.response()=googleapiclient.model.Model-class.html#response"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-209', 'response', 'link-209');">response</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L825"></a><tt class="py-lineno"> 825</tt>  <tt class="py-line">                                <tt class="py-name">url</tt><tt class="py-op">,</tt> </tt>
+<a name="L826"></a><tt class="py-lineno"> 826</tt>  <tt class="py-line">                                <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">httpMethod</tt><tt class="py-op">,</tt> </tt>
+<a name="L827"></a><tt class="py-lineno"> 827</tt>  <tt class="py-line">                                <tt id="link-210" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-210', 'body', 'link-125');">body</a></tt><tt class="py-op">=</tt><tt id="link-211" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-211', 'body', 'link-125');">body</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L828"></a><tt class="py-lineno"> 828</tt>  <tt class="py-line">                                <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
+<a name="L829"></a><tt class="py-lineno"> 829</tt>  <tt class="py-line">                                <tt class="py-name">methodId</tt><tt class="py-op">=</tt><tt class="py-name">methodId</tt><tt class="py-op">,</tt> </tt>
+<a name="L830"></a><tt class="py-lineno"> 830</tt>  <tt class="py-line">                                <tt id="link-212" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-212', 'resumable', 'link-180');">resumable</a></tt><tt class="py-op">=</tt><tt id="link-213" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-213', 'resumable', 'link-180');">resumable</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L831"></a><tt class="py-lineno"> 831</tt>  <tt class="py-line"> </tt>
+<a name="L832"></a><tt class="py-lineno"> 832</tt>  <tt class="py-line">  <tt class="py-name">docs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-214" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-210', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'description'</tt><tt class="py-op">,</tt> <tt id="link-211" class="py-name"><a title="googleapiclient.discovery.DEFAULT_METHOD_DOC" class="py-name" href="#" onclick="return doclink('link-211', 'DEFAULT_METHOD_DOC', 'link-48');">DEFAULT_METHOD_DOC</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'\n\n'</tt><tt class="py-op">]</tt> </tt>
-<a name="L828"></a><tt class="py-lineno"> 828</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L829"></a><tt class="py-lineno"> 829</tt>  <tt class="py-line">    <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'Args:\n'</tt><tt class="py-op">)</tt> </tt>
-<a name="L830"></a><tt class="py-lineno"> 830</tt>  <tt class="py-line"> </tt>
-<a name="L831"></a><tt class="py-lineno"> 831</tt>  <tt class="py-line">  <tt class="py-comment"># Skip undocumented params and params common to all methods.</tt> </tt>
-<a name="L832"></a><tt class="py-lineno"> 832</tt>  <tt class="py-line">  <tt class="py-name">skip_parameters</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">rootDesc</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-214', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'description'</tt><tt class="py-op">,</tt> <tt id="link-215" class="py-name"><a title="googleapiclient.discovery.DEFAULT_METHOD_DOC" class="py-name" href="#" onclick="return doclink('link-215', 'DEFAULT_METHOD_DOC', 'link-51');">DEFAULT_METHOD_DOC</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'\n\n'</tt><tt class="py-op">]</tt> </tt>
+<a name="L833"></a><tt class="py-lineno"> 833</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L834"></a><tt class="py-lineno"> 834</tt>  <tt class="py-line">    <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'Args:\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L835"></a><tt class="py-lineno"> 835</tt>  <tt class="py-line"> </tt>
+<a name="L836"></a><tt class="py-lineno"> 836</tt>  <tt class="py-line">  <tt class="py-comment"># Skip undocumented params and params common to all methods.</tt> </tt>
+<a name="L837"></a><tt class="py-lineno"> 837</tt>  <tt class="py-line">  <tt class="py-name">skip_parameters</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">rootDesc</tt><tt class="py-op">.</tt><tt id="link-216" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-212', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L833"></a><tt class="py-lineno"> 833</tt>  <tt class="py-line">  <tt class="py-name">skip_parameters</tt><tt class="py-op">.</tt><tt class="py-name">extend</tt><tt class="py-op">(</tt><tt id="link-213" class="py-name"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-213', 'STACK_QUERY_PARAMETERS', 'link-53');">STACK_QUERY_PARAMETERS</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L834"></a><tt class="py-lineno"> 834</tt>  <tt class="py-line"> </tt>
-<a name="L835"></a><tt class="py-lineno"> 835</tt>  <tt class="py-line">  <tt class="py-name">all_args</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L836"></a><tt class="py-lineno"> 836</tt>  <tt class="py-line">  <tt class="py-name">args_ordered</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-214" class="py-name"><a title="googleapiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-214', 'key2param', 'link-145');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-216', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L838"></a><tt class="py-lineno"> 838</tt>  <tt class="py-line">  <tt class="py-name">skip_parameters</tt><tt class="py-op">.</tt><tt class="py-name">extend</tt><tt class="py-op">(</tt><tt id="link-217" class="py-name"><a title="googleapiclient.discovery.STACK_QUERY_PARAMETERS" class="py-name" href="#" onclick="return doclink('link-217', 'STACK_QUERY_PARAMETERS', 'link-56');">STACK_QUERY_PARAMETERS</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L839"></a><tt class="py-lineno"> 839</tt>  <tt class="py-line"> </tt>
+<a name="L840"></a><tt class="py-lineno"> 840</tt>  <tt class="py-line">  <tt class="py-name">all_args</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">.</tt><tt class="py-name">keys</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L841"></a><tt class="py-lineno"> 841</tt>  <tt class="py-line">  <tt class="py-name">args_ordered</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt id="link-218" class="py-name"><a title="googleapiclient.discovery.key2param" class="py-name" href="#" onclick="return doclink('link-218', 'key2param', 'link-149');">key2param</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">s</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-219" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-215', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameterOrder'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
-<a name="L837"></a><tt class="py-lineno"> 837</tt>  <tt class="py-line"> </tt>
-<a name="L838"></a><tt class="py-lineno"> 838</tt>  <tt class="py-line">  <tt class="py-comment"># Move body to the front of the line.</tt> </tt>
-<a name="L839"></a><tt class="py-lineno"> 839</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'body'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">all_args</tt><tt class="py-op">:</tt> </tt>
-<a name="L840"></a><tt class="py-lineno"> 840</tt>  <tt class="py-line">    <tt class="py-name">args_ordered</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">)</tt> </tt>
-<a name="L841"></a><tt class="py-lineno"> 841</tt>  <tt class="py-line"> </tt>
-<a name="L842"></a><tt class="py-lineno"> 842</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">all_args</tt><tt class="py-op">:</tt> </tt>
-<a name="L843"></a><tt class="py-lineno"> 843</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">args_ordered</tt><tt class="py-op">:</tt> </tt>
-<a name="L844"></a><tt class="py-lineno"> 844</tt>  <tt class="py-line">      <tt class="py-name">args_ordered</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
-<a name="L845"></a><tt class="py-lineno"> 845</tt>  <tt class="py-line"> </tt>
-<a name="L846"></a><tt class="py-lineno"> 846</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">args_ordered</tt><tt class="py-op">:</tt> </tt>
-<a name="L847"></a><tt class="py-lineno"> 847</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">skip_parameters</tt><tt class="py-op">:</tt> </tt>
-<a name="L848"></a><tt class="py-lineno"> 848</tt>  <tt class="py-line">      <tt class="py-keyword">continue</tt> </tt>
-<a name="L849"></a><tt class="py-lineno"> 849</tt>  <tt class="py-line"> </tt>
-<a name="L850"></a><tt class="py-lineno"> 850</tt>  <tt class="py-line">    <tt class="py-name">repeated</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L851"></a><tt class="py-lineno"> 851</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt><tt class="py-op">:</tt> </tt>
-<a name="L852"></a><tt class="py-lineno"> 852</tt>  <tt class="py-line">      <tt class="py-name">repeated</tt> <tt class="py-op">=</tt> <tt class="py-string">' (repeated)'</tt> </tt>
-<a name="L853"></a><tt class="py-lineno"> 853</tt>  <tt class="py-line">    <tt class="py-name">required</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L854"></a><tt class="py-lineno"> 854</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt><tt class="py-op">:</tt> </tt>
-<a name="L855"></a><tt class="py-lineno"> 855</tt>  <tt class="py-line">      <tt class="py-name">required</tt> <tt class="py-op">=</tt> <tt class="py-string">' (required)'</tt> </tt>
-<a name="L856"></a><tt class="py-lineno"> 856</tt>  <tt class="py-line">    <tt class="py-name">paramdesc</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">arg</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L857"></a><tt class="py-lineno"> 857</tt>  <tt class="py-line">    <tt class="py-name">paramdoc</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-216" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-219', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameterOrder'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+<a name="L842"></a><tt class="py-lineno"> 842</tt>  <tt class="py-line"> </tt>
+<a name="L843"></a><tt class="py-lineno"> 843</tt>  <tt class="py-line">  <tt class="py-comment"># Move body to the front of the line.</tt> </tt>
+<a name="L844"></a><tt class="py-lineno"> 844</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'body'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">all_args</tt><tt class="py-op">:</tt> </tt>
+<a name="L845"></a><tt class="py-lineno"> 845</tt>  <tt class="py-line">    <tt class="py-name">args_ordered</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">)</tt> </tt>
+<a name="L846"></a><tt class="py-lineno"> 846</tt>  <tt class="py-line"> </tt>
+<a name="L847"></a><tt class="py-lineno"> 847</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">name</tt> <tt class="py-keyword">in</tt> <tt class="py-name">all_args</tt><tt class="py-op">:</tt> </tt>
+<a name="L848"></a><tt class="py-lineno"> 848</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">name</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">args_ordered</tt><tt class="py-op">:</tt> </tt>
+<a name="L849"></a><tt class="py-lineno"> 849</tt>  <tt class="py-line">      <tt class="py-name">args_ordered</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">)</tt> </tt>
+<a name="L850"></a><tt class="py-lineno"> 850</tt>  <tt class="py-line"> </tt>
+<a name="L851"></a><tt class="py-lineno"> 851</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">args_ordered</tt><tt class="py-op">:</tt> </tt>
+<a name="L852"></a><tt class="py-lineno"> 852</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">skip_parameters</tt><tt class="py-op">:</tt> </tt>
+<a name="L853"></a><tt class="py-lineno"> 853</tt>  <tt class="py-line">      <tt class="py-keyword">continue</tt> </tt>
+<a name="L854"></a><tt class="py-lineno"> 854</tt>  <tt class="py-line"> </tt>
+<a name="L855"></a><tt class="py-lineno"> 855</tt>  <tt class="py-line">    <tt class="py-name">repeated</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L856"></a><tt class="py-lineno"> 856</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">repeated_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L857"></a><tt class="py-lineno"> 857</tt>  <tt class="py-line">      <tt class="py-name">repeated</tt> <tt class="py-op">=</tt> <tt class="py-string">' (repeated)'</tt> </tt>
+<a name="L858"></a><tt class="py-lineno"> 858</tt>  <tt class="py-line">    <tt class="py-name">required</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L859"></a><tt class="py-lineno"> 859</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">arg</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">required_params</tt><tt class="py-op">:</tt> </tt>
+<a name="L860"></a><tt class="py-lineno"> 860</tt>  <tt class="py-line">      <tt class="py-name">required</tt> <tt class="py-op">=</tt> <tt class="py-string">' (required)'</tt> </tt>
+<a name="L861"></a><tt class="py-lineno"> 861</tt>  <tt class="py-line">    <tt class="py-name">paramdesc</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'parameters'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-name">parameters</tt><tt class="py-op">.</tt><tt class="py-name">argmap</tt><tt class="py-op">[</tt><tt class="py-name">arg</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
+<a name="L862"></a><tt class="py-lineno"> 862</tt>  <tt class="py-line">    <tt class="py-name">paramdoc</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-220" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-216', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'description'</tt><tt class="py-op">,</tt> <tt class="py-string">'A parameter'</tt><tt class="py-op">)</tt> </tt>
-<a name="L858"></a><tt class="py-lineno"> 858</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'$ref'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L859"></a><tt class="py-lineno"> 859</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
-<a name="L860"></a><tt class="py-lineno"> 860</tt>  <tt class="py-line">          <tt class="py-op">(</tt><tt class="py-string">'  %s: object, %s%s%s\n    The object takes the'</tt> </tt>
-<a name="L861"></a><tt class="py-lineno"> 861</tt>  <tt class="py-line">          <tt class="py-string">' form of:\n\n%s\n\n'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">paramdoc</tt><tt class="py-op">,</tt> <tt class="py-name">required</tt><tt class="py-op">,</tt> <tt class="py-name">repeated</tt><tt class="py-op">,</tt> </tt>
-<a name="L862"></a><tt class="py-lineno"> 862</tt>  <tt class="py-line">            <tt id="link-217" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-217', 'schema', 'link-42');">schema</a></tt><tt class="py-op">.</tt><tt id="link-218" class="py-name" targets="Method googleapiclient.schema.Schemas.prettyPrintByName()=googleapiclient.schema.Schemas-class.html#prettyPrintByName"><a title="googleapiclient.schema.Schemas.prettyPrintByName" class="py-name" href="#" onclick="return doclink('link-218', 'prettyPrintByName', 'link-218');">prettyPrintByName</a></tt><tt class="py-op">(</tt><tt class="py-name">paramdesc</tt><tt class="py-op">[</tt><tt class="py-string">'$ref'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L863"></a><tt class="py-lineno"> 863</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L864"></a><tt class="py-lineno"> 864</tt>  <tt class="py-line">      <tt class="py-name">paramtype</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-219" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-220', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'description'</tt><tt class="py-op">,</tt> <tt class="py-string">'A parameter'</tt><tt class="py-op">)</tt> </tt>
+<a name="L863"></a><tt class="py-lineno"> 863</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'$ref'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L864"></a><tt class="py-lineno"> 864</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
+<a name="L865"></a><tt class="py-lineno"> 865</tt>  <tt class="py-line">          <tt class="py-op">(</tt><tt class="py-string">'  %s: object, %s%s%s\n    The object takes the'</tt> </tt>
+<a name="L866"></a><tt class="py-lineno"> 866</tt>  <tt class="py-line">          <tt class="py-string">' form of:\n\n%s\n\n'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">paramdoc</tt><tt class="py-op">,</tt> <tt class="py-name">required</tt><tt class="py-op">,</tt> <tt class="py-name">repeated</tt><tt class="py-op">,</tt> </tt>
+<a name="L867"></a><tt class="py-lineno"> 867</tt>  <tt class="py-line">            <tt id="link-221" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-221', 'schema', 'link-42');">schema</a></tt><tt class="py-op">.</tt><tt id="link-222" class="py-name" targets="Method googleapiclient.schema.Schemas.prettyPrintByName()=googleapiclient.schema.Schemas-class.html#prettyPrintByName"><a title="googleapiclient.schema.Schemas.prettyPrintByName" class="py-name" href="#" onclick="return doclink('link-222', 'prettyPrintByName', 'link-222');">prettyPrintByName</a></tt><tt class="py-op">(</tt><tt class="py-name">paramdesc</tt><tt class="py-op">[</tt><tt class="py-string">'$ref'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L868"></a><tt class="py-lineno"> 868</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L869"></a><tt class="py-lineno"> 869</tt>  <tt class="py-line">      <tt class="py-name">paramtype</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-223" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-219', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
-<a name="L865"></a><tt class="py-lineno"> 865</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'  %s: %s, %s%s%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">paramtype</tt><tt class="py-op">,</tt> <tt class="py-name">paramdoc</tt><tt class="py-op">,</tt> <tt class="py-name">required</tt><tt class="py-op">,</tt> </tt>
-<a name="L866"></a><tt class="py-lineno"> 866</tt>  <tt class="py-line">                                          <tt class="py-name">repeated</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L867"></a><tt class="py-lineno"> 867</tt>  <tt class="py-line">    <tt class="py-name">enum</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-220" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-223', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'type'</tt><tt class="py-op">,</tt> <tt class="py-string">'string'</tt><tt class="py-op">)</tt> </tt>
+<a name="L870"></a><tt class="py-lineno"> 870</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'  %s: %s, %s%s%s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">arg</tt><tt class="py-op">,</tt> <tt class="py-name">paramtype</tt><tt class="py-op">,</tt> <tt class="py-name">paramdoc</tt><tt class="py-op">,</tt> <tt class="py-name">required</tt><tt class="py-op">,</tt> </tt>
+<a name="L871"></a><tt class="py-lineno"> 871</tt>  <tt class="py-line">                                          <tt class="py-name">repeated</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L872"></a><tt class="py-lineno"> 872</tt>  <tt class="py-line">    <tt class="py-name">enum</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-224" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-220', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enum'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L868"></a><tt class="py-lineno"> 868</tt>  <tt class="py-line">    <tt class="py-name">enumDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-221" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-224', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enum'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L873"></a><tt class="py-lineno"> 873</tt>  <tt class="py-line">    <tt class="py-name">enumDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">paramdesc</tt><tt class="py-op">.</tt><tt id="link-225" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-221', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enumDescriptions'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L869"></a><tt class="py-lineno"> 869</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">enum</tt> <tt class="py-keyword">and</tt> <tt class="py-name">enumDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L870"></a><tt class="py-lineno"> 870</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'    Allowed values\n'</tt><tt class="py-op">)</tt> </tt>
-<a name="L871"></a><tt class="py-lineno"> 871</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">zip</tt><tt class="py-op">(</tt><tt class="py-name">enum</tt><tt class="py-op">,</tt> <tt class="py-name">enumDesc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L872"></a><tt class="py-lineno"> 872</tt>  <tt class="py-line">        <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'      %s - %s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L873"></a><tt class="py-lineno"> 873</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L874"></a><tt class="py-lineno"> 874</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodName</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'_media'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L875"></a><tt class="py-lineno"> 875</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\nReturns:\n  The media object as a string.\n\n    '</tt><tt class="py-op">)</tt> </tt>
-<a name="L876"></a><tt class="py-lineno"> 876</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L877"></a><tt class="py-lineno"> 877</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\nReturns:\n  An object of the form:\n\n    '</tt><tt class="py-op">)</tt> </tt>
-<a name="L878"></a><tt class="py-lineno"> 878</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-222" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-222', 'schema', 'link-42');">schema</a></tt><tt class="py-op">.</tt><tt id="link-223" class="py-name" targets="Method googleapiclient.schema.Schemas.prettyPrintSchema()=googleapiclient.schema.Schemas-class.html#prettyPrintSchema"><a title="googleapiclient.schema.Schemas.prettyPrintSchema" class="py-name" href="#" onclick="return doclink('link-223', 'prettyPrintSchema', 'link-223');">prettyPrintSchema</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'response'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L879"></a><tt class="py-lineno"> 879</tt>  <tt class="py-line"> </tt>
-<a name="L880"></a><tt class="py-lineno"> 880</tt>  <tt class="py-line">  <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-string">'__doc__'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">docs</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L881"></a><tt class="py-lineno"> 881</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L882"></a><tt class="py-lineno"> 882</tt>  <tt class="py-line"> </tt>
-<a name="createNextMethod"></a><div id="createNextMethod-def"><a name="L883"></a><tt class="py-lineno"> 883</tt>  <tt class="py-line"> </tt>
-<a name="L884"></a><tt class="py-lineno"> 884</tt> <a class="py-toggle" href="#" id="createNextMethod-toggle" onclick="return toggle('createNextMethod');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#createNextMethod">createNextMethod</a><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="createNextMethod-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="createNextMethod-expanded"><a name="L885"></a><tt class="py-lineno"> 885</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates any _next methods for attaching to a Resource.</tt> </tt>
-<a name="L886"></a><tt class="py-lineno"> 886</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L887"></a><tt class="py-lineno"> 887</tt>  <tt class="py-line"><tt class="py-docstring">  The _next methods allow for easy iteration through list() responses.</tt> </tt>
-<a name="L888"></a><tt class="py-lineno"> 888</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L889"></a><tt class="py-lineno"> 889</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L890"></a><tt class="py-lineno"> 890</tt>  <tt class="py-line"><tt class="py-docstring">    methodName: string, name of the method to use.</tt> </tt>
-<a name="L891"></a><tt class="py-lineno"> 891</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L892"></a><tt class="py-lineno"> 892</tt>  <tt class="py-line">  <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-224" class="py-name"><a title="googleapiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-224', 'fix_method_name', 'link-158');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
-<a name="L893"></a><tt class="py-lineno"> 893</tt>  <tt class="py-line"> </tt>
-<a name="L894"></a><tt class="py-lineno"> 894</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">methodNext</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">previous_request</tt><tt class="py-op">,</tt> <tt class="py-param">previous_response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L895"></a><tt class="py-lineno"> 895</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieves the next page of results.</tt> </tt>
-<a name="L896"></a><tt class="py-lineno"> 896</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L897"></a><tt class="py-lineno"> 897</tt>  <tt class="py-line"><tt class="py-docstring">Args:</tt> </tt>
-<a name="L898"></a><tt class="py-lineno"> 898</tt>  <tt class="py-line"><tt class="py-docstring">  previous_request: The request for the previous page. (required)</tt> </tt>
-<a name="L899"></a><tt class="py-lineno"> 899</tt>  <tt class="py-line"><tt class="py-docstring">  previous_response: The response from the request for the previous page. (required)</tt> </tt>
-<a name="L900"></a><tt class="py-lineno"> 900</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L901"></a><tt class="py-lineno"> 901</tt>  <tt class="py-line"><tt class="py-docstring">Returns:</tt> </tt>
-<a name="L902"></a><tt class="py-lineno"> 902</tt>  <tt class="py-line"><tt class="py-docstring">  A request object that you can call 'execute()' on to request the next</tt> </tt>
-<a name="L903"></a><tt class="py-lineno"> 903</tt>  <tt class="py-line"><tt class="py-docstring">  page. Returns None if there are no more items in the collection.</tt> </tt>
-<a name="L904"></a><tt class="py-lineno"> 904</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L905"></a><tt class="py-lineno"> 905</tt>  <tt class="py-line">    <tt class="py-comment"># Retrieve nextPageToken from previous_response</tt> </tt>
-<a name="L906"></a><tt class="py-lineno"> 906</tt>  <tt class="py-line">    <tt class="py-comment"># Use as pageToken in previous_request to create new request.</tt> </tt>
-<a name="L907"></a><tt class="py-lineno"> 907</tt>  <tt class="py-line"> </tt>
-<a name="L908"></a><tt class="py-lineno"> 908</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'nextPageToken'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">previous_response</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">previous_response</tt><tt class="py-op">[</tt><tt class="py-string">'nextPageToken'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L909"></a><tt class="py-lineno"> 909</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L910"></a><tt class="py-lineno"> 910</tt>  <tt class="py-line"> </tt>
-<a name="L911"></a><tt class="py-lineno"> 911</tt>  <tt class="py-line">    <tt id="link-225" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-225', 'request', 'link-85');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">previous_request</tt><tt class="py-op">)</tt> </tt>
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-225', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'enumDescriptions'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L874"></a><tt class="py-lineno"> 874</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">enum</tt> <tt class="py-keyword">and</tt> <tt class="py-name">enumDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L875"></a><tt class="py-lineno"> 875</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'    Allowed values\n'</tt><tt class="py-op">)</tt> </tt>
+<a name="L876"></a><tt class="py-lineno"> 876</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">zip</tt><tt class="py-op">(</tt><tt class="py-name">enum</tt><tt class="py-op">,</tt> <tt class="py-name">enumDesc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L877"></a><tt class="py-lineno"> 877</tt>  <tt class="py-line">        <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'      %s - %s\n'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">name</tt><tt class="py-op">,</tt> <tt class="py-name">desc</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L878"></a><tt class="py-lineno"> 878</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L879"></a><tt class="py-lineno"> 879</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodName</tt><tt class="py-op">.</tt><tt class="py-name">endswith</tt><tt class="py-op">(</tt><tt class="py-string">'_media'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L880"></a><tt class="py-lineno"> 880</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\nReturns:\n  The media object as a string.\n\n    '</tt><tt class="py-op">)</tt> </tt>
+<a name="L881"></a><tt class="py-lineno"> 881</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L882"></a><tt class="py-lineno"> 882</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'\nReturns:\n  An object of the form:\n\n    '</tt><tt class="py-op">)</tt> </tt>
+<a name="L883"></a><tt class="py-lineno"> 883</tt>  <tt class="py-line">      <tt class="py-name">docs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-226" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-226', 'schema', 'link-42');">schema</a></tt><tt class="py-op">.</tt><tt id="link-227" class="py-name" targets="Method googleapiclient.schema.Schemas.prettyPrintSchema()=googleapiclient.schema.Schemas-class.html#prettyPrintSchema"><a title="googleapiclient.schema.Schemas.prettyPrintSchema" class="py-name" href="#" onclick="return doclink('link-227', 'prettyPrintSchema', 'link-227');">prettyPrintSchema</a></tt><tt class="py-op">(</tt><tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'response'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L884"></a><tt class="py-lineno"> 884</tt>  <tt class="py-line"> </tt>
+<a name="L885"></a><tt class="py-lineno"> 885</tt>  <tt class="py-line">  <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-string">'__doc__'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">docs</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L886"></a><tt class="py-lineno"> 886</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L887"></a><tt class="py-lineno"> 887</tt>  <tt class="py-line"> </tt>
+<a name="createNextMethod"></a><div id="createNextMethod-def"><a name="L888"></a><tt class="py-lineno"> 888</tt>  <tt class="py-line"> </tt>
+<a name="L889"></a><tt class="py-lineno"> 889</tt> <a class="py-toggle" href="#" id="createNextMethod-toggle" onclick="return toggle('createNextMethod');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery-module.html#createNextMethod">createNextMethod</a><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="createNextMethod-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="createNextMethod-expanded"><a name="L890"></a><tt class="py-lineno"> 890</tt>  <tt class="py-line">  <tt class="py-docstring">"""Creates any _next methods for attaching to a Resource.</tt> </tt>
+<a name="L891"></a><tt class="py-lineno"> 891</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L892"></a><tt class="py-lineno"> 892</tt>  <tt class="py-line"><tt class="py-docstring">  The _next methods allow for easy iteration through list() responses.</tt> </tt>
+<a name="L893"></a><tt class="py-lineno"> 893</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L894"></a><tt class="py-lineno"> 894</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L895"></a><tt class="py-lineno"> 895</tt>  <tt class="py-line"><tt class="py-docstring">    methodName: string, name of the method to use.</tt> </tt>
+<a name="L896"></a><tt class="py-lineno"> 896</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L897"></a><tt class="py-lineno"> 897</tt>  <tt class="py-line">  <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-228" class="py-name"><a title="googleapiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-228', 'fix_method_name', 'link-162');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
+<a name="L898"></a><tt class="py-lineno"> 898</tt>  <tt class="py-line"> </tt>
+<a name="L899"></a><tt class="py-lineno"> 899</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">methodNext</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">previous_request</tt><tt class="py-op">,</tt> <tt class="py-param">previous_response</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L900"></a><tt class="py-lineno"> 900</tt>  <tt class="py-line">    <tt class="py-docstring">"""Retrieves the next page of results.</tt> </tt>
+<a name="L901"></a><tt class="py-lineno"> 901</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L902"></a><tt class="py-lineno"> 902</tt>  <tt class="py-line"><tt class="py-docstring">Args:</tt> </tt>
+<a name="L903"></a><tt class="py-lineno"> 903</tt>  <tt class="py-line"><tt class="py-docstring">  previous_request: The request for the previous page. (required)</tt> </tt>
+<a name="L904"></a><tt class="py-lineno"> 904</tt>  <tt class="py-line"><tt class="py-docstring">  previous_response: The response from the request for the previous page. (required)</tt> </tt>
+<a name="L905"></a><tt class="py-lineno"> 905</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L906"></a><tt class="py-lineno"> 906</tt>  <tt class="py-line"><tt class="py-docstring">Returns:</tt> </tt>
+<a name="L907"></a><tt class="py-lineno"> 907</tt>  <tt class="py-line"><tt class="py-docstring">  A request object that you can call 'execute()' on to request the next</tt> </tt>
+<a name="L908"></a><tt class="py-lineno"> 908</tt>  <tt class="py-line"><tt class="py-docstring">  page. Returns None if there are no more items in the collection.</tt> </tt>
+<a name="L909"></a><tt class="py-lineno"> 909</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L910"></a><tt class="py-lineno"> 910</tt>  <tt class="py-line">    <tt class="py-comment"># Retrieve nextPageToken from previous_response</tt> </tt>
+<a name="L911"></a><tt class="py-lineno"> 911</tt>  <tt class="py-line">    <tt class="py-comment"># Use as pageToken in previous_request to create new request.</tt> </tt>
 <a name="L912"></a><tt class="py-lineno"> 912</tt>  <tt class="py-line"> </tt>
-<a name="L913"></a><tt class="py-lineno"> 913</tt>  <tt class="py-line">    <tt class="py-name">pageToken</tt> <tt class="py-op">=</tt> <tt class="py-name">previous_response</tt><tt class="py-op">[</tt><tt class="py-string">'nextPageToken'</tt><tt class="py-op">]</tt> </tt>
-<a name="L914"></a><tt class="py-lineno"> 914</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt id="link-226" class="py-name"><a title="googleapiclient.http.HttpMock.request
+<a name="L913"></a><tt class="py-lineno"> 913</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'nextPageToken'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">previous_response</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">previous_response</tt><tt class="py-op">[</tt><tt class="py-string">'nextPageToken'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L914"></a><tt class="py-lineno"> 914</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L915"></a><tt class="py-lineno"> 915</tt>  <tt class="py-line"> </tt>
+<a name="L916"></a><tt class="py-lineno"> 916</tt>  <tt class="py-line">    <tt id="link-229" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-226', 'request', 'link-85');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L915"></a><tt class="py-lineno"> 915</tt>  <tt class="py-line">    <tt class="py-name">q</tt> <tt class="py-op">=</tt> <tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L916"></a><tt class="py-lineno"> 916</tt>  <tt class="py-line"> </tt>
-<a name="L917"></a><tt class="py-lineno"> 917</tt>  <tt class="py-line">    <tt class="py-comment"># Find and remove old 'pageToken' value from URI</tt> </tt>
-<a name="L918"></a><tt class="py-lineno"> 918</tt>  <tt class="py-line">    <tt class="py-name">newq</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">q</tt> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-op">!=</tt> <tt class="py-string">'pageToken'</tt><tt class="py-op">]</tt> </tt>
-<a name="L919"></a><tt class="py-lineno"> 919</tt>  <tt class="py-line">    <tt class="py-name">newq</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">'pageToken'</tt><tt class="py-op">,</tt> <tt class="py-name">pageToken</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L920"></a><tt class="py-lineno"> 920</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-name">newq</tt><tt class="py-op">)</tt> </tt>
-<a name="L921"></a><tt class="py-lineno"> 921</tt>  <tt class="py-line">    <tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">urlunparse</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">)</tt> </tt>
-<a name="L922"></a><tt class="py-lineno"> 922</tt>  <tt class="py-line"> </tt>
-<a name="L923"></a><tt class="py-lineno"> 923</tt>  <tt class="py-line">    <tt id="link-227" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-229', 'request', 'link-89');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">previous_request</tt><tt class="py-op">)</tt> </tt>
+<a name="L917"></a><tt class="py-lineno"> 917</tt>  <tt class="py-line"> </tt>
+<a name="L918"></a><tt class="py-lineno"> 918</tt>  <tt class="py-line">    <tt class="py-name">pageToken</tt> <tt class="py-op">=</tt> <tt class="py-name">previous_response</tt><tt class="py-op">[</tt><tt class="py-string">'nextPageToken'</tt><tt class="py-op">]</tt> </tt>
+<a name="L919"></a><tt class="py-lineno"> 919</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt id="link-230" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-227', 'request', 'link-85');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
-<a name="L924"></a><tt class="py-lineno"> 924</tt>  <tt class="py-line"> </tt>
-<a name="L925"></a><tt class="py-lineno"> 925</tt>  <tt class="py-line">    <tt id="link-228" class="py-name"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-228', 'logger', 'link-44');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L926"></a><tt class="py-lineno"> 926</tt>  <tt class="py-line"> </tt>
-<a name="L927"></a><tt class="py-lineno"> 927</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-229" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-230', 'request', 'link-89');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L920"></a><tt class="py-lineno"> 920</tt>  <tt class="py-line">    <tt class="py-name">q</tt> <tt class="py-op">=</tt> <tt class="py-name">parse_qsl</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L921"></a><tt class="py-lineno"> 921</tt>  <tt class="py-line"> </tt>
+<a name="L922"></a><tt class="py-lineno"> 922</tt>  <tt class="py-line">    <tt class="py-comment"># Find and remove old 'pageToken' value from URI</tt> </tt>
+<a name="L923"></a><tt class="py-lineno"> 923</tt>  <tt class="py-line">    <tt class="py-name">newq</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">q</tt> <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-op">!=</tt> <tt class="py-string">'pageToken'</tt><tt class="py-op">]</tt> </tt>
+<a name="L924"></a><tt class="py-lineno"> 924</tt>  <tt class="py-line">    <tt class="py-name">newq</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">'pageToken'</tt><tt class="py-op">,</tt> <tt class="py-name">pageToken</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L925"></a><tt class="py-lineno"> 925</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt><tt class="py-op">[</tt><tt class="py-number">4</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-name">newq</tt><tt class="py-op">)</tt> </tt>
+<a name="L926"></a><tt class="py-lineno"> 926</tt>  <tt class="py-line">    <tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">urlunparse</tt><tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">)</tt> </tt>
+<a name="L927"></a><tt class="py-lineno"> 927</tt>  <tt class="py-line"> </tt>
+<a name="L928"></a><tt class="py-lineno"> 928</tt>  <tt class="py-line">    <tt id="link-231" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-229', 'request', 'link-85');">request</a></tt> </tt>
-</div><a name="L928"></a><tt class="py-lineno"> 928</tt>  <tt class="py-line"> </tt>
-<a name="L929"></a><tt class="py-lineno"> 929</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodNext</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L930"></a><tt class="py-lineno"> 930</tt>  <tt class="py-line"> </tt>
-<a name="Resource"></a><div id="Resource-def"><a name="L931"></a><tt class="py-lineno"> 931</tt>  <tt class="py-line"> </tt>
-<a name="L932"></a><tt class="py-lineno"> 932</tt> <a class="py-toggle" href="#" id="Resource-toggle" onclick="return toggle('Resource');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html">Resource</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Resource-expanded"><a name="L933"></a><tt class="py-lineno"> 933</tt>  <tt class="py-line">  <tt class="py-docstring">"""A class for interacting with a resource."""</tt> </tt>
-<a name="L934"></a><tt class="py-lineno"> 934</tt>  <tt class="py-line"> </tt>
-<a name="Resource.__init__"></a><div id="Resource.__init__-def"><a name="L935"></a><tt class="py-lineno"> 935</tt> <a class="py-toggle" href="#" id="Resource.__init__-toggle" onclick="return toggle('Resource.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">baseUrl</tt><tt class="py-op">,</tt> <tt class="py-param">model</tt><tt class="py-op">,</tt> <tt class="py-param">requestBuilder</tt><tt class="py-op">,</tt> <tt class="py-param">developerKey</tt><tt class="py-op">,</tt> </tt>
-<a name="L936"></a><tt class="py-lineno"> 936</tt>  <tt class="py-line">               <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource.__init__-expanded"><a name="L937"></a><tt class="py-lineno"> 937</tt>  <tt class="py-line">    <tt class="py-docstring">"""Build a Resource from the API description.</tt> </tt>
-<a name="L938"></a><tt class="py-lineno"> 938</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L939"></a><tt class="py-lineno"> 939</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L940"></a><tt class="py-lineno"> 940</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, Object to make http requests with.</tt> </tt>
-<a name="L941"></a><tt class="py-lineno"> 941</tt>  <tt class="py-line"><tt class="py-docstring">      baseUrl: string, base URL for the API. All requests are relative to this</tt> </tt>
-<a name="L942"></a><tt class="py-lineno"> 942</tt>  <tt class="py-line"><tt class="py-docstring">          URI.</tt> </tt>
-<a name="L943"></a><tt class="py-lineno"> 943</tt>  <tt class="py-line"><tt class="py-docstring">      model: googleapiclient.Model, converts to and from the wire format.</tt> </tt>
-<a name="L944"></a><tt class="py-lineno"> 944</tt>  <tt class="py-line"><tt class="py-docstring">      requestBuilder: class or callable that instantiates an</tt> </tt>
-<a name="L945"></a><tt class="py-lineno"> 945</tt>  <tt class="py-line"><tt class="py-docstring">          googleapiclient.HttpRequest object.</tt> </tt>
-<a name="L946"></a><tt class="py-lineno"> 946</tt>  <tt class="py-line"><tt class="py-docstring">      developerKey: string, key obtained from</tt> </tt>
-<a name="L947"></a><tt class="py-lineno"> 947</tt>  <tt class="py-line"><tt class="py-docstring">          https://code.google.com/apis/console</tt> </tt>
-<a name="L948"></a><tt class="py-lineno"> 948</tt>  <tt class="py-line"><tt class="py-docstring">      resourceDesc: object, section of deserialized discovery document that</tt> </tt>
-<a name="L949"></a><tt class="py-lineno"> 949</tt>  <tt class="py-line"><tt class="py-docstring">          describes a resource. Note that the top level discovery document</tt> </tt>
-<a name="L950"></a><tt class="py-lineno"> 950</tt>  <tt class="py-line"><tt class="py-docstring">          is considered a resource.</tt> </tt>
-<a name="L951"></a><tt class="py-lineno"> 951</tt>  <tt class="py-line"><tt class="py-docstring">      rootDesc: object, the entire deserialized discovery document.</tt> </tt>
-<a name="L952"></a><tt class="py-lineno"> 952</tt>  <tt class="py-line"><tt class="py-docstring">      schema: object, mapping of schema names to schema descriptions.</tt> </tt>
-<a name="L953"></a><tt class="py-lineno"> 953</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L954"></a><tt class="py-lineno"> 954</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L955"></a><tt class="py-lineno"> 955</tt>  <tt class="py-line"> </tt>
-<a name="L956"></a><tt class="py-lineno"> 956</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt> <tt class="py-op">=</tt> <tt id="link-230" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-230', 'http', 'link-21');">http</a></tt> </tt>
-<a name="L957"></a><tt class="py-lineno"> 957</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt> <tt class="py-op">=</tt> <tt class="py-name">baseUrl</tt> </tt>
-<a name="L958"></a><tt class="py-lineno"> 958</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> <tt class="py-op">=</tt> <tt id="link-231" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-231', 'model', 'link-33');">model</a></tt> </tt>
-<a name="L959"></a><tt class="py-lineno"> 959</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt> <tt class="py-op">=</tt> <tt class="py-name">developerKey</tt> </tt>
-<a name="L960"></a><tt class="py-lineno"> 960</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt> <tt class="py-op">=</tt> <tt class="py-name">requestBuilder</tt> </tt>
-<a name="L961"></a><tt class="py-lineno"> 961</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">resourceDesc</tt> </tt>
-<a name="L962"></a><tt class="py-lineno"> 962</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">rootDesc</tt> </tt>
-<a name="L963"></a><tt class="py-lineno"> 963</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt> <tt class="py-op">=</tt> <tt id="link-232" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-232', 'schema', 'link-42');">schema</a></tt> </tt>
-<a name="L964"></a><tt class="py-lineno"> 964</tt>  <tt class="py-line"> </tt>
-<a name="L965"></a><tt class="py-lineno"> 965</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-233" class="py-name" targets="Method googleapiclient.discovery.Resource._set_service_methods()=googleapiclient.discovery.Resource-class.html#_set_service_methods"><a title="googleapiclient.discovery.Resource._set_service_methods" class="py-name" href="#" onclick="return doclink('link-233', '_set_service_methods', 'link-233');">_set_service_methods</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L966"></a><tt class="py-lineno"> 966</tt>  <tt class="py-line"> </tt>
-<a name="Resource._set_dynamic_attr"></a><div id="Resource._set_dynamic_attr-def"><a name="L967"></a><tt class="py-lineno"> 967</tt> <a class="py-toggle" href="#" id="Resource._set_dynamic_attr-toggle" onclick="return toggle('Resource._set_dynamic_attr');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_set_dynamic_attr">_set_dynamic_attr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr_name</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource._set_dynamic_attr-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._set_dynamic_attr-expanded"><a name="L968"></a><tt class="py-lineno"> 968</tt>  <tt class="py-line">    <tt class="py-docstring">"""Sets an instance attribute and tracks it in a list of dynamic attributes.</tt> </tt>
-<a name="L969"></a><tt class="py-lineno"> 969</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L970"></a><tt class="py-lineno"> 970</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L971"></a><tt class="py-lineno"> 971</tt>  <tt class="py-line"><tt class="py-docstring">      attr_name: string; The name of the attribute to be set</tt> </tt>
-<a name="L972"></a><tt class="py-lineno"> 972</tt>  <tt class="py-line"><tt class="py-docstring">      value: The value being set on the object and tracked in the dynamic cache.</tt> </tt>
-<a name="L973"></a><tt class="py-lineno"> 973</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L974"></a><tt class="py-lineno"> 974</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">attr_name</tt><tt class="py-op">)</tt> </tt>
-<a name="L975"></a><tt class="py-lineno"> 975</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">attr_name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
-</div><a name="L976"></a><tt class="py-lineno"> 976</tt>  <tt class="py-line"> </tt>
-<a name="Resource.__getstate__"></a><div id="Resource.__getstate__-def"><a name="L977"></a><tt class="py-lineno"> 977</tt> <a class="py-toggle" href="#" id="Resource.__getstate__-toggle" onclick="return toggle('Resource.__getstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#__getstate__">__getstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource.__getstate__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource.__getstate__-expanded"><a name="L978"></a><tt class="py-lineno"> 978</tt>  <tt class="py-line">    <tt class="py-docstring">"""Trim the state down to something that can be pickled.</tt> </tt>
-<a name="L979"></a><tt class="py-lineno"> 979</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L980"></a><tt class="py-lineno"> 980</tt>  <tt class="py-line"><tt class="py-docstring">    Uses the fact that the instance variable _dynamic_attrs holds attrs that</tt> </tt>
-<a name="L981"></a><tt class="py-lineno"> 981</tt>  <tt class="py-line"><tt class="py-docstring">    will be wiped and restored on pickle serialization.</tt> </tt>
-<a name="L982"></a><tt class="py-lineno"> 982</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L983"></a><tt class="py-lineno"> 983</tt>  <tt class="py-line">    <tt class="py-name">state_dict</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
-<a name="L984"></a><tt class="py-lineno"> 984</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">dynamic_attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt><tt class="py-op">:</tt> </tt>
-<a name="L985"></a><tt class="py-lineno"> 985</tt>  <tt class="py-line">      <tt class="py-keyword">del</tt> <tt class="py-name">state_dict</tt><tt class="py-op">[</tt><tt class="py-name">dynamic_attr</tt><tt class="py-op">]</tt> </tt>
-<a name="L986"></a><tt class="py-lineno"> 986</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">state_dict</tt><tt class="py-op">[</tt><tt class="py-string">'_dynamic_attrs'</tt><tt class="py-op">]</tt> </tt>
-<a name="L987"></a><tt class="py-lineno"> 987</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">state_dict</tt> </tt>
-</div><a name="L988"></a><tt class="py-lineno"> 988</tt>  <tt class="py-line"> </tt>
-<a name="Resource.__setstate__"></a><div id="Resource.__setstate__-def"><a name="L989"></a><tt class="py-lineno"> 989</tt> <a class="py-toggle" href="#" id="Resource.__setstate__-toggle" onclick="return toggle('Resource.__setstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#__setstate__">__setstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">state</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource.__setstate__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource.__setstate__-expanded"><a name="L990"></a><tt class="py-lineno"> 990</tt>  <tt class="py-line">    <tt class="py-docstring">"""Reconstitute the state of the object from being pickled.</tt> </tt>
-<a name="L991"></a><tt class="py-lineno"> 991</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L992"></a><tt class="py-lineno"> 992</tt>  <tt class="py-line"><tt class="py-docstring">    Uses the fact that the instance variable _dynamic_attrs holds attrs that</tt> </tt>
-<a name="L993"></a><tt class="py-lineno"> 993</tt>  <tt class="py-line"><tt class="py-docstring">    will be wiped and restored on pickle serialization.</tt> </tt>
-<a name="L994"></a><tt class="py-lineno"> 994</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L995"></a><tt class="py-lineno"> 995</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name"><a title="googleapiclient.channel.Channel.update" class="py-name" href="#" onclick="return doclink('link-234', 'update', 'link-124');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">state</tt><tt class="py-op">)</tt> </tt>
-<a name="L996"></a><tt class="py-lineno"> 996</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L997"></a><tt class="py-lineno"> 997</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-235" class="py-name"><a title="googleapiclient.discovery.Resource._set_service_methods" class="py-name" href="#" onclick="return doclink('link-235', '_set_service_methods', 'link-233');">_set_service_methods</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L998"></a><tt class="py-lineno"> 998</tt>  <tt class="py-line"> </tt>
-<a name="Resource._set_service_methods"></a><div id="Resource._set_service_methods-def"><a name="L999"></a><tt class="py-lineno"> 999</tt> <a class="py-toggle" href="#" id="Resource._set_service_methods-toggle" onclick="return toggle('Resource._set_service_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_set_service_methods">_set_service_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource._set_service_methods-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._set_service_methods-expanded"><a name="L1000"></a><tt class="py-lineno">1000</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-236" class="py-name" targets="Method googleapiclient.discovery.Resource._add_basic_methods()=googleapiclient.discovery.Resource-class.html#_add_basic_methods"><a title="googleapiclient.discovery.Resource._add_basic_methods" class="py-name" href="#" onclick="return doclink('link-236', '_add_basic_methods', 'link-236');">_add_basic_methods</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
-<a name="L1001"></a><tt class="py-lineno">1001</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-237" class="py-name" targets="Method googleapiclient.discovery.Resource._add_nested_resources()=googleapiclient.discovery.Resource-class.html#_add_nested_resources"><a title="googleapiclient.discovery.Resource._add_nested_resources" class="py-name" href="#" onclick="return doclink('link-237', '_add_nested_resources', 'link-237');">_add_nested_resources</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
-<a name="L1002"></a><tt class="py-lineno">1002</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-238" class="py-name" targets="Method googleapiclient.discovery.Resource._add_next_methods()=googleapiclient.discovery.Resource-class.html#_add_next_methods"><a title="googleapiclient.discovery.Resource._add_next_methods" class="py-name" href="#" onclick="return doclink('link-238', '_add_next_methods', 'link-238');">_add_next_methods</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-231', 'request', 'link-89');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
+<a name="L929"></a><tt class="py-lineno"> 929</tt>  <tt class="py-line"> </tt>
+<a name="L930"></a><tt class="py-lineno"> 930</tt>  <tt class="py-line">    <tt id="link-232" class="py-name"><a title="googleapiclient.discovery.logger" class="py-name" href="#" onclick="return doclink('link-232', 'logger', 'link-44');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'URL being requested: %s %s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L931"></a><tt class="py-lineno"> 931</tt>  <tt class="py-line"> </tt>
+<a name="L932"></a><tt class="py-lineno"> 932</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-233" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-233', 'request', 'link-89');">request</a></tt> </tt>
+</div><a name="L933"></a><tt class="py-lineno"> 933</tt>  <tt class="py-line"> </tt>
+<a name="L934"></a><tt class="py-lineno"> 934</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodNext</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L935"></a><tt class="py-lineno"> 935</tt>  <tt class="py-line"> </tt>
+<a name="Resource"></a><div id="Resource-def"><a name="L936"></a><tt class="py-lineno"> 936</tt>  <tt class="py-line"> </tt>
+<a name="L937"></a><tt class="py-lineno"> 937</tt> <a class="py-toggle" href="#" id="Resource-toggle" onclick="return toggle('Resource');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html">Resource</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Resource-expanded"><a name="L938"></a><tt class="py-lineno"> 938</tt>  <tt class="py-line">  <tt class="py-docstring">"""A class for interacting with a resource."""</tt> </tt>
+<a name="L939"></a><tt class="py-lineno"> 939</tt>  <tt class="py-line"> </tt>
+<a name="Resource.__init__"></a><div id="Resource.__init__-def"><a name="L940"></a><tt class="py-lineno"> 940</tt> <a class="py-toggle" href="#" id="Resource.__init__-toggle" onclick="return toggle('Resource.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">baseUrl</tt><tt class="py-op">,</tt> <tt class="py-param">model</tt><tt class="py-op">,</tt> <tt class="py-param">requestBuilder</tt><tt class="py-op">,</tt> <tt class="py-param">developerKey</tt><tt class="py-op">,</tt> </tt>
+<a name="L941"></a><tt class="py-lineno"> 941</tt>  <tt class="py-line">               <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource.__init__-expanded"><a name="L942"></a><tt class="py-lineno"> 942</tt>  <tt class="py-line">    <tt class="py-docstring">"""Build a Resource from the API description.</tt> </tt>
+<a name="L943"></a><tt class="py-lineno"> 943</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L944"></a><tt class="py-lineno"> 944</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L945"></a><tt class="py-lineno"> 945</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, Object to make http requests with.</tt> </tt>
+<a name="L946"></a><tt class="py-lineno"> 946</tt>  <tt class="py-line"><tt class="py-docstring">      baseUrl: string, base URL for the API. All requests are relative to this</tt> </tt>
+<a name="L947"></a><tt class="py-lineno"> 947</tt>  <tt class="py-line"><tt class="py-docstring">          URI.</tt> </tt>
+<a name="L948"></a><tt class="py-lineno"> 948</tt>  <tt class="py-line"><tt class="py-docstring">      model: googleapiclient.Model, converts to and from the wire format.</tt> </tt>
+<a name="L949"></a><tt class="py-lineno"> 949</tt>  <tt class="py-line"><tt class="py-docstring">      requestBuilder: class or callable that instantiates an</tt> </tt>
+<a name="L950"></a><tt class="py-lineno"> 950</tt>  <tt class="py-line"><tt class="py-docstring">          googleapiclient.HttpRequest object.</tt> </tt>
+<a name="L951"></a><tt class="py-lineno"> 951</tt>  <tt class="py-line"><tt class="py-docstring">      developerKey: string, key obtained from</tt> </tt>
+<a name="L952"></a><tt class="py-lineno"> 952</tt>  <tt class="py-line"><tt class="py-docstring">          https://code.google.com/apis/console</tt> </tt>
+<a name="L953"></a><tt class="py-lineno"> 953</tt>  <tt class="py-line"><tt class="py-docstring">      resourceDesc: object, section of deserialized discovery document that</tt> </tt>
+<a name="L954"></a><tt class="py-lineno"> 954</tt>  <tt class="py-line"><tt class="py-docstring">          describes a resource. Note that the top level discovery document</tt> </tt>
+<a name="L955"></a><tt class="py-lineno"> 955</tt>  <tt class="py-line"><tt class="py-docstring">          is considered a resource.</tt> </tt>
+<a name="L956"></a><tt class="py-lineno"> 956</tt>  <tt class="py-line"><tt class="py-docstring">      rootDesc: object, the entire deserialized discovery document.</tt> </tt>
+<a name="L957"></a><tt class="py-lineno"> 957</tt>  <tt class="py-line"><tt class="py-docstring">      schema: object, mapping of schema names to schema descriptions.</tt> </tt>
+<a name="L958"></a><tt class="py-lineno"> 958</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L959"></a><tt class="py-lineno"> 959</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L960"></a><tt class="py-lineno"> 960</tt>  <tt class="py-line"> </tt>
+<a name="L961"></a><tt class="py-lineno"> 961</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt> <tt class="py-op">=</tt> <tt id="link-234" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-234', 'http', 'link-21');">http</a></tt> </tt>
+<a name="L962"></a><tt class="py-lineno"> 962</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt> <tt class="py-op">=</tt> <tt class="py-name">baseUrl</tt> </tt>
+<a name="L963"></a><tt class="py-lineno"> 963</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt> <tt class="py-op">=</tt> <tt id="link-235" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-235', 'model', 'link-33');">model</a></tt> </tt>
+<a name="L964"></a><tt class="py-lineno"> 964</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt> <tt class="py-op">=</tt> <tt class="py-name">developerKey</tt> </tt>
+<a name="L965"></a><tt class="py-lineno"> 965</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt> <tt class="py-op">=</tt> <tt class="py-name">requestBuilder</tt> </tt>
+<a name="L966"></a><tt class="py-lineno"> 966</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">resourceDesc</tt> </tt>
+<a name="L967"></a><tt class="py-lineno"> 967</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt> <tt class="py-op">=</tt> <tt class="py-name">rootDesc</tt> </tt>
+<a name="L968"></a><tt class="py-lineno"> 968</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt> <tt class="py-op">=</tt> <tt id="link-236" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-236', 'schema', 'link-42');">schema</a></tt> </tt>
+<a name="L969"></a><tt class="py-lineno"> 969</tt>  <tt class="py-line"> </tt>
+<a name="L970"></a><tt class="py-lineno"> 970</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-237" class="py-name" targets="Method googleapiclient.discovery.Resource._set_service_methods()=googleapiclient.discovery.Resource-class.html#_set_service_methods"><a title="googleapiclient.discovery.Resource._set_service_methods" class="py-name" href="#" onclick="return doclink('link-237', '_set_service_methods', 'link-237');">_set_service_methods</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L971"></a><tt class="py-lineno"> 971</tt>  <tt class="py-line"> </tt>
+<a name="Resource._set_dynamic_attr"></a><div id="Resource._set_dynamic_attr-def"><a name="L972"></a><tt class="py-lineno"> 972</tt> <a class="py-toggle" href="#" id="Resource._set_dynamic_attr-toggle" onclick="return toggle('Resource._set_dynamic_attr');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_set_dynamic_attr">_set_dynamic_attr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">attr_name</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource._set_dynamic_attr-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._set_dynamic_attr-expanded"><a name="L973"></a><tt class="py-lineno"> 973</tt>  <tt class="py-line">    <tt class="py-docstring">"""Sets an instance attribute and tracks it in a list of dynamic attributes.</tt> </tt>
+<a name="L974"></a><tt class="py-lineno"> 974</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L975"></a><tt class="py-lineno"> 975</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L976"></a><tt class="py-lineno"> 976</tt>  <tt class="py-line"><tt class="py-docstring">      attr_name: string; The name of the attribute to be set</tt> </tt>
+<a name="L977"></a><tt class="py-lineno"> 977</tt>  <tt class="py-line"><tt class="py-docstring">      value: The value being set on the object and tracked in the dynamic cache.</tt> </tt>
+<a name="L978"></a><tt class="py-lineno"> 978</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L979"></a><tt class="py-lineno"> 979</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">attr_name</tt><tt class="py-op">)</tt> </tt>
+<a name="L980"></a><tt class="py-lineno"> 980</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">attr_name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
+</div><a name="L981"></a><tt class="py-lineno"> 981</tt>  <tt class="py-line"> </tt>
+<a name="Resource.__getstate__"></a><div id="Resource.__getstate__-def"><a name="L982"></a><tt class="py-lineno"> 982</tt> <a class="py-toggle" href="#" id="Resource.__getstate__-toggle" onclick="return toggle('Resource.__getstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#__getstate__">__getstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource.__getstate__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource.__getstate__-expanded"><a name="L983"></a><tt class="py-lineno"> 983</tt>  <tt class="py-line">    <tt class="py-docstring">"""Trim the state down to something that can be pickled.</tt> </tt>
+<a name="L984"></a><tt class="py-lineno"> 984</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L985"></a><tt class="py-lineno"> 985</tt>  <tt class="py-line"><tt class="py-docstring">    Uses the fact that the instance variable _dynamic_attrs holds attrs that</tt> </tt>
+<a name="L986"></a><tt class="py-lineno"> 986</tt>  <tt class="py-line"><tt class="py-docstring">    will be wiped and restored on pickle serialization.</tt> </tt>
+<a name="L987"></a><tt class="py-lineno"> 987</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L988"></a><tt class="py-lineno"> 988</tt>  <tt class="py-line">    <tt class="py-name">state_dict</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
+<a name="L989"></a><tt class="py-lineno"> 989</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">dynamic_attr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt><tt class="py-op">:</tt> </tt>
+<a name="L990"></a><tt class="py-lineno"> 990</tt>  <tt class="py-line">      <tt class="py-keyword">del</tt> <tt class="py-name">state_dict</tt><tt class="py-op">[</tt><tt class="py-name">dynamic_attr</tt><tt class="py-op">]</tt> </tt>
+<a name="L991"></a><tt class="py-lineno"> 991</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">state_dict</tt><tt class="py-op">[</tt><tt class="py-string">'_dynamic_attrs'</tt><tt class="py-op">]</tt> </tt>
+<a name="L992"></a><tt class="py-lineno"> 992</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">state_dict</tt> </tt>
+</div><a name="L993"></a><tt class="py-lineno"> 993</tt>  <tt class="py-line"> </tt>
+<a name="Resource.__setstate__"></a><div id="Resource.__setstate__-def"><a name="L994"></a><tt class="py-lineno"> 994</tt> <a class="py-toggle" href="#" id="Resource.__setstate__-toggle" onclick="return toggle('Resource.__setstate__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#__setstate__">__setstate__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">state</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource.__setstate__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource.__setstate__-expanded"><a name="L995"></a><tt class="py-lineno"> 995</tt>  <tt class="py-line">    <tt class="py-docstring">"""Reconstitute the state of the object from being pickled.</tt> </tt>
+<a name="L996"></a><tt class="py-lineno"> 996</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L997"></a><tt class="py-lineno"> 997</tt>  <tt class="py-line"><tt class="py-docstring">    Uses the fact that the instance variable _dynamic_attrs holds attrs that</tt> </tt>
+<a name="L998"></a><tt class="py-lineno"> 998</tt>  <tt class="py-line"><tt class="py-docstring">    will be wiped and restored on pickle serialization.</tt> </tt>
+<a name="L999"></a><tt class="py-lineno"> 999</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1000"></a><tt class="py-lineno">1000</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt id="link-238" class="py-name"><a title="googleapiclient.channel.Channel.update" class="py-name" href="#" onclick="return doclink('link-238', 'update', 'link-128');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">state</tt><tt class="py-op">)</tt> </tt>
+<a name="L1001"></a><tt class="py-lineno">1001</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_dynamic_attrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1002"></a><tt class="py-lineno">1002</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-239" class="py-name"><a title="googleapiclient.discovery.Resource._set_service_methods" class="py-name" href="#" onclick="return doclink('link-239', '_set_service_methods', 'link-237');">_set_service_methods</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
 </div><a name="L1003"></a><tt class="py-lineno">1003</tt>  <tt class="py-line"> </tt>
-<a name="Resource._add_basic_methods"></a><div id="Resource._add_basic_methods-def"><a name="L1004"></a><tt class="py-lineno">1004</tt> <a class="py-toggle" href="#" id="Resource._add_basic_methods-toggle" onclick="return toggle('Resource._add_basic_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_add_basic_methods">_add_basic_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource._add_basic_methods-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._add_basic_methods-expanded"><a name="L1005"></a><tt class="py-lineno">1005</tt>  <tt class="py-line">    <tt class="py-comment"># If this is the root Resource, add a new_batch_http_request() method.</tt> </tt>
-<a name="L1006"></a><tt class="py-lineno">1006</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resourceDesc</tt> <tt class="py-op">==</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L1007"></a><tt class="py-lineno">1007</tt>  <tt class="py-line">      <tt class="py-name">batch_uri</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L1008"></a><tt class="py-lineno">1008</tt>  <tt class="py-line">        <tt class="py-name">rootDesc</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">.</tt><tt id="link-239" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+<a name="Resource._set_service_methods"></a><div id="Resource._set_service_methods-def"><a name="L1004"></a><tt class="py-lineno">1004</tt> <a class="py-toggle" href="#" id="Resource._set_service_methods-toggle" onclick="return toggle('Resource._set_service_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_set_service_methods">_set_service_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource._set_service_methods-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._set_service_methods-expanded"><a name="L1005"></a><tt class="py-lineno">1005</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-240" class="py-name" targets="Method googleapiclient.discovery.Resource._add_basic_methods()=googleapiclient.discovery.Resource-class.html#_add_basic_methods"><a title="googleapiclient.discovery.Resource._add_basic_methods" class="py-name" href="#" onclick="return doclink('link-240', '_add_basic_methods', 'link-240');">_add_basic_methods</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
+<a name="L1006"></a><tt class="py-lineno">1006</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-241" class="py-name" targets="Method googleapiclient.discovery.Resource._add_nested_resources()=googleapiclient.discovery.Resource-class.html#_add_nested_resources"><a title="googleapiclient.discovery.Resource._add_nested_resources" class="py-name" href="#" onclick="return doclink('link-241', '_add_nested_resources', 'link-241');">_add_nested_resources</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rootDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
+<a name="L1007"></a><tt class="py-lineno">1007</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-242" class="py-name" targets="Method googleapiclient.discovery.Resource._add_next_methods()=googleapiclient.discovery.Resource-class.html#_add_next_methods"><a title="googleapiclient.discovery.Resource._add_next_methods" class="py-name" href="#" onclick="return doclink('link-242', '_add_next_methods', 'link-242');">_add_next_methods</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_schema</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1008"></a><tt class="py-lineno">1008</tt>  <tt class="py-line"> </tt>
+<a name="Resource._add_basic_methods"></a><div id="Resource._add_basic_methods-def"><a name="L1009"></a><tt class="py-lineno">1009</tt> <a class="py-toggle" href="#" id="Resource._add_basic_methods-toggle" onclick="return toggle('Resource._add_basic_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_add_basic_methods">_add_basic_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource._add_basic_methods-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._add_basic_methods-expanded"><a name="L1010"></a><tt class="py-lineno">1010</tt>  <tt class="py-line">    <tt class="py-comment"># If this is the root Resource, add a new_batch_http_request() method.</tt> </tt>
+<a name="L1011"></a><tt class="py-lineno">1011</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resourceDesc</tt> <tt class="py-op">==</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L1012"></a><tt class="py-lineno">1012</tt>  <tt class="py-line">      <tt class="py-name">batch_uri</tt> <tt class="py-op">=</tt> <tt class="py-string">'%s%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
+<a name="L1013"></a><tt class="py-lineno">1013</tt>  <tt class="py-line">        <tt class="py-name">rootDesc</tt><tt class="py-op">[</tt><tt class="py-string">'rootUrl'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">.</tt><tt id="link-243" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-239', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'batchPath'</tt><tt class="py-op">,</tt> <tt class="py-string">'batch'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1009"></a><tt class="py-lineno">1009</tt>  <tt class="py-line">      <tt class="py-keyword">def</tt> <tt class="py-def-name">new_batch_http_request</tt><tt class="py-op">(</tt><tt class="py-param">callback</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1010"></a><tt class="py-lineno">1010</tt>  <tt class="py-line">        <tt class="py-docstring">"""Create a BatchHttpRequest object based on the discovery document.</tt> </tt>
-<a name="L1011"></a><tt class="py-lineno">1011</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1012"></a><tt class="py-lineno">1012</tt>  <tt class="py-line"><tt class="py-docstring">        Args:</tt> </tt>
-<a name="L1013"></a><tt class="py-lineno">1013</tt>  <tt class="py-line"><tt class="py-docstring">          callback: callable, A callback to be called for each response, of the</tt> </tt>
-<a name="L1014"></a><tt class="py-lineno">1014</tt>  <tt class="py-line"><tt class="py-docstring">            form callback(id, response, exception). The first parameter is the</tt> </tt>
-<a name="L1015"></a><tt class="py-lineno">1015</tt>  <tt class="py-line"><tt class="py-docstring">            request id, and the second is the deserialized response object. The</tt> </tt>
-<a name="L1016"></a><tt class="py-lineno">1016</tt>  <tt class="py-line"><tt class="py-docstring">            third is an apiclient.errors.HttpError exception object if an HTTP</tt> </tt>
-<a name="L1017"></a><tt class="py-lineno">1017</tt>  <tt class="py-line"><tt class="py-docstring">            error occurred while processing the request, or None if no error</tt> </tt>
-<a name="L1018"></a><tt class="py-lineno">1018</tt>  <tt class="py-line"><tt class="py-docstring">            occurred.</tt> </tt>
-<a name="L1019"></a><tt class="py-lineno">1019</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1020"></a><tt class="py-lineno">1020</tt>  <tt class="py-line"><tt class="py-docstring">        Returns:</tt> </tt>
-<a name="L1021"></a><tt class="py-lineno">1021</tt>  <tt class="py-line"><tt class="py-docstring">          A BatchHttpRequest object based on the discovery document.</tt> </tt>
-<a name="L1022"></a><tt class="py-lineno">1022</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
-<a name="L1023"></a><tt class="py-lineno">1023</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-240" class="py-name"><a title="googleapiclient.http.BatchHttpRequest" class="py-name" href="#" onclick="return doclink('link-240', 'BatchHttpRequest', 'link-22');">BatchHttpRequest</a></tt><tt class="py-op">(</tt><tt class="py-name">callback</tt><tt class="py-op">=</tt><tt class="py-name">callback</tt><tt class="py-op">,</tt> <tt class="py-name">batch_uri</tt><tt class="py-op">=</tt><tt class="py-name">batch_uri</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1024"></a><tt class="py-lineno">1024</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-241" class="py-name" targets="Method googleapiclient.discovery.Resource._set_dynamic_attr()=googleapiclient.discovery.Resource-class.html#_set_dynamic_attr"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-241', '_set_dynamic_attr', 'link-241');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-string">'new_batch_http_request'</tt><tt class="py-op">,</tt> <tt class="py-name">new_batch_http_request</tt><tt class="py-op">)</tt> </tt>
-<a name="L1025"></a><tt class="py-lineno">1025</tt>  <tt class="py-line"> </tt>
-<a name="L1026"></a><tt class="py-lineno">1026</tt>  <tt class="py-line">    <tt class="py-comment"># Add basic methods to Resource</tt> </tt>
-<a name="L1027"></a><tt class="py-lineno">1027</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'methods'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L1028"></a><tt class="py-lineno">1028</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'methods'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1029"></a><tt class="py-lineno">1029</tt>  <tt class="py-line">        <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-242" class="py-name" targets="Function googleapiclient.discovery.createMethod()=googleapiclient.discovery-module.html#createMethod"><a title="googleapiclient.discovery.createMethod" class="py-name" href="#" onclick="return doclink('link-242', 'createMethod', 'link-242');">createMethod</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L1030"></a><tt class="py-lineno">1030</tt>  <tt class="py-line">            <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> <tt id="link-243" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-243', 'schema', 'link-42');">schema</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1031"></a><tt class="py-lineno">1031</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-244" class="py-name"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-244', '_set_dynamic_attr', 'link-241');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
-<a name="L1032"></a><tt class="py-lineno">1032</tt>  <tt class="py-line">                               <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1033"></a><tt class="py-lineno">1033</tt>  <tt class="py-line">        <tt class="py-comment"># Add in _media methods. The functionality of the attached method will</tt> </tt>
-<a name="L1034"></a><tt class="py-lineno">1034</tt>  <tt class="py-line">        <tt class="py-comment"># change when it sees that the method name ends in _media.</tt> </tt>
-<a name="L1035"></a><tt class="py-lineno">1035</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-245" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-243', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'batchPath'</tt><tt class="py-op">,</tt> <tt class="py-string">'batch'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1014"></a><tt class="py-lineno">1014</tt>  <tt class="py-line">      <tt class="py-keyword">def</tt> <tt class="py-def-name">new_batch_http_request</tt><tt class="py-op">(</tt><tt class="py-param">callback</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1015"></a><tt class="py-lineno">1015</tt>  <tt class="py-line">        <tt class="py-docstring">"""Create a BatchHttpRequest object based on the discovery document.</tt> </tt>
+<a name="L1016"></a><tt class="py-lineno">1016</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1017"></a><tt class="py-lineno">1017</tt>  <tt class="py-line"><tt class="py-docstring">        Args:</tt> </tt>
+<a name="L1018"></a><tt class="py-lineno">1018</tt>  <tt class="py-line"><tt class="py-docstring">          callback: callable, A callback to be called for each response, of the</tt> </tt>
+<a name="L1019"></a><tt class="py-lineno">1019</tt>  <tt class="py-line"><tt class="py-docstring">            form callback(id, response, exception). The first parameter is the</tt> </tt>
+<a name="L1020"></a><tt class="py-lineno">1020</tt>  <tt class="py-line"><tt class="py-docstring">            request id, and the second is the deserialized response object. The</tt> </tt>
+<a name="L1021"></a><tt class="py-lineno">1021</tt>  <tt class="py-line"><tt class="py-docstring">            third is an apiclient.errors.HttpError exception object if an HTTP</tt> </tt>
+<a name="L1022"></a><tt class="py-lineno">1022</tt>  <tt class="py-line"><tt class="py-docstring">            error occurred while processing the request, or None if no error</tt> </tt>
+<a name="L1023"></a><tt class="py-lineno">1023</tt>  <tt class="py-line"><tt class="py-docstring">            occurred.</tt> </tt>
+<a name="L1024"></a><tt class="py-lineno">1024</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1025"></a><tt class="py-lineno">1025</tt>  <tt class="py-line"><tt class="py-docstring">        Returns:</tt> </tt>
+<a name="L1026"></a><tt class="py-lineno">1026</tt>  <tt class="py-line"><tt class="py-docstring">          A BatchHttpRequest object based on the discovery document.</tt> </tt>
+<a name="L1027"></a><tt class="py-lineno">1027</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L1028"></a><tt class="py-lineno">1028</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-244" class="py-name"><a title="googleapiclient.http.BatchHttpRequest" class="py-name" href="#" onclick="return doclink('link-244', 'BatchHttpRequest', 'link-22');">BatchHttpRequest</a></tt><tt class="py-op">(</tt><tt class="py-name">callback</tt><tt class="py-op">=</tt><tt class="py-name">callback</tt><tt class="py-op">,</tt> <tt class="py-name">batch_uri</tt><tt class="py-op">=</tt><tt class="py-name">batch_uri</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1029"></a><tt class="py-lineno">1029</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-245" class="py-name" targets="Method googleapiclient.discovery.Resource._set_dynamic_attr()=googleapiclient.discovery.Resource-class.html#_set_dynamic_attr"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-245', '_set_dynamic_attr', 'link-245');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-string">'new_batch_http_request'</tt><tt class="py-op">,</tt> <tt class="py-name">new_batch_http_request</tt><tt class="py-op">)</tt> </tt>
+<a name="L1030"></a><tt class="py-lineno">1030</tt>  <tt class="py-line"> </tt>
+<a name="L1031"></a><tt class="py-lineno">1031</tt>  <tt class="py-line">    <tt class="py-comment"># Add basic methods to Resource</tt> </tt>
+<a name="L1032"></a><tt class="py-lineno">1032</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'methods'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L1033"></a><tt class="py-lineno">1033</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'methods'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1034"></a><tt class="py-lineno">1034</tt>  <tt class="py-line">        <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-246" class="py-name" targets="Function googleapiclient.discovery.createMethod()=googleapiclient.discovery-module.html#createMethod"><a title="googleapiclient.discovery.createMethod" class="py-name" href="#" onclick="return doclink('link-246', 'createMethod', 'link-246');">createMethod</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L1035"></a><tt class="py-lineno">1035</tt>  <tt class="py-line">            <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> <tt id="link-247" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-247', 'schema', 'link-42');">schema</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1036"></a><tt class="py-lineno">1036</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-248" class="py-name"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-248', '_set_dynamic_attr', 'link-245');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
+<a name="L1037"></a><tt class="py-lineno">1037</tt>  <tt class="py-line">                               <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1038"></a><tt class="py-lineno">1038</tt>  <tt class="py-line">        <tt class="py-comment"># Add in _media methods. The functionality of the attached method will</tt> </tt>
+<a name="L1039"></a><tt class="py-lineno">1039</tt>  <tt class="py-line">        <tt class="py-comment"># change when it sees that the method name ends in _media.</tt> </tt>
+<a name="L1040"></a><tt class="py-lineno">1040</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-249" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-245', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'supportsMediaDownload'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1036"></a><tt class="py-lineno">1036</tt>  <tt class="py-line">          <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-246" class="py-name"><a title="googleapiclient.discovery.createMethod" class="py-name" href="#" onclick="return doclink('link-246', 'createMethod', 'link-242');">createMethod</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L1037"></a><tt class="py-lineno">1037</tt>  <tt class="py-line">              <tt class="py-name">methodName</tt> <tt class="py-op">+</tt> <tt class="py-string">'_media'</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> <tt id="link-247" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-247', 'schema', 'link-42');">schema</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1038"></a><tt class="py-lineno">1038</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-248" class="py-name"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-248', '_set_dynamic_attr', 'link-241');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
-<a name="L1039"></a><tt class="py-lineno">1039</tt>  <tt class="py-line">                                 <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1040"></a><tt class="py-lineno">1040</tt>  <tt class="py-line"> </tt>
-<a name="Resource._add_nested_resources"></a><div id="Resource._add_nested_resources-def"><a name="L1041"></a><tt class="py-lineno">1041</tt> <a class="py-toggle" href="#" id="Resource._add_nested_resources-toggle" onclick="return toggle('Resource._add_nested_resources');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_add_nested_resources">_add_nested_resources</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource._add_nested_resources-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._add_nested_resources-expanded"><a name="L1042"></a><tt class="py-lineno">1042</tt>  <tt class="py-line">    <tt class="py-comment"># Add in nested resources</tt> </tt>
-<a name="L1043"></a><tt class="py-lineno">1043</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'resources'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L1044"></a><tt class="py-lineno">1044</tt>  <tt class="py-line"> </tt>
-<a name="L1045"></a><tt class="py-lineno">1045</tt>  <tt class="py-line">      <tt class="py-keyword">def</tt> <tt class="py-def-name">createResourceMethod</tt><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">,</tt> <tt class="py-param">methodDesc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1046"></a><tt class="py-lineno">1046</tt>  <tt class="py-line">        <tt class="py-docstring">"""Create a method on the Resource to access a nested Resource.</tt> </tt>
-<a name="L1047"></a><tt class="py-lineno">1047</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1048"></a><tt class="py-lineno">1048</tt>  <tt class="py-line"><tt class="py-docstring">        Args:</tt> </tt>
-<a name="L1049"></a><tt class="py-lineno">1049</tt>  <tt class="py-line"><tt class="py-docstring">          methodName: string, name of the method to use.</tt> </tt>
-<a name="L1050"></a><tt class="py-lineno">1050</tt>  <tt class="py-line"><tt class="py-docstring">          methodDesc: object, fragment of deserialized discovery document that</tt> </tt>
-<a name="L1051"></a><tt class="py-lineno">1051</tt>  <tt class="py-line"><tt class="py-docstring">            describes the method.</tt> </tt>
-<a name="L1052"></a><tt class="py-lineno">1052</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
-<a name="L1053"></a><tt class="py-lineno">1053</tt>  <tt class="py-line">        <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-249" class="py-name"><a title="googleapiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-249', 'fix_method_name', 'link-158');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
-<a name="L1054"></a><tt class="py-lineno">1054</tt>  <tt class="py-line"> </tt>
-<a name="L1055"></a><tt class="py-lineno">1055</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">methodResource</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1056"></a><tt class="py-lineno">1056</tt>  <tt class="py-line">          <tt class="py-keyword">return</tt> <tt id="link-250" class="py-name"><a title="googleapiclient.discovery.Resource" class="py-name" href="#" onclick="return doclink('link-250', 'Resource', 'link-107');">Resource</a></tt><tt class="py-op">(</tt><tt id="link-251" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-251', 'http', 'link-21');">http</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt><tt class="py-op">,</tt> <tt class="py-name">baseUrl</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> </tt>
-<a name="L1057"></a><tt class="py-lineno">1057</tt>  <tt class="py-line">                          <tt id="link-252" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-252', 'model', 'link-33');">model</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt><tt class="py-op">,</tt> </tt>
-<a name="L1058"></a><tt class="py-lineno">1058</tt>  <tt class="py-line">                          <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt><tt class="py-op">,</tt> </tt>
-<a name="L1059"></a><tt class="py-lineno">1059</tt>  <tt class="py-line">                          <tt class="py-name">resourceDesc</tt><tt class="py-op">=</tt><tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">=</tt><tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> </tt>
-<a name="L1060"></a><tt class="py-lineno">1060</tt>  <tt class="py-line">                          <tt id="link-253" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-253', 'schema', 'link-42');">schema</a></tt><tt class="py-op">=</tt><tt id="link-254" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-254', 'schema', 'link-42');">schema</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1061"></a><tt class="py-lineno">1061</tt>  <tt class="py-line"> </tt>
-<a name="L1062"></a><tt class="py-lineno">1062</tt>  <tt class="py-line">        <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">methodResource</tt><tt class="py-op">,</tt> <tt class="py-string">'__doc__'</tt><tt class="py-op">,</tt> <tt class="py-string">'A collection resource.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1063"></a><tt class="py-lineno">1063</tt>  <tt class="py-line">        <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">methodResource</tt><tt class="py-op">,</tt> <tt class="py-string">'__is_resource__'</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L1064"></a><tt class="py-lineno">1064</tt>  <tt class="py-line"> </tt>
-<a name="L1065"></a><tt class="py-lineno">1065</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodResource</tt><tt class="py-op">)</tt> </tt>
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-249', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'supportsMediaDownload'</tt><tt class="py-op">,</tt> <tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1041"></a><tt class="py-lineno">1041</tt>  <tt class="py-line">          <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-250" class="py-name"><a title="googleapiclient.discovery.createMethod" class="py-name" href="#" onclick="return doclink('link-250', 'createMethod', 'link-246');">createMethod</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L1042"></a><tt class="py-lineno">1042</tt>  <tt class="py-line">              <tt class="py-name">methodName</tt> <tt class="py-op">+</tt> <tt class="py-string">'_media'</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> <tt id="link-251" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-251', 'schema', 'link-42');">schema</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1043"></a><tt class="py-lineno">1043</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-252" class="py-name"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-252', '_set_dynamic_attr', 'link-245');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
+<a name="L1044"></a><tt class="py-lineno">1044</tt>  <tt class="py-line">                                 <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1045"></a><tt class="py-lineno">1045</tt>  <tt class="py-line"> </tt>
+<a name="Resource._add_nested_resources"></a><div id="Resource._add_nested_resources-def"><a name="L1046"></a><tt class="py-lineno">1046</tt> <a class="py-toggle" href="#" id="Resource._add_nested_resources-toggle" onclick="return toggle('Resource._add_nested_resources');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_add_nested_resources">_add_nested_resources</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">rootDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource._add_nested_resources-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._add_nested_resources-expanded"><a name="L1047"></a><tt class="py-lineno">1047</tt>  <tt class="py-line">    <tt class="py-comment"># Add in nested resources</tt> </tt>
+<a name="L1048"></a><tt class="py-lineno">1048</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'resources'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L1049"></a><tt class="py-lineno">1049</tt>  <tt class="py-line"> </tt>
+<a name="L1050"></a><tt class="py-lineno">1050</tt>  <tt class="py-line">      <tt class="py-keyword">def</tt> <tt class="py-def-name">createResourceMethod</tt><tt class="py-op">(</tt><tt class="py-param">methodName</tt><tt class="py-op">,</tt> <tt class="py-param">methodDesc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1051"></a><tt class="py-lineno">1051</tt>  <tt class="py-line">        <tt class="py-docstring">"""Create a method on the Resource to access a nested Resource.</tt> </tt>
+<a name="L1052"></a><tt class="py-lineno">1052</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1053"></a><tt class="py-lineno">1053</tt>  <tt class="py-line"><tt class="py-docstring">        Args:</tt> </tt>
+<a name="L1054"></a><tt class="py-lineno">1054</tt>  <tt class="py-line"><tt class="py-docstring">          methodName: string, name of the method to use.</tt> </tt>
+<a name="L1055"></a><tt class="py-lineno">1055</tt>  <tt class="py-line"><tt class="py-docstring">          methodDesc: object, fragment of deserialized discovery document that</tt> </tt>
+<a name="L1056"></a><tt class="py-lineno">1056</tt>  <tt class="py-line"><tt class="py-docstring">            describes the method.</tt> </tt>
+<a name="L1057"></a><tt class="py-lineno">1057</tt>  <tt class="py-line"><tt class="py-docstring">        """</tt> </tt>
+<a name="L1058"></a><tt class="py-lineno">1058</tt>  <tt class="py-line">        <tt class="py-name">methodName</tt> <tt class="py-op">=</tt> <tt id="link-253" class="py-name"><a title="googleapiclient.discovery.fix_method_name" class="py-name" href="#" onclick="return doclink('link-253', 'fix_method_name', 'link-162');">fix_method_name</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">)</tt> </tt>
+<a name="L1059"></a><tt class="py-lineno">1059</tt>  <tt class="py-line"> </tt>
+<a name="L1060"></a><tt class="py-lineno">1060</tt>  <tt class="py-line">        <tt class="py-keyword">def</tt> <tt class="py-def-name">methodResource</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1061"></a><tt class="py-lineno">1061</tt>  <tt class="py-line">          <tt class="py-keyword">return</tt> <tt id="link-254" class="py-name"><a title="googleapiclient.discovery.Resource" class="py-name" href="#" onclick="return doclink('link-254', 'Resource', 'link-111');">Resource</a></tt><tt class="py-op">(</tt><tt id="link-255" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-255', 'http', 'link-21');">http</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_http</tt><tt class="py-op">,</tt> <tt class="py-name">baseUrl</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_baseUrl</tt><tt class="py-op">,</tt> </tt>
+<a name="L1062"></a><tt class="py-lineno">1062</tt>  <tt class="py-line">                          <tt id="link-256" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-256', 'model', 'link-33');">model</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_model</tt><tt class="py-op">,</tt> <tt class="py-name">developerKey</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_developerKey</tt><tt class="py-op">,</tt> </tt>
+<a name="L1063"></a><tt class="py-lineno">1063</tt>  <tt class="py-line">                          <tt class="py-name">requestBuilder</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requestBuilder</tt><tt class="py-op">,</tt> </tt>
+<a name="L1064"></a><tt class="py-lineno">1064</tt>  <tt class="py-line">                          <tt class="py-name">resourceDesc</tt><tt class="py-op">=</tt><tt class="py-name">methodDesc</tt><tt class="py-op">,</tt> <tt class="py-name">rootDesc</tt><tt class="py-op">=</tt><tt class="py-name">rootDesc</tt><tt class="py-op">,</tt> </tt>
+<a name="L1065"></a><tt class="py-lineno">1065</tt>  <tt class="py-line">                          <tt id="link-257" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-257', 'schema', 'link-42');">schema</a></tt><tt class="py-op">=</tt><tt id="link-258" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-258', 'schema', 'link-42');">schema</a></tt><tt class="py-op">)</tt> </tt>
 </div><a name="L1066"></a><tt class="py-lineno">1066</tt>  <tt class="py-line"> </tt>
-<a name="L1067"></a><tt class="py-lineno">1067</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1068"></a><tt class="py-lineno">1068</tt>  <tt class="py-line">        <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">createResourceMethod</tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">)</tt> </tt>
-<a name="L1069"></a><tt class="py-lineno">1069</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-255" class="py-name"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-255', '_set_dynamic_attr', 'link-241');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
-<a name="L1070"></a><tt class="py-lineno">1070</tt>  <tt class="py-line">                               <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1067"></a><tt class="py-lineno">1067</tt>  <tt class="py-line">        <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">methodResource</tt><tt class="py-op">,</tt> <tt class="py-string">'__doc__'</tt><tt class="py-op">,</tt> <tt class="py-string">'A collection resource.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1068"></a><tt class="py-lineno">1068</tt>  <tt class="py-line">        <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">methodResource</tt><tt class="py-op">,</tt> <tt class="py-string">'__is_resource__'</tt><tt class="py-op">,</tt> <tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L1069"></a><tt class="py-lineno">1069</tt>  <tt class="py-line"> </tt>
+<a name="L1070"></a><tt class="py-lineno">1070</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodResource</tt><tt class="py-op">)</tt> </tt>
 </div><a name="L1071"></a><tt class="py-lineno">1071</tt>  <tt class="py-line"> </tt>
-<a name="Resource._add_next_methods"></a><div id="Resource._add_next_methods-def"><a name="L1072"></a><tt class="py-lineno">1072</tt> <a class="py-toggle" href="#" id="Resource._add_next_methods-toggle" onclick="return toggle('Resource._add_next_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_add_next_methods">_add_next_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Resource._add_next_methods-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._add_next_methods-expanded"><a name="L1073"></a><tt class="py-lineno">1073</tt>  <tt class="py-line">    <tt class="py-comment"># Add _next() methods</tt> </tt>
-<a name="L1074"></a><tt class="py-lineno">1074</tt>  <tt class="py-line">    <tt class="py-comment"># Look for response bodies in schema that contain nextPageToken, and methods</tt> </tt>
-<a name="L1075"></a><tt class="py-lineno">1075</tt>  <tt class="py-line">    <tt class="py-comment"># that take a pageToken parameter.</tt> </tt>
-<a name="L1076"></a><tt class="py-lineno">1076</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'methods'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L1077"></a><tt class="py-lineno">1077</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'methods'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1078"></a><tt class="py-lineno">1078</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
-<a name="L1079"></a><tt class="py-lineno">1079</tt>  <tt class="py-line">          <tt class="py-name">responseSchema</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'response'</tt><tt class="py-op">]</tt> </tt>
-<a name="L1080"></a><tt class="py-lineno">1080</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-string">'$ref'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">responseSchema</tt><tt class="py-op">:</tt> </tt>
-<a name="L1081"></a><tt class="py-lineno">1081</tt>  <tt class="py-line">            <tt class="py-name">responseSchema</tt> <tt class="py-op">=</tt> <tt id="link-256" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-256', 'schema', 'link-42');">schema</a></tt><tt class="py-op">.</tt><tt id="link-257" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+<a name="L1072"></a><tt class="py-lineno">1072</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'resources'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1073"></a><tt class="py-lineno">1073</tt>  <tt class="py-line">        <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">createResourceMethod</tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">)</tt> </tt>
+<a name="L1074"></a><tt class="py-lineno">1074</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-259" class="py-name"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-259', '_set_dynamic_attr', 'link-245');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
+<a name="L1075"></a><tt class="py-lineno">1075</tt>  <tt class="py-line">                               <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1076"></a><tt class="py-lineno">1076</tt>  <tt class="py-line"> </tt>
+<a name="Resource._add_next_methods"></a><div id="Resource._add_next_methods-def"><a name="L1077"></a><tt class="py-lineno">1077</tt> <a class="py-toggle" href="#" id="Resource._add_next_methods-toggle" onclick="return toggle('Resource._add_next_methods');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery.Resource-class.html#_add_next_methods">_add_next_methods</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resourceDesc</tt><tt class="py-op">,</tt> <tt class="py-param">schema</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Resource._add_next_methods-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="Resource._add_next_methods-expanded"><a name="L1078"></a><tt class="py-lineno">1078</tt>  <tt class="py-line">    <tt class="py-comment"># Add _next() methods</tt> </tt>
+<a name="L1079"></a><tt class="py-lineno">1079</tt>  <tt class="py-line">    <tt class="py-comment"># Look for response bodies in schema that contain nextPageToken, and methods</tt> </tt>
+<a name="L1080"></a><tt class="py-lineno">1080</tt>  <tt class="py-line">    <tt class="py-comment"># that take a pageToken parameter.</tt> </tt>
+<a name="L1081"></a><tt class="py-lineno">1081</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'methods'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resourceDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L1082"></a><tt class="py-lineno">1082</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">methodName</tt><tt class="py-op">,</tt> <tt class="py-name">methodDesc</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">resourceDesc</tt><tt class="py-op">[</tt><tt class="py-string">'methods'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1083"></a><tt class="py-lineno">1083</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-string">'response'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">:</tt> </tt>
+<a name="L1084"></a><tt class="py-lineno">1084</tt>  <tt class="py-line">          <tt class="py-name">responseSchema</tt> <tt class="py-op">=</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">[</tt><tt class="py-string">'response'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1085"></a><tt class="py-lineno">1085</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-string">'$ref'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">responseSchema</tt><tt class="py-op">:</tt> </tt>
+<a name="L1086"></a><tt class="py-lineno">1086</tt>  <tt class="py-line">            <tt class="py-name">responseSchema</tt> <tt class="py-op">=</tt> <tt id="link-260" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-260', 'schema', 'link-42');">schema</a></tt><tt class="py-op">.</tt><tt id="link-261" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-257', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">responseSchema</tt><tt class="py-op">[</tt><tt class="py-string">'$ref'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L1082"></a><tt class="py-lineno">1082</tt>  <tt class="py-line">          <tt class="py-name">hasNextPageToken</tt> <tt class="py-op">=</tt> <tt class="py-string">'nextPageToken'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">responseSchema</tt><tt class="py-op">.</tt><tt id="link-258" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-261', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">responseSchema</tt><tt class="py-op">[</tt><tt class="py-string">'$ref'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1087"></a><tt class="py-lineno">1087</tt>  <tt class="py-line">          <tt class="py-name">hasNextPageToken</tt> <tt class="py-op">=</tt> <tt class="py-string">'nextPageToken'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">responseSchema</tt><tt class="py-op">.</tt><tt id="link-262" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-258', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'properties'</tt><tt class="py-op">,</tt> </tt>
-<a name="L1083"></a><tt class="py-lineno">1083</tt>  <tt class="py-line">                                                                   <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L1084"></a><tt class="py-lineno">1084</tt>  <tt class="py-line">          <tt class="py-name">hasPageToken</tt> <tt class="py-op">=</tt> <tt class="py-string">'pageToken'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-259" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-262', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'properties'</tt><tt class="py-op">,</tt> </tt>
+<a name="L1088"></a><tt class="py-lineno">1088</tt>  <tt class="py-line">                                                                   <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L1089"></a><tt class="py-lineno">1089</tt>  <tt class="py-line">          <tt class="py-name">hasPageToken</tt> <tt class="py-op">=</tt> <tt class="py-string">'pageToken'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">methodDesc</tt><tt class="py-op">.</tt><tt id="link-263" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-259', 'get', 'link-82');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L1085"></a><tt class="py-lineno">1085</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">hasNextPageToken</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasPageToken</tt><tt class="py-op">:</tt> </tt>
-<a name="L1086"></a><tt class="py-lineno">1086</tt>  <tt class="py-line">            <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-260" class="py-name" targets="Function googleapiclient.discovery.createNextMethod()=googleapiclient.discovery-module.html#createNextMethod"><a title="googleapiclient.discovery.createNextMethod" class="py-name" href="#" onclick="return doclink('link-260', 'createNextMethod', 'link-260');">createNextMethod</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt> <tt class="py-op">+</tt> <tt class="py-string">'_next'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1087"></a><tt class="py-lineno">1087</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-261" class="py-name"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-261', '_set_dynamic_attr', 'link-241');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
-<a name="L1088"></a><tt class="py-lineno">1088</tt>  <tt class="py-line">                                   <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L1089"></a><tt class="py-lineno">1089</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-263', 'get', 'link-86');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'parameters'</tt><tt class="py-op">,</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L1090"></a><tt class="py-lineno">1090</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt class="py-name">hasNextPageToken</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasPageToken</tt><tt class="py-op">:</tt> </tt>
+<a name="L1091"></a><tt class="py-lineno">1091</tt>  <tt class="py-line">            <tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt id="link-264" class="py-name" targets="Function googleapiclient.discovery.createNextMethod()=googleapiclient.discovery-module.html#createNextMethod"><a title="googleapiclient.discovery.createNextMethod" class="py-name" href="#" onclick="return doclink('link-264', 'createNextMethod', 'link-264');">createNextMethod</a></tt><tt class="py-op">(</tt><tt class="py-name">methodName</tt> <tt class="py-op">+</tt> <tt class="py-string">'_next'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1092"></a><tt class="py-lineno">1092</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-265" class="py-name"><a title="googleapiclient.discovery.Resource._set_dynamic_attr" class="py-name" href="#" onclick="return doclink('link-265', '_set_dynamic_attr', 'link-245');">_set_dynamic_attr</a></tt><tt class="py-op">(</tt><tt class="py-name">fixedMethodName</tt><tt class="py-op">,</tt> </tt>
+<a name="L1093"></a><tt class="py-lineno">1093</tt>  <tt class="py-line">                                   <tt class="py-name">method</tt><tt class="py-op">.</tt><tt class="py-name">__get__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1094"></a><tt class="py-lineno">1094</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -1350,7 +1350,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery.Resource-class.html b/docs/epy/googleapiclient.discovery.Resource-class.html
index f5e8d29..82bf0b8 100644
--- a/docs/epy/googleapiclient.discovery.Resource-class.html
+++ b/docs/epy/googleapiclient.discovery.Resource-class.html
@@ -58,13 +58,13 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class Resource</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.discovery-pysrc.html#Resource">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_3" name="uml_class_diagram_for_googleap_3">
+<center>  <map id="uml_class_diagram_for_googleap_4" name="uml_class_diagram_for_googleap_4">
 <area shape="rect" id="node1_3" href="googleapiclient.discovery.Resource-class.html#__init__" title="Build a Resource from the API description." alt="" coords="18,36,611,55"/>
 <area shape="rect" id="node1_4" href="googleapiclient.discovery.Resource-class.html#__getstate__" title="Trim the state down to something that can be pickled." alt="" coords="18,55,611,73"/>
 <area shape="rect" id="node1_5" href="googleapiclient.discovery.Resource-class.html#__setstate__" title="Reconstitute the state of the object from being pickled." alt="" coords="18,73,611,92"/>
 <area shape="rect" id="node1" href="googleapiclient.discovery.Resource-class.html" title="A class for interacting with a resource." alt="" coords="5,5,623,99"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_3.gif" alt='' usemap="#uml_class_diagram_for_googleap_3" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_4.gif" alt='' usemap="#uml_class_diagram_for_googleap_4" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -458,7 +458,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery.ResourceMethodParameters-class.html b/docs/epy/googleapiclient.discovery.ResourceMethodParameters-class.html
index 8b13ec4..19d1704 100644
--- a/docs/epy/googleapiclient.discovery.ResourceMethodParameters-class.html
+++ b/docs/epy/googleapiclient.discovery.ResourceMethodParameters-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class ResourceMethodParameters</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.discovery-pysrc.html#ResourceMethodParameters">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_4" name="uml_class_diagram_for_googleap_4">
+<center>  <map id="uml_class_diagram_for_googleap_5" name="uml_class_diagram_for_googleap_5">
 <area shape="rect" id="node1_2" href="googleapiclient.discovery.ResourceMethodParameters-class.html#__init__" title="Constructor for ResourceMethodParameters." alt="" coords="18,36,233,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.discovery.ResourceMethodParameters-class.html#set_parameters" title="Populates maps and lists based on method description." alt="" coords="18,55,233,73"/>
 <area shape="rect" id="node1" href="googleapiclient.discovery.ResourceMethodParameters-class.html" title="Represents the parameters associated with a method." alt="" coords="5,5,244,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_4.gif" alt='' usemap="#uml_class_diagram_for_googleap_4" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_5.gif" alt='' usemap="#uml_class_diagram_for_googleap_5" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -300,7 +300,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery._BytesGenerator-class.html b/docs/epy/googleapiclient.discovery._BytesGenerator-class.html
index bf77dcb..25b9d2c 100644
--- a/docs/epy/googleapiclient.discovery._BytesGenerator-class.html
+++ b/docs/epy/googleapiclient.discovery._BytesGenerator-class.html
@@ -58,10 +58,10 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class _BytesGenerator</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.discovery-pysrc.html#_BytesGenerator">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_5" name="uml_class_diagram_for_googleap_5">
+<center>  <map id="uml_class_diagram_for_googleap_6" name="uml_class_diagram_for_googleap_6">
 <area shape="rect" id="node1" href="googleapiclient.discovery._BytesGenerator-class.html" title="googleapiclient.discovery._BytesGenerator" alt="" coords="5,5,129,48"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_5.gif" alt='' usemap="#uml_class_diagram_for_googleap_5" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_6.gif" alt='' usemap="#uml_class_diagram_for_googleap_6" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -116,7 +116,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache-module.html b/docs/epy/googleapiclient.discovery_cache-module.html
index 6fb3de4..9f900dc 100644
--- a/docs/epy/googleapiclient.discovery_cache-module.html
+++ b/docs/epy/googleapiclient.discovery_cache-module.html
@@ -143,6 +143,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
+        <a name="LOGGER"></a><span class="summary-name">LOGGER</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
         <a name="DISCOVERY_DOC_MAX_AGE"></a><span class="summary-name">DISCOVERY_DOC_MAX_AGE</span> = <code title="60* 60* 24">60* 60* 24</code>
     </td>
   </tr>
@@ -218,7 +225,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache-pysrc.html b/docs/epy/googleapiclient.discovery_cache-pysrc.html
index 81ee6ce..c5ab02e 100644
--- a/docs/epy/googleapiclient.discovery_cache-pysrc.html
+++ b/docs/epy/googleapiclient.discovery_cache-pysrc.html
@@ -77,30 +77,41 @@
 <a name="L19"></a><tt class="py-lineno">19</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
 <a name="L20"></a><tt class="py-lineno">20</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">datetime</tt> </tt>
 <a name="L21"></a><tt class="py-lineno">21</tt>  <tt class="py-line"> </tt>
-<a name="L22"></a><tt class="py-lineno">22</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE=googleapiclient.discovery_cache-module.html#DISCOVERY_DOC_MAX_AGE"><a title="googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE" class="py-name" href="#" onclick="return doclink('link-0', 'DISCOVERY_DOC_MAX_AGE', 'link-0');">DISCOVERY_DOC_MAX_AGE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">60</tt> <tt class="py-op">*</tt> <tt class="py-number">60</tt> <tt class="py-op">*</tt> <tt class="py-number">24</tt>  <tt class="py-comment"># 1 day</tt> </tt>
-<a name="L23"></a><tt class="py-lineno">23</tt>  <tt class="py-line"> </tt>
+<a name="L22"></a><tt class="py-lineno">22</tt>  <tt class="py-line"> </tt>
+<a name="L23"></a><tt class="py-lineno">23</tt>  <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable googleapiclient.discovery_cache.LOGGER=googleapiclient.discovery_cache-module.html#LOGGER,Variable googleapiclient.discovery_cache.appengine_memcache.LOGGER=googleapiclient.discovery_cache.appengine_memcache-module.html#LOGGER,Variable googleapiclient.discovery_cache.file_cache.LOGGER=googleapiclient.discovery_cache.file_cache-module.html#LOGGER,Variable googleapiclient.http.LOGGER=googleapiclient.http-module.html#LOGGER,Variable googleapiclient.model.LOGGER=googleapiclient.model-module.html#LOGGER"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-0', 'LOGGER', 'link-0');">LOGGER</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
 <a name="L24"></a><tt class="py-lineno">24</tt>  <tt class="py-line"> </tt>
-<a name="autodetect"></a><div id="autodetect-def"><a name="L25"></a><tt class="py-lineno">25</tt> <a class="py-toggle" href="#" id="autodetect-toggle" onclick="return toggle('autodetect');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache-module.html#autodetect">autodetect</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="autodetect-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="autodetect-expanded"><a name="L26"></a><tt class="py-lineno">26</tt>  <tt class="py-line">  <tt class="py-docstring">"""Detects an appropriate cache module and returns it.</tt> </tt>
-<a name="L27"></a><tt class="py-lineno">27</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L28"></a><tt class="py-lineno">28</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L29"></a><tt class="py-lineno">29</tt>  <tt class="py-line"><tt class="py-docstring">    googleapiclient.discovery_cache.base.Cache, a cache object which</tt> </tt>
-<a name="L30"></a><tt class="py-lineno">30</tt>  <tt class="py-line"><tt class="py-docstring">    is auto detected, or None if no cache object is available.</tt> </tt>
-<a name="L31"></a><tt class="py-lineno">31</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L32"></a><tt class="py-lineno">32</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L33"></a><tt class="py-lineno">33</tt>  <tt class="py-line">    <tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt class="py-name">appengine</tt><tt class="py-op">.</tt><tt class="py-name">api</tt> <tt class="py-keyword">import</tt> <tt class="py-name">memcache</tt> </tt>
-<a name="L34"></a><tt class="py-lineno">34</tt>  <tt class="py-line">    <tt class="py-keyword">from</tt> <tt class="py-op">.</tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Module googleapiclient.discovery_cache.appengine_memcache=googleapiclient.discovery_cache.appengine_memcache-module.html"><a title="googleapiclient.discovery_cache.appengine_memcache" class="py-name" href="#" onclick="return doclink('link-1', 'appengine_memcache', 'link-1');">appengine_memcache</a></tt> </tt>
-<a name="L35"></a><tt class="py-lineno">35</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-2" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache" class="py-name" href="#" onclick="return doclink('link-2', 'appengine_memcache', 'link-1');">appengine_memcache</a></tt><tt class="py-op">.</tt><tt id="link-3" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.cache=googleapiclient.discovery_cache.appengine_memcache-module.html#cache,Variable googleapiclient.discovery_cache.file_cache.cache=googleapiclient.discovery_cache.file_cache-module.html#cache"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-3', 'cache', 'link-3');">cache</a></tt> </tt>
-<a name="L36"></a><tt class="py-lineno">36</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
-<a name="L37"></a><tt class="py-lineno">37</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L38"></a><tt class="py-lineno">38</tt>  <tt class="py-line">      <tt class="py-keyword">from</tt> <tt class="py-op">.</tt> <tt class="py-keyword">import</tt> <tt id="link-4" class="py-name" targets="Module googleapiclient.discovery_cache.file_cache=googleapiclient.discovery_cache.file_cache-module.html"><a title="googleapiclient.discovery_cache.file_cache" class="py-name" href="#" onclick="return doclink('link-4', 'file_cache', 'link-4');">file_cache</a></tt> </tt>
-<a name="L39"></a><tt class="py-lineno">39</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-5" class="py-name"><a title="googleapiclient.discovery_cache.file_cache" class="py-name" href="#" onclick="return doclink('link-5', 'file_cache', 'link-4');">file_cache</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-6', 'cache', 'link-3');">cache</a></tt> </tt>
-<a name="L40"></a><tt class="py-lineno">40</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L41"></a><tt class="py-lineno">41</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L42"></a><tt class="py-lineno">42</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-</div><a name="L43"></a><tt class="py-lineno">43</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+<a name="L25"></a><tt class="py-lineno">25</tt>  <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE=googleapiclient.discovery_cache-module.html#DISCOVERY_DOC_MAX_AGE"><a title="googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE" class="py-name" href="#" onclick="return doclink('link-1', 'DISCOVERY_DOC_MAX_AGE', 'link-1');">DISCOVERY_DOC_MAX_AGE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">60</tt> <tt class="py-op">*</tt> <tt class="py-number">60</tt> <tt class="py-op">*</tt> <tt class="py-number">24</tt>  <tt class="py-comment"># 1 day</tt> </tt>
+<a name="L26"></a><tt class="py-lineno">26</tt>  <tt class="py-line"> </tt>
+<a name="L27"></a><tt class="py-lineno">27</tt>  <tt class="py-line"> </tt>
+<a name="autodetect"></a><div id="autodetect-def"><a name="L28"></a><tt class="py-lineno">28</tt> <a class="py-toggle" href="#" id="autodetect-toggle" onclick="return toggle('autodetect');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache-module.html#autodetect">autodetect</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="autodetect-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="autodetect-expanded"><a name="L29"></a><tt class="py-lineno">29</tt>  <tt class="py-line">  <tt class="py-docstring">"""Detects an appropriate cache module and returns it.</tt> </tt>
+<a name="L30"></a><tt class="py-lineno">30</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L31"></a><tt class="py-lineno">31</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L32"></a><tt class="py-lineno">32</tt>  <tt class="py-line"><tt class="py-docstring">    googleapiclient.discovery_cache.base.Cache, a cache object which</tt> </tt>
+<a name="L33"></a><tt class="py-lineno">33</tt>  <tt class="py-line"><tt class="py-docstring">    is auto detected, or None if no cache object is available.</tt> </tt>
+<a name="L34"></a><tt class="py-lineno">34</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L35"></a><tt class="py-lineno">35</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L36"></a><tt class="py-lineno">36</tt>  <tt class="py-line">    <tt class="py-keyword">from</tt> <tt class="py-name">google</tt><tt class="py-op">.</tt><tt class="py-name">appengine</tt><tt class="py-op">.</tt><tt class="py-name">api</tt> <tt class="py-keyword">import</tt> <tt class="py-name">memcache</tt> </tt>
+<a name="L37"></a><tt class="py-lineno">37</tt>  <tt class="py-line">    <tt class="py-keyword">from</tt> <tt class="py-op">.</tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Module googleapiclient.discovery_cache.appengine_memcache=googleapiclient.discovery_cache.appengine_memcache-module.html"><a title="googleapiclient.discovery_cache.appengine_memcache" class="py-name" href="#" onclick="return doclink('link-2', 'appengine_memcache', 'link-2');">appengine_memcache</a></tt> </tt>
+<a name="L38"></a><tt class="py-lineno">38</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-3" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache" class="py-name" href="#" onclick="return doclink('link-3', 'appengine_memcache', 'link-2');">appengine_memcache</a></tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.cache=googleapiclient.discovery_cache.appengine_memcache-module.html#cache,Variable googleapiclient.discovery_cache.file_cache.cache=googleapiclient.discovery_cache.file_cache-module.html#cache"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-4', 'cache', 'link-4');">cache</a></tt> </tt>
+<a name="L39"></a><tt class="py-lineno">39</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L40"></a><tt class="py-lineno">40</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L41"></a><tt class="py-lineno">41</tt>  <tt class="py-line">      <tt class="py-keyword">from</tt> <tt class="py-op">.</tt> <tt class="py-keyword">import</tt> <tt id="link-5" class="py-name" targets="Module googleapiclient.discovery_cache.file_cache=googleapiclient.discovery_cache.file_cache-module.html"><a title="googleapiclient.discovery_cache.file_cache" class="py-name" href="#" onclick="return doclink('link-5', 'file_cache', 'link-5');">file_cache</a></tt> </tt>
+<a name="L42"></a><tt class="py-lineno">42</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-6" class="py-name"><a title="googleapiclient.discovery_cache.file_cache" class="py-name" href="#" onclick="return doclink('link-6', 'file_cache', 'link-5');">file_cache</a></tt><tt class="py-op">.</tt><tt id="link-7" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-7', 'cache', 'link-4');">cache</a></tt> </tt>
+<a name="L43"></a><tt class="py-lineno">43</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L44"></a><tt class="py-lineno">44</tt>  <tt class="py-line">      <tt id="link-8" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-8', 'LOGGER', 'link-0');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L45"></a><tt class="py-lineno">45</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L46"></a><tt class="py-lineno">46</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -133,7 +144,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache.appengine_memcache-module.html b/docs/epy/googleapiclient.discovery_cache.appengine_memcache-module.html
index 7d9a475..1c15e02 100644
--- a/docs/epy/googleapiclient.discovery_cache.appengine_memcache-module.html
+++ b/docs/epy/googleapiclient.discovery_cache.appengine_memcache-module.html
@@ -109,6 +109,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
+        <a name="LOGGER"></a><span class="summary-name">LOGGER</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
         <a name="NAMESPACE"></a><span class="summary-name">NAMESPACE</span> = <code title="'google-api-client'">'google-api-client'</code>
     </td>
   </tr>
@@ -146,7 +153,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache.appengine_memcache-pysrc.html b/docs/epy/googleapiclient.discovery_cache.appengine_memcache-pysrc.html
index c957d5b..41d0926 100644
--- a/docs/epy/googleapiclient.discovery_cache.appengine_memcache-pysrc.html
+++ b/docs/epy/googleapiclient.discovery_cache.appengine_memcache-pysrc.html
@@ -82,42 +82,57 @@
 <a name="L23"></a><tt class="py-lineno">23</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-op">.</tt> <tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module googleapiclient.discovery_cache.base=googleapiclient.discovery_cache.base-module.html"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-0', 'base', 'link-0');">base</a></tt> </tt>
 <a name="L24"></a><tt class="py-lineno">24</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-op">.</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package googleapiclient.discovery_cache=googleapiclient.discovery_cache-module.html"><a title="googleapiclient.discovery_cache" class="py-name" href="#" onclick="return doclink('link-1', 'discovery_cache', 'link-1');">discovery_cache</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Variable googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE=googleapiclient.discovery_cache-module.html#DISCOVERY_DOC_MAX_AGE"><a title="googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE" class="py-name" href="#" onclick="return doclink('link-2', 'DISCOVERY_DOC_MAX_AGE', 'link-2');">DISCOVERY_DOC_MAX_AGE</a></tt> </tt>
 <a name="L25"></a><tt class="py-lineno">25</tt>  <tt class="py-line"> </tt>
-<a name="L26"></a><tt class="py-lineno">26</tt>  <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.NAMESPACE=googleapiclient.discovery_cache.appengine_memcache-module.html#NAMESPACE"><a title="googleapiclient.discovery_cache.appengine_memcache.NAMESPACE" class="py-name" href="#" onclick="return doclink('link-3', 'NAMESPACE', 'link-3');">NAMESPACE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'google-api-client'</tt> </tt>
-<a name="L27"></a><tt class="py-lineno">27</tt>  <tt class="py-line"> </tt>
+<a name="L26"></a><tt class="py-lineno">26</tt>  <tt class="py-line"> </tt>
+<a name="L27"></a><tt class="py-lineno">27</tt>  <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable googleapiclient.discovery_cache.LOGGER=googleapiclient.discovery_cache-module.html#LOGGER,Variable googleapiclient.discovery_cache.appengine_memcache.LOGGER=googleapiclient.discovery_cache.appengine_memcache-module.html#LOGGER,Variable googleapiclient.discovery_cache.file_cache.LOGGER=googleapiclient.discovery_cache.file_cache-module.html#LOGGER,Variable googleapiclient.http.LOGGER=googleapiclient.http-module.html#LOGGER,Variable googleapiclient.model.LOGGER=googleapiclient.model-module.html#LOGGER"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-3', 'LOGGER', 'link-3');">LOGGER</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
 <a name="L28"></a><tt class="py-lineno">28</tt>  <tt class="py-line"> </tt>
-<a name="Cache"></a><div id="Cache-def"><a name="L29"></a><tt class="py-lineno">29</tt> <a class="py-toggle" href="#" id="Cache-toggle" onclick="return toggle('Cache');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html">Cache</a><tt class="py-op">(</tt><tt class="py-base-class">base</tt><tt class="py-op">.</tt><tt class="py-base-class">Cache</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Cache-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="Cache-expanded"><a name="L30"></a><tt class="py-lineno">30</tt>  <tt class="py-line">  <tt class="py-docstring">"""A cache with app engine memcache API."""</tt> </tt>
+<a name="L29"></a><tt class="py-lineno">29</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.NAMESPACE=googleapiclient.discovery_cache.appengine_memcache-module.html#NAMESPACE"><a title="googleapiclient.discovery_cache.appengine_memcache.NAMESPACE" class="py-name" href="#" onclick="return doclink('link-4', 'NAMESPACE', 'link-4');">NAMESPACE</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'google-api-client'</tt> </tt>
+<a name="L30"></a><tt class="py-lineno">30</tt>  <tt class="py-line"> </tt>
 <a name="L31"></a><tt class="py-lineno">31</tt>  <tt class="py-line"> </tt>
-<a name="Cache.__init__"></a><div id="Cache.__init__-def"><a name="L32"></a><tt class="py-lineno">32</tt> <a class="py-toggle" href="#" id="Cache.__init__-toggle" onclick="return toggle('Cache.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">max_age</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Cache.__init__-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="Cache.__init__-expanded"><a name="L33"></a><tt class="py-lineno">33</tt>  <tt class="py-line">      <tt class="py-docstring">"""Constructor.</tt> </tt>
-<a name="L34"></a><tt class="py-lineno">34</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L35"></a><tt class="py-lineno">35</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
-<a name="L36"></a><tt class="py-lineno">36</tt>  <tt class="py-line"><tt class="py-docstring">        max_age: Cache expiration in seconds.</tt> </tt>
-<a name="L37"></a><tt class="py-lineno">37</tt>  <tt class="py-line"><tt class="py-docstring">      """</tt> </tt>
-<a name="L38"></a><tt class="py-lineno">38</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt> <tt class="py-op">=</tt> <tt class="py-name">max_age</tt> </tt>
-</div><a name="L39"></a><tt class="py-lineno">39</tt>  <tt class="py-line"> </tt>
-<a name="Cache.get"></a><div id="Cache.get-def"><a name="L40"></a><tt class="py-lineno">40</tt> <a class="py-toggle" href="#" id="Cache.get-toggle" onclick="return toggle('Cache.get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Cache.get-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="Cache.get-expanded"><a name="L41"></a><tt class="py-lineno">41</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L42"></a><tt class="py-lineno">42</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-4" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+<a name="Cache"></a><div id="Cache-def"><a name="L32"></a><tt class="py-lineno">32</tt> <a class="py-toggle" href="#" id="Cache-toggle" onclick="return toggle('Cache');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html">Cache</a><tt class="py-op">(</tt><tt class="py-base-class">base</tt><tt class="py-op">.</tt><tt class="py-base-class">Cache</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Cache-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="Cache-expanded"><a name="L33"></a><tt class="py-lineno">33</tt>  <tt class="py-line">  <tt class="py-docstring">"""A cache with app engine memcache API."""</tt> </tt>
+<a name="L34"></a><tt class="py-lineno">34</tt>  <tt class="py-line"> </tt>
+<a name="Cache.__init__"></a><div id="Cache.__init__-def"><a name="L35"></a><tt class="py-lineno">35</tt> <a class="py-toggle" href="#" id="Cache.__init__-toggle" onclick="return toggle('Cache.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">max_age</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Cache.__init__-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="Cache.__init__-expanded"><a name="L36"></a><tt class="py-lineno">36</tt>  <tt class="py-line">      <tt class="py-docstring">"""Constructor.</tt> </tt>
+<a name="L37"></a><tt class="py-lineno">37</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L38"></a><tt class="py-lineno">38</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
+<a name="L39"></a><tt class="py-lineno">39</tt>  <tt class="py-line"><tt class="py-docstring">        max_age: Cache expiration in seconds.</tt> </tt>
+<a name="L40"></a><tt class="py-lineno">40</tt>  <tt class="py-line"><tt class="py-docstring">      """</tt> </tt>
+<a name="L41"></a><tt class="py-lineno">41</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt> <tt class="py-op">=</tt> <tt class="py-name">max_age</tt> </tt>
+</div><a name="L42"></a><tt class="py-lineno">42</tt>  <tt class="py-line"> </tt>
+<a name="Cache.get"></a><div id="Cache.get-def"><a name="L43"></a><tt class="py-lineno">43</tt> <a class="py-toggle" href="#" id="Cache.get-toggle" onclick="return toggle('Cache.get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Cache.get-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="Cache.get-expanded"><a name="L44"></a><tt class="py-lineno">44</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L45"></a><tt class="py-lineno">45</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-5" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-4', 'get', 'link-4');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-5" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.NAMESPACE" class="py-name" href="#" onclick="return doclink('link-5', 'NAMESPACE', 'link-3');">NAMESPACE</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L43"></a><tt class="py-lineno">43</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L44"></a><tt class="py-lineno">44</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L45"></a><tt class="py-lineno">45</tt>  <tt class="py-line"> </tt>
-<a name="Cache.set"></a><div id="Cache.set-def"><a name="L46"></a><tt class="py-lineno">46</tt> <a class="py-toggle" href="#" id="Cache.set-toggle" onclick="return toggle('Cache.set');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#set">set</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Cache.set-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="Cache.set-expanded"><a name="L47"></a><tt class="py-lineno">47</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L48"></a><tt class="py-lineno">48</tt>  <tt class="py-line">      <tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-6" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.set()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#set,Method googleapiclient.discovery_cache.base.Cache.set()=googleapiclient.discovery_cache.base.Cache-class.html#set,Method googleapiclient.discovery_cache.file_cache.Cache.set()=googleapiclient.discovery_cache.file_cache.Cache-class.html#set"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.set
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-5', 'get', 'link-5');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-6" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.NAMESPACE" class="py-name" href="#" onclick="return doclink('link-6', 'NAMESPACE', 'link-4');">NAMESPACE</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L46"></a><tt class="py-lineno">46</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L47"></a><tt class="py-lineno">47</tt>  <tt class="py-line">      <tt id="link-7" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-7', 'LOGGER', 'link-3');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L48"></a><tt class="py-lineno">48</tt>  <tt class="py-line"> </tt>
+<a name="Cache.set"></a><div id="Cache.set-def"><a name="L49"></a><tt class="py-lineno">49</tt> <a class="py-toggle" href="#" id="Cache.set-toggle" onclick="return toggle('Cache.set');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#set">set</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Cache.set-collapsed" style="display:none;" pad="++" indent="++++++"></div><div id="Cache.set-expanded"><a name="L50"></a><tt class="py-lineno">50</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L51"></a><tt class="py-lineno">51</tt>  <tt class="py-line">      <tt class="py-name">memcache</tt><tt class="py-op">.</tt><tt id="link-8" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.set()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#set,Method googleapiclient.discovery_cache.base.Cache.set()=googleapiclient.discovery_cache.base.Cache-class.html#set,Method googleapiclient.discovery_cache.file_cache.Cache.set()=googleapiclient.discovery_cache.file_cache.Cache-class.html#set"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.set
 googleapiclient.discovery_cache.base.Cache.set
-googleapiclient.discovery_cache.file_cache.Cache.set" class="py-name" href="#" onclick="return doclink('link-6', 'set', 'link-6');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">time</tt><tt class="py-op">=</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-7" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.NAMESPACE" class="py-name" href="#" onclick="return doclink('link-7', 'NAMESPACE', 'link-3');">NAMESPACE</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L49"></a><tt class="py-lineno">49</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L50"></a><tt class="py-lineno">50</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L51"></a><tt class="py-lineno">51</tt>  <tt class="py-line"> </tt>
-<a name="L52"></a><tt class="py-lineno">52</tt>  <tt class="py-line"><tt id="link-8" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.cache=googleapiclient.discovery_cache.appengine_memcache-module.html#cache,Variable googleapiclient.discovery_cache.file_cache.cache=googleapiclient.discovery_cache.file_cache-module.html#cache"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-8', 'cache', 'link-8');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-9" class="py-name" targets="Class googleapiclient.discovery_cache.appengine_memcache.Cache=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html,Class googleapiclient.discovery_cache.base.Cache=googleapiclient.discovery_cache.base.Cache-class.html,Class googleapiclient.discovery_cache.file_cache.Cache=googleapiclient.discovery_cache.file_cache.Cache-class.html"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache
+googleapiclient.discovery_cache.file_cache.Cache.set" class="py-name" href="#" onclick="return doclink('link-8', 'set', 'link-8');">set</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">time</tt><tt class="py-op">=</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">namespace</tt><tt class="py-op">=</tt><tt id="link-9" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.NAMESPACE" class="py-name" href="#" onclick="return doclink('link-9', 'NAMESPACE', 'link-4');">NAMESPACE</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L52"></a><tt class="py-lineno">52</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L53"></a><tt class="py-lineno">53</tt>  <tt class="py-line">      <tt id="link-10" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-10', 'LOGGER', 'link-3');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L54"></a><tt class="py-lineno">54</tt>  <tt class="py-line"> </tt>
+<a name="L55"></a><tt class="py-lineno">55</tt>  <tt class="py-line"><tt id="link-11" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.cache=googleapiclient.discovery_cache.appengine_memcache-module.html#cache,Variable googleapiclient.discovery_cache.file_cache.cache=googleapiclient.discovery_cache.file_cache-module.html#cache"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-11', 'cache', 'link-11');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-12" class="py-name" targets="Class googleapiclient.discovery_cache.appengine_memcache.Cache=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html,Class googleapiclient.discovery_cache.base.Cache=googleapiclient.discovery_cache.base.Cache-class.html,Class googleapiclient.discovery_cache.file_cache.Cache=googleapiclient.discovery_cache.file_cache.Cache-class.html"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache
 googleapiclient.discovery_cache.base.Cache
-googleapiclient.discovery_cache.file_cache.Cache" class="py-name" href="#" onclick="return doclink('link-9', 'Cache', 'link-9');">Cache</a></tt><tt class="py-op">(</tt><tt class="py-name">max_age</tt><tt class="py-op">=</tt><tt id="link-10" class="py-name"><a title="googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE" class="py-name" href="#" onclick="return doclink('link-10', 'DISCOVERY_DOC_MAX_AGE', 'link-2');">DISCOVERY_DOC_MAX_AGE</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L53"></a><tt class="py-lineno">53</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+googleapiclient.discovery_cache.file_cache.Cache" class="py-name" href="#" onclick="return doclink('link-12', 'Cache', 'link-12');">Cache</a></tt><tt class="py-op">(</tt><tt class="py-name">max_age</tt><tt class="py-op">=</tt><tt id="link-13" class="py-name"><a title="googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE" class="py-name" href="#" onclick="return doclink('link-13', 'DISCOVERY_DOC_MAX_AGE', 'link-2');">DISCOVERY_DOC_MAX_AGE</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L56"></a><tt class="py-lineno">56</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -150,7 +165,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache.appengine_memcache.Cache-class.html b/docs/epy/googleapiclient.discovery_cache.appengine_memcache.Cache-class.html
index 8517b3c..ef34373 100644
--- a/docs/epy/googleapiclient.discovery_cache.appengine_memcache.Cache-class.html
+++ b/docs/epy/googleapiclient.discovery_cache.appengine_memcache.Cache-class.html
@@ -59,7 +59,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class Cache</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.discovery_cache.appengine_memcache-pysrc.html#Cache">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_6" name="uml_class_diagram_for_googleap_6">
+<center>  <map id="uml_class_diagram_for_googleap_7" name="uml_class_diagram_for_googleap_7">
 <area shape="rect" id="node1_4" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#__init__" title="Constructor." alt="" coords="18,111,161,129"/>
 <area shape="rect" id="node1_5" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get" title="Gets the content from the memcache with a given key." alt="" coords="18,129,161,148"/>
 <area shape="rect" id="node1_6" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#set" title="Sets the given key and content in the cache." alt="" coords="18,148,161,167"/>
@@ -67,7 +67,7 @@
 <area shape="rect" id="node2_7" href="googleapiclient.discovery_cache.base.Cache-class.html#__metaclass__" title="googleapiclient.discovery_cache.base.Cache.__metaclass__" alt="" coords="42,28,137,47"/>
 <area shape="rect" id="node2" href="googleapiclient.discovery_cache.base.Cache-class.html" title="A base abstract cache class." alt="" coords="29,5,148,61"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_6.gif" alt='' usemap="#uml_class_diagram_for_googleap_6" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_7.gif" alt='' usemap="#uml_class_diagram_for_googleap_7" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -358,7 +358,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache.base-module.html b/docs/epy/googleapiclient.discovery_cache.base-module.html
index c21c81c..7bc8d84 100644
--- a/docs/epy/googleapiclient.discovery_cache.base-module.html
+++ b/docs/epy/googleapiclient.discovery_cache.base-module.html
@@ -114,7 +114,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache.base-pysrc.html b/docs/epy/googleapiclient.discovery_cache.base-pysrc.html
index 0fad689..07c5f39 100644
--- a/docs/epy/googleapiclient.discovery_cache.base-pysrc.html
+++ b/docs/epy/googleapiclient.discovery_cache.base-pysrc.html
@@ -135,7 +135,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache.base.Cache-class.html b/docs/epy/googleapiclient.discovery_cache.base.Cache-class.html
index 3b7c3e3..f2df99f 100644
--- a/docs/epy/googleapiclient.discovery_cache.base.Cache-class.html
+++ b/docs/epy/googleapiclient.discovery_cache.base.Cache-class.html
@@ -59,13 +59,13 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class Cache</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.discovery_cache.base-pysrc.html#Cache">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_7" name="uml_class_diagram_for_googleap_7">
+<center>  <map id="uml_class_diagram_for_googleap_8" name="uml_class_diagram_for_googleap_8">
 <area shape="rect" id="node1_3" href="googleapiclient.discovery_cache.base.Cache-class.html#__metaclass__" title="googleapiclient.discovery_cache.base.Cache.__metaclass__" alt="" coords="17,28,143,47"/>
 <area shape="rect" id="node1_4" href="googleapiclient.discovery_cache.base.Cache-class.html#get" title="Gets the content from the memcache with a given key." alt="" coords="17,49,143,68"/>
 <area shape="rect" id="node1_5" href="googleapiclient.discovery_cache.base.Cache-class.html#set" title="Sets the given key and content in the cache." alt="" coords="17,68,143,87"/>
 <area shape="rect" id="node1" href="googleapiclient.discovery_cache.base.Cache-class.html" title="A base abstract cache class." alt="" coords="5,5,155,93"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_7.gif" alt='' usemap="#uml_class_diagram_for_googleap_7" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_8.gif" alt='' usemap="#uml_class_diagram_for_googleap_8" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -309,7 +309,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache.file_cache-module.html b/docs/epy/googleapiclient.discovery_cache.file_cache-module.html
index 64ce0c6..46ea240 100644
--- a/docs/epy/googleapiclient.discovery_cache.file_cache-module.html
+++ b/docs/epy/googleapiclient.discovery_cache.file_cache-module.html
@@ -164,7 +164,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a name="logger"></a><span class="summary-name">logger</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
+        <a name="LOGGER"></a><span class="summary-name">LOGGER</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
     </td>
   </tr>
 <tr>
@@ -215,7 +215,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache.file_cache-pysrc.html b/docs/epy/googleapiclient.discovery_cache.file_cache-pysrc.html
index d0aedf6..8525214 100644
--- a/docs/epy/googleapiclient.discovery_cache.file_cache-pysrc.html
+++ b/docs/epy/googleapiclient.discovery_cache.file_cache-pysrc.html
@@ -88,134 +88,157 @@
 <a name="L29"></a><tt class="py-lineno"> 29</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">tempfile</tt> </tt>
 <a name="L30"></a><tt class="py-lineno"> 30</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">threading</tt> </tt>
 <a name="L31"></a><tt class="py-lineno"> 31</tt>  <tt class="py-line"> </tt>
-<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">oauth2client</tt><tt class="py-op">.</tt><tt class="py-name">contrib</tt><tt class="py-op">.</tt><tt class="py-name">locked_file</tt> <tt class="py-keyword">import</tt> <tt class="py-name">LockedFile</tt> </tt>
-<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-op">.</tt> <tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module googleapiclient.discovery_cache.base=googleapiclient.discovery_cache.base-module.html"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-0', 'base', 'link-0');">base</a></tt> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-op">.</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package googleapiclient.discovery_cache=googleapiclient.discovery_cache-module.html"><a title="googleapiclient.discovery_cache" class="py-name" href="#" onclick="return doclink('link-1', 'discovery_cache', 'link-1');">discovery_cache</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Variable googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE=googleapiclient.discovery_cache-module.html#DISCOVERY_DOC_MAX_AGE"><a title="googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE" class="py-name" href="#" onclick="return doclink('link-2', 'DISCOVERY_DOC_MAX_AGE', 'link-2');">DISCOVERY_DOC_MAX_AGE</a></tt> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable googleapiclient.discovery.logger=googleapiclient.discovery-module.html#logger,Variable googleapiclient.discovery_cache.file_cache.logger=googleapiclient.discovery_cache.file_cache-module.html#logger"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-3', 'logger', 'link-3');">logger</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable googleapiclient.discovery_cache.file_cache.FILENAME=googleapiclient.discovery_cache.file_cache-module.html#FILENAME"><a title="googleapiclient.discovery_cache.file_cache.FILENAME" class="py-name" href="#" onclick="return doclink('link-4', 'FILENAME', 'link-4');">FILENAME</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'google-api-python-client-discovery-doc.cache'</tt> </tt>
-<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable googleapiclient.channel.EPOCH=googleapiclient.channel-module.html#EPOCH,Variable googleapiclient.discovery_cache.file_cache.EPOCH=googleapiclient.discovery_cache.file_cache-module.html#EPOCH"><a title="googleapiclient.channel.EPOCH
-googleapiclient.discovery_cache.file_cache.EPOCH" class="py-name" href="#" onclick="return doclink('link-5', 'EPOCH', 'link-5');">EPOCH</a></tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">utcfromtimestamp</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"> </tt>
+<a name="L32"></a><tt class="py-lineno"> 32</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">oauth2client</tt><tt class="py-op">.</tt><tt class="py-name">contrib</tt><tt class="py-op">.</tt><tt class="py-name">locked_file</tt> <tt class="py-keyword">import</tt> <tt class="py-name">LockedFile</tt> </tt>
+<a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line">  <tt class="py-comment"># oauth2client &lt; 2.0.0</tt> </tt>
+<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line">  <tt class="py-keyword">from</tt> <tt class="py-name">oauth2client</tt><tt class="py-op">.</tt><tt class="py-name">locked_file</tt> <tt class="py-keyword">import</tt> <tt class="py-name">LockedFile</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-op">.</tt> <tt class="py-keyword">import</tt> <tt id="link-0" class="py-name" targets="Module googleapiclient.discovery_cache.base=googleapiclient.discovery_cache.base-module.html"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-0', 'base', 'link-0');">base</a></tt> </tt>
+<a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-op">.</tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Package googleapiclient.discovery_cache=googleapiclient.discovery_cache-module.html"><a title="googleapiclient.discovery_cache" class="py-name" href="#" onclick="return doclink('link-1', 'discovery_cache', 'link-1');">discovery_cache</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Variable googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE=googleapiclient.discovery_cache-module.html#DISCOVERY_DOC_MAX_AGE"><a title="googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE" class="py-name" href="#" onclick="return doclink('link-2', 'DISCOVERY_DOC_MAX_AGE', 'link-2');">DISCOVERY_DOC_MAX_AGE</a></tt> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable googleapiclient.discovery_cache.LOGGER=googleapiclient.discovery_cache-module.html#LOGGER,Variable googleapiclient.discovery_cache.appengine_memcache.LOGGER=googleapiclient.discovery_cache.appengine_memcache-module.html#LOGGER,Variable googleapiclient.discovery_cache.file_cache.LOGGER=googleapiclient.discovery_cache.file_cache-module.html#LOGGER,Variable googleapiclient.http.LOGGER=googleapiclient.http-module.html#LOGGER,Variable googleapiclient.model.LOGGER=googleapiclient.model-module.html#LOGGER"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-3', 'LOGGER', 'link-3');">LOGGER</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
 <a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"> </tt>
-<a name="_to_timestamp"></a><div id="_to_timestamp-def"><a name="L43"></a><tt class="py-lineno"> 43</tt> <a class="py-toggle" href="#" id="_to_timestamp-toggle" onclick="return toggle('_to_timestamp');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache-module.html#_to_timestamp">_to_timestamp</a><tt class="py-op">(</tt><tt class="py-param">date</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_to_timestamp-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_to_timestamp-expanded"><a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">date</tt> <tt class="py-op">-</tt> <tt id="link-6" class="py-name"><a title="googleapiclient.channel.EPOCH
+<a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable googleapiclient.discovery_cache.file_cache.FILENAME=googleapiclient.discovery_cache.file_cache-module.html#FILENAME"><a title="googleapiclient.discovery_cache.file_cache.FILENAME" class="py-name" href="#" onclick="return doclink('link-4', 'FILENAME', 'link-4');">FILENAME</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'google-api-python-client-discovery-doc.cache'</tt> </tt>
+<a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable googleapiclient.channel.EPOCH=googleapiclient.channel-module.html#EPOCH,Variable googleapiclient.discovery_cache.file_cache.EPOCH=googleapiclient.discovery_cache.file_cache-module.html#EPOCH"><a title="googleapiclient.channel.EPOCH
+googleapiclient.discovery_cache.file_cache.EPOCH" class="py-name" href="#" onclick="return doclink('link-5', 'EPOCH', 'link-5');">EPOCH</a></tt> <tt class="py-op">=</tt> <tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">utcfromtimestamp</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"> </tt>
+<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"> </tt>
+<a name="_to_timestamp"></a><div id="_to_timestamp-def"><a name="L47"></a><tt class="py-lineno"> 47</tt> <a class="py-toggle" href="#" id="_to_timestamp-toggle" onclick="return toggle('_to_timestamp');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache-module.html#_to_timestamp">_to_timestamp</a><tt class="py-op">(</tt><tt class="py-param">date</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_to_timestamp-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_to_timestamp-expanded"><a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">date</tt> <tt class="py-op">-</tt> <tt id="link-6" class="py-name"><a title="googleapiclient.channel.EPOCH
 googleapiclient.discovery_cache.file_cache.EPOCH" class="py-name" href="#" onclick="return doclink('link-6', 'EPOCH', 'link-5');">EPOCH</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">total_seconds</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line">    <tt class="py-comment"># The following is the equivalent of total_seconds() in Python2.6.</tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line">    <tt class="py-comment"># See also: https://docs.python.org/2/library/datetime.html</tt> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line">    <tt class="py-name">delta</tt> <tt class="py-op">=</tt> <tt class="py-name">date</tt> <tt class="py-op">-</tt> <tt id="link-7" class="py-name"><a title="googleapiclient.channel.EPOCH
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line">    <tt class="py-comment"># The following is the equivalent of total_seconds() in Python2.6.</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line">    <tt class="py-comment"># See also: https://docs.python.org/2/library/datetime.html</tt> </tt>
+<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line">    <tt class="py-name">delta</tt> <tt class="py-op">=</tt> <tt class="py-name">date</tt> <tt class="py-op">-</tt> <tt id="link-7" class="py-name"><a title="googleapiclient.channel.EPOCH
 googleapiclient.discovery_cache.file_cache.EPOCH" class="py-name" href="#" onclick="return doclink('link-7', 'EPOCH', 'link-5');">EPOCH</a></tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">delta</tt><tt class="py-op">.</tt><tt class="py-name">microseconds</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">delta</tt><tt class="py-op">.</tt><tt class="py-name">seconds</tt> <tt class="py-op">+</tt> <tt class="py-name">delta</tt><tt class="py-op">.</tt><tt class="py-name">days</tt> <tt class="py-op">*</tt> <tt class="py-number">24</tt> <tt class="py-op">*</tt> <tt class="py-number">3600</tt><tt class="py-op">)</tt> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line">             <tt class="py-op">*</tt> <tt class="py-number">10</tt><tt class="py-op">**</tt><tt class="py-number">6</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-number">10</tt><tt class="py-op">**</tt><tt class="py-number">6</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"> </tt>
-<a name="_read_or_initialize_cache"></a><div id="_read_or_initialize_cache-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="_read_or_initialize_cache-toggle" onclick="return toggle('_read_or_initialize_cache');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache-module.html#_read_or_initialize_cache">_read_or_initialize_cache</a><tt class="py-op">(</tt><tt class="py-param">f</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_read_or_initialize_cache-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_read_or_initialize_cache-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line">  <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line">    <tt id="link-8" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.cache=googleapiclient.discovery_cache.appengine_memcache-module.html#cache,Variable googleapiclient.discovery_cache.file_cache.cache=googleapiclient.discovery_cache.file_cache-module.html#cache"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">delta</tt><tt class="py-op">.</tt><tt class="py-name">microseconds</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">delta</tt><tt class="py-op">.</tt><tt class="py-name">seconds</tt> <tt class="py-op">+</tt> <tt class="py-name">delta</tt><tt class="py-op">.</tt><tt class="py-name">days</tt> <tt class="py-op">*</tt> <tt class="py-number">24</tt> <tt class="py-op">*</tt> <tt class="py-number">3600</tt><tt class="py-op">)</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line">             <tt class="py-op">*</tt> <tt class="py-number">10</tt><tt class="py-op">**</tt><tt class="py-number">6</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-number">10</tt><tt class="py-op">**</tt><tt class="py-number">6</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"> </tt>
+<a name="_read_or_initialize_cache"></a><div id="_read_or_initialize_cache-def"><a name="L58"></a><tt class="py-lineno"> 58</tt> <a class="py-toggle" href="#" id="_read_or_initialize_cache-toggle" onclick="return toggle('_read_or_initialize_cache');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache-module.html#_read_or_initialize_cache">_read_or_initialize_cache</a><tt class="py-op">(</tt><tt class="py-param">f</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_read_or_initialize_cache-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_read_or_initialize_cache-expanded"><a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line">  <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line">  <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line">    <tt id="link-8" class="py-name" targets="Variable googleapiclient.discovery_cache.appengine_memcache.cache=googleapiclient.discovery_cache.appengine_memcache-module.html#cache,Variable googleapiclient.discovery_cache.file_cache.cache=googleapiclient.discovery_cache.file_cache-module.html#cache"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
 googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-8', 'cache', 'link-8');">cache</a></tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">load</tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line">    <tt class="py-comment"># This means it opens the file for the first time, or the cache is</tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line">    <tt class="py-comment"># corrupted, so initializing the file with an empty dict.</tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line">    <tt id="link-9" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line">  <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line">    <tt class="py-comment"># This means it opens the file for the first time, or the cache is</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line">    <tt class="py-comment"># corrupted, so initializing the file with an empty dict.</tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line">    <tt id="link-9" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
 googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-9', 'cache', 'link-8');">cache</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line">    <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">truncate</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line">    <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line">    <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dump</tt><tt class="py-op">(</tt><tt id="link-10" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line">    <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">truncate</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line">    <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line">    <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dump</tt><tt class="py-op">(</tt><tt id="link-10" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
 googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-10', 'cache', 'link-8');">cache</a></tt><tt class="py-op">,</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-11" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-11" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
 googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-11', 'cache', 'link-8');">cache</a></tt> </tt>
-</div><a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"> </tt>
-<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"> </tt>
-<a name="Cache"></a><div id="Cache-def"><a name="L68"></a><tt class="py-lineno"> 68</tt> <a class="py-toggle" href="#" id="Cache-toggle" onclick="return toggle('Cache');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache.Cache-class.html">Cache</a><tt class="py-op">(</tt><tt class="py-base-class">base</tt><tt class="py-op">.</tt><tt class="py-base-class">Cache</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Cache-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Cache-expanded"><a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line">  <tt class="py-docstring">"""A file based cache for the discovery documents."""</tt> </tt>
-<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"> </tt>
-<a name="Cache.__init__"></a><div id="Cache.__init__-def"><a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="Cache.__init__-toggle" onclick="return toggle('Cache.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache.Cache-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">max_age</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Cache.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Cache.__init__-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line">      <tt class="py-docstring">"""Constructor.</tt> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"><tt class="py-docstring">        max_age: Cache expiration in seconds.</tt> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"><tt class="py-docstring">      """</tt> </tt>
-<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt> <tt class="py-op">=</tt> <tt class="py-name">max_age</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_file</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tempfile</tt><tt class="py-op">.</tt><tt class="py-name">gettempdir</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-12" class="py-name"><a title="googleapiclient.discovery_cache.file_cache.FILENAME" class="py-name" href="#" onclick="return doclink('link-12', 'FILENAME', 'link-4');">FILENAME</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line">      <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">LockedFile</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_file</tt><tt class="py-op">,</tt> <tt class="py-string">'a+'</tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">open_and_lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">is_locked</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">          <tt id="link-13" class="py-name" targets="Function googleapiclient.discovery_cache.file_cache._read_or_initialize_cache()=googleapiclient.discovery_cache.file_cache-module.html#_read_or_initialize_cache"><a title="googleapiclient.discovery_cache.file_cache._read_or_initialize_cache" class="py-name" href="#" onclick="return doclink('link-13', '_read_or_initialize_cache', 'link-13');">_read_or_initialize_cache</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
-<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line">        <tt class="py-comment"># If we can not obtain the lock, other process or thread must</tt> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">        <tt class="py-comment"># have initialized the file.</tt> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line">        <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">      <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">unlock_and_close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"> </tt>
-<a name="Cache.get"></a><div id="Cache.get-def"><a name="L91"></a><tt class="py-lineno"> 91</tt> <a class="py-toggle" href="#" id="Cache.get-toggle" onclick="return toggle('Cache.get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache.Cache-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Cache.get-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Cache.get-expanded"><a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">    <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">LockedFile</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_file</tt><tt class="py-op">,</tt> <tt class="py-string">'r+'</tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">open_and_lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">is_locked</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line">        <tt id="link-14" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-14', 'cache', 'link-8');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-15" class="py-name"><a title="googleapiclient.discovery_cache.file_cache._read_or_initialize_cache" class="py-name" href="#" onclick="return doclink('link-15', '_read_or_initialize_cache', 'link-13');">_read_or_initialize_cache</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
-<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">url</tt> <tt class="py-keyword">in</tt> <tt id="link-16" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-16', 'cache', 'link-8');">cache</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line">          <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt id="link-17" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-17', 'cache', 'link-8');">cache</a></tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+</div><a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line"> </tt>
+<a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"> </tt>
+<a name="Cache"></a><div id="Cache-def"><a name="L72"></a><tt class="py-lineno"> 72</tt> <a class="py-toggle" href="#" id="Cache-toggle" onclick="return toggle('Cache');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache.Cache-class.html">Cache</a><tt class="py-op">(</tt><tt class="py-base-class">base</tt><tt class="py-op">.</tt><tt class="py-base-class">Cache</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Cache-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Cache-expanded"><a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line">  <tt class="py-docstring">"""A file based cache for the discovery documents."""</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"> </tt>
+<a name="Cache.__init__"></a><div id="Cache.__init__-def"><a name="L75"></a><tt class="py-lineno"> 75</tt> <a class="py-toggle" href="#" id="Cache.__init__-toggle" onclick="return toggle('Cache.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache.Cache-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">max_age</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Cache.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Cache.__init__-expanded"><a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line">      <tt class="py-docstring">"""Constructor.</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-docstring">      Args:</tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-docstring">        max_age: Cache expiration in seconds.</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt class="py-docstring">      """</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt> <tt class="py-op">=</tt> <tt class="py-name">max_age</tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_file</tt> <tt class="py-op">=</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tempfile</tt><tt class="py-op">.</tt><tt class="py-name">gettempdir</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-12" class="py-name"><a title="googleapiclient.discovery_cache.file_cache.FILENAME" class="py-name" href="#" onclick="return doclink('link-12', 'FILENAME', 'link-4');">FILENAME</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">      <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">LockedFile</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_file</tt><tt class="py-op">,</tt> <tt class="py-string">'a+'</tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">open_and_lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">is_locked</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line">          <tt id="link-13" class="py-name" targets="Function googleapiclient.discovery_cache.file_cache._read_or_initialize_cache()=googleapiclient.discovery_cache.file_cache-module.html#_read_or_initialize_cache"><a title="googleapiclient.discovery_cache.file_cache._read_or_initialize_cache" class="py-name" href="#" onclick="return doclink('link-13', '_read_or_initialize_cache', 'link-13');">_read_or_initialize_cache</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line">        <tt class="py-comment"># If we can not obtain the lock, other process or thread must</tt> </tt>
+<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line">        <tt class="py-comment"># have initialized the file.</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line">        <tt id="link-14" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-14', 'LOGGER', 'link-3');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line">      <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">unlock_and_close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"> </tt>
+<a name="Cache.get"></a><div id="Cache.get-def"><a name="L95"></a><tt class="py-lineno"> 95</tt> <a class="py-toggle" href="#" id="Cache.get-toggle" onclick="return toggle('Cache.get');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache.Cache-class.html#get">get</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Cache.get-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Cache.get-expanded"><a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line">    <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">LockedFile</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_file</tt><tt class="py-op">,</tt> <tt class="py-string">'r+'</tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">open_and_lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">is_locked</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line">        <tt id="link-15" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-15', 'cache', 'link-8');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-16" class="py-name"><a title="googleapiclient.discovery_cache.file_cache._read_or_initialize_cache" class="py-name" href="#" onclick="return doclink('link-16', '_read_or_initialize_cache', 'link-13');">_read_or_initialize_cache</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">url</tt> <tt class="py-keyword">in</tt> <tt id="link-17" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-17', 'cache', 'link-8');">cache</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">          <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt id="link-18" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-18', 'cache', 'link-8');">cache</a></tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-18', 'get', 'link-18');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt id="link-19" class="py-name" targets="Function googleapiclient.discovery_cache.file_cache._to_timestamp()=googleapiclient.discovery_cache.file_cache-module.html#_to_timestamp"><a title="googleapiclient.discovery_cache.file_cache._to_timestamp" class="py-name" href="#" onclick="return doclink('link-19', '_to_timestamp', 'link-19');">_to_timestamp</a></tt><tt class="py-op">(</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">now</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">t</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt><tt class="py-op">:</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">        <tt id="link-20" class="py-name"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-20', 'logger', 'link-3');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Could not obtain a lock for the cache file.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">      <tt id="link-21" class="py-name"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-21', 'logger', 'link-3');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
-<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">unlock_and_close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line"> </tt>
-<a name="Cache.set"></a><div id="Cache.set-def"><a name="L110"></a><tt class="py-lineno">110</tt> <a class="py-toggle" href="#" id="Cache.set-toggle" onclick="return toggle('Cache.set');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache.Cache-class.html#set">set</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Cache.set-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Cache.set-expanded"><a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">    <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">LockedFile</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_file</tt><tt class="py-op">,</tt> <tt class="py-string">'r+'</tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">open_and_lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">is_locked</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">        <tt id="link-22" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-22', 'cache', 'link-8');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-23" class="py-name"><a title="googleapiclient.discovery_cache.file_cache._read_or_initialize_cache" class="py-name" href="#" onclick="return doclink('link-23', '_read_or_initialize_cache', 'link-13');">_read_or_initialize_cache</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">        <tt id="link-24" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-24', 'cache', 'link-8');">cache</a></tt><tt class="py-op">[</tt><tt class="py-name">url</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt id="link-25" class="py-name"><a title="googleapiclient.discovery_cache.file_cache._to_timestamp" class="py-name" href="#" onclick="return doclink('link-25', '_to_timestamp', 'link-19');">_to_timestamp</a></tt><tt class="py-op">(</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">now</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">        <tt class="py-comment"># Remove stale cache.</tt> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">timestamp</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-26" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-26', 'cache', 'link-8');">cache</a></tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt id="link-27" class="py-name"><a title="googleapiclient.discovery_cache.file_cache._to_timestamp" class="py-name" href="#" onclick="return doclink('link-27', '_to_timestamp', 'link-19');">_to_timestamp</a></tt><tt class="py-op">(</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">now</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">timestamp</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt><tt class="py-op">:</tt> </tt>
-<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">            <tt class="py-keyword">del</tt> <tt id="link-28" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-28', 'cache', 'link-8');">cache</a></tt><tt class="py-op">[</tt><tt class="py-name">k</tt><tt class="py-op">]</tt> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">truncate</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line">        <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dump</tt><tt class="py-op">(</tt><tt id="link-29" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-29', 'cache', 'link-8');">cache</a></tt><tt class="py-op">,</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">        <tt id="link-30" class="py-name"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-30', 'logger', 'link-3');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Could not obtain a lock for the cache file.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">      <tt id="link-31" class="py-name"><a title="googleapiclient.discovery.logger
-googleapiclient.discovery_cache.file_cache.logger" class="py-name" href="#" onclick="return doclink('link-31', 'logger', 'link-3');">logger</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
-<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">unlock_and_close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"> </tt>
-<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line"><tt id="link-32" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
-googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-32', 'cache', 'link-8');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-33" class="py-name" targets="Class googleapiclient.discovery_cache.appengine_memcache.Cache=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html,Class googleapiclient.discovery_cache.base.Cache=googleapiclient.discovery_cache.base.Cache-class.html,Class googleapiclient.discovery_cache.file_cache.Cache=googleapiclient.discovery_cache.file_cache.Cache-class.html"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-19', 'get', 'link-19');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">url</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt id="link-20" class="py-name" targets="Function googleapiclient.discovery_cache.file_cache._to_timestamp()=googleapiclient.discovery_cache.file_cache-module.html#_to_timestamp"><a title="googleapiclient.discovery_cache.file_cache._to_timestamp" class="py-name" href="#" onclick="return doclink('link-20', '_to_timestamp', 'link-20');">_to_timestamp</a></tt><tt class="py-op">(</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">now</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">t</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt><tt class="py-op">:</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">            <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">        <tt id="link-21" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-21', 'LOGGER', 'link-3');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Could not obtain a lock for the cache file.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">      <tt id="link-22" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-22', 'LOGGER', 'link-3');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">unlock_and_close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line"> </tt>
+<a name="Cache.set"></a><div id="Cache.set-def"><a name="L114"></a><tt class="py-lineno">114</tt> <a class="py-toggle" href="#" id="Cache.set-toggle" onclick="return toggle('Cache.set');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.discovery_cache.file_cache.Cache-class.html#set">set</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">url</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Cache.set-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Cache.set-expanded"><a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">    <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">LockedFile</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_file</tt><tt class="py-op">,</tt> <tt class="py-string">'r+'</tt><tt class="py-op">,</tt> <tt class="py-string">'r'</tt><tt class="py-op">)</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">open_and_lock</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">is_locked</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">        <tt id="link-23" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-23', 'cache', 'link-8');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-24" class="py-name"><a title="googleapiclient.discovery_cache.file_cache._read_or_initialize_cache" class="py-name" href="#" onclick="return doclink('link-24', '_read_or_initialize_cache', 'link-13');">_read_or_initialize_cache</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">)</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">        <tt id="link-25" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-25', 'cache', 'link-8');">cache</a></tt><tt class="py-op">[</tt><tt class="py-name">url</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt id="link-26" class="py-name"><a title="googleapiclient.discovery_cache.file_cache._to_timestamp" class="py-name" href="#" onclick="return doclink('link-26', '_to_timestamp', 'link-20');">_to_timestamp</a></tt><tt class="py-op">(</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">now</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line">        <tt class="py-comment"># Remove stale cache.</tt> </tt>
+<a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">k</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">timestamp</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-27" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-27', 'cache', 'link-8');">cache</a></tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line">          <tt class="py-keyword">if</tt> <tt id="link-28" class="py-name"><a title="googleapiclient.discovery_cache.file_cache._to_timestamp" class="py-name" href="#" onclick="return doclink('link-28', '_to_timestamp', 'link-20');">_to_timestamp</a></tt><tt class="py-op">(</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">datetime</tt><tt class="py-op">.</tt><tt class="py-name">now</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">timestamp</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_max_age</tt><tt class="py-op">:</tt> </tt>
+<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">            <tt class="py-keyword">del</tt> <tt id="link-29" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-29', 'cache', 'link-8');">cache</a></tt><tt class="py-op">[</tt><tt class="py-name">k</tt><tt class="py-op">]</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">truncate</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line">        <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line">        <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dump</tt><tt class="py-op">(</tt><tt id="link-30" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-30', 'cache', 'link-8');">cache</a></tt><tt class="py-op">,</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">file_handle</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line">        <tt id="link-31" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-31', 'LOGGER', 'link-3');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Could not obtain a lock for the cache file.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">Exception</tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line">      <tt id="link-32" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-32', 'LOGGER', 'link-3');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-name">e</tt><tt class="py-op">,</tt> <tt class="py-name">exc_info</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line">    <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">unlock_and_close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line"> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt id="link-33" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.cache
+googleapiclient.discovery_cache.file_cache.cache" class="py-name" href="#" onclick="return doclink('link-33', 'cache', 'link-8');">cache</a></tt> <tt class="py-op">=</tt> <tt id="link-34" class="py-name" targets="Class googleapiclient.discovery_cache.appengine_memcache.Cache=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html,Class googleapiclient.discovery_cache.base.Cache=googleapiclient.discovery_cache.base.Cache-class.html,Class googleapiclient.discovery_cache.file_cache.Cache=googleapiclient.discovery_cache.file_cache.Cache-class.html"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache
 googleapiclient.discovery_cache.base.Cache
-googleapiclient.discovery_cache.file_cache.Cache" class="py-name" href="#" onclick="return doclink('link-33', 'Cache', 'link-33');">Cache</a></tt><tt class="py-op">(</tt><tt class="py-name">max_age</tt><tt class="py-op">=</tt><tt id="link-34" class="py-name"><a title="googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE" class="py-name" href="#" onclick="return doclink('link-34', 'DISCOVERY_DOC_MAX_AGE', 'link-2');">DISCOVERY_DOC_MAX_AGE</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+googleapiclient.discovery_cache.file_cache.Cache" class="py-name" href="#" onclick="return doclink('link-34', 'Cache', 'link-34');">Cache</a></tt><tt class="py-op">(</tt><tt class="py-name">max_age</tt><tt class="py-op">=</tt><tt id="link-35" class="py-name"><a title="googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE" class="py-name" href="#" onclick="return doclink('link-35', 'DISCOVERY_DOC_MAX_AGE', 'link-2');">DISCOVERY_DOC_MAX_AGE</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -248,7 +271,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.discovery_cache.file_cache.Cache-class.html b/docs/epy/googleapiclient.discovery_cache.file_cache.Cache-class.html
index d683c7d..9be0dc6 100644
--- a/docs/epy/googleapiclient.discovery_cache.file_cache.Cache-class.html
+++ b/docs/epy/googleapiclient.discovery_cache.file_cache.Cache-class.html
@@ -59,7 +59,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class Cache</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.discovery_cache.file_cache-pysrc.html#Cache">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_8" name="uml_class_diagram_for_googleap_8">
+<center>  <map id="uml_class_diagram_for_googleap_9" name="uml_class_diagram_for_googleap_9">
 <area shape="rect" id="node1_4" href="googleapiclient.discovery_cache.file_cache.Cache-class.html#__init__" title="Constructor." alt="" coords="18,111,161,129"/>
 <area shape="rect" id="node1_5" href="googleapiclient.discovery_cache.file_cache.Cache-class.html#get" title="Gets the content from the memcache with a given key." alt="" coords="18,129,161,148"/>
 <area shape="rect" id="node1_6" href="googleapiclient.discovery_cache.file_cache.Cache-class.html#set" title="Sets the given key and content in the cache." alt="" coords="18,148,161,167"/>
@@ -67,7 +67,7 @@
 <area shape="rect" id="node2_7" href="googleapiclient.discovery_cache.base.Cache-class.html#__metaclass__" title="googleapiclient.discovery_cache.base.Cache.__metaclass__" alt="" coords="42,28,137,47"/>
 <area shape="rect" id="node2" href="googleapiclient.discovery_cache.base.Cache-class.html" title="A base abstract cache class." alt="" coords="29,5,148,61"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_8.gif" alt='' usemap="#uml_class_diagram_for_googleap_8" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_9.gif" alt='' usemap="#uml_class_diagram_for_googleap_9" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -358,7 +358,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors-module.html b/docs/epy/googleapiclient.errors-module.html
index 8cfeab3..c84d724 100644
--- a/docs/epy/googleapiclient.errors-module.html
+++ b/docs/epy/googleapiclient.errors-module.html
@@ -224,7 +224,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors-pysrc.html b/docs/epy/googleapiclient.errors-pysrc.html
index cc1f0f9..861e06b 100644
--- a/docs/epy/googleapiclient.errors-pysrc.html
+++ b/docs/epy/googleapiclient.errors-pysrc.html
@@ -284,7 +284,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:27 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.BatchError-class.html b/docs/epy/googleapiclient.errors.BatchError-class.html
index d71ddff..25d668f 100644
--- a/docs/epy/googleapiclient.errors.BatchError-class.html
+++ b/docs/epy/googleapiclient.errors.BatchError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class BatchError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#BatchError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_9" name="uml_class_diagram_for_googleap_9">
+<center>  <map id="uml_class_diagram_for_googleap_10" name="uml_class_diagram_for_googleap_10">
 <area shape="rect" id="node1_14" href="googleapiclient.errors.BatchError-class.html#__init__" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="17,471,311,489"/>
 <area shape="rect" id="node1_15" href="googleapiclient.errors.BatchError-class.html#__repr__" title="str(x)" alt="" coords="17,489,311,508"/>
 <area shape="rect" id="node1_16" href="googleapiclient.errors.BatchError-class.html#__str__" title="str(x)" alt="" coords="17,508,311,527"/>
@@ -79,7 +79,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="85,199,241,217"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="73,5,253,224"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_9.gif" alt='' usemap="#uml_class_diagram_for_googleap_9" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_10.gif" alt='' usemap="#uml_class_diagram_for_googleap_10" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -349,7 +349,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.Error-class.html b/docs/epy/googleapiclient.errors.Error-class.html
index 6f4e2aa..e6b352e 100644
--- a/docs/epy/googleapiclient.errors.Error-class.html
+++ b/docs/epy/googleapiclient.errors.Error-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class Error</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#Error">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_10" name="uml_class_diagram_for_googleap_10">
+<center>  <map id="uml_class_diagram_for_googleap_11" name="uml_class_diagram_for_googleap_11">
 <area shape="rect" id="node1" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="70,373,123,416"/>
 <area shape="rect" id="node2_14" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="34,311,159,329"/>
 <area shape="rect" id="node2_15" href="javascript:void(0);" title="exceptions.Exception.__new__" alt="" coords="34,329,159,348"/>
@@ -77,7 +77,7 @@
 <area shape="rect" id="node3_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="18,236,174,255"/>
 <area shape="rect" id="node3" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,5,185,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_10.gif" alt='' usemap="#uml_class_diagram_for_googleap_10" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_11.gif" alt='' usemap="#uml_class_diagram_for_googleap_11" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -186,7 +186,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.HttpError-class.html b/docs/epy/googleapiclient.errors.HttpError-class.html
index 1eb775f..847a97d 100644
--- a/docs/epy/googleapiclient.errors.HttpError-class.html
+++ b/docs/epy/googleapiclient.errors.HttpError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class HttpError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#HttpError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_11" name="uml_class_diagram_for_googleap_11">
+<center>  <map id="uml_class_diagram_for_googleap_12" name="uml_class_diagram_for_googleap_12">
 <area shape="rect" id="node1_14" href="googleapiclient.errors.HttpError-class.html#__init__" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="18,409,246,428"/>
 <area shape="rect" id="node1_15" href="googleapiclient.errors.HttpError-class.html#__repr__" title="str(x)" alt="" coords="18,428,246,447"/>
 <area shape="rect" id="node1_16" href="googleapiclient.errors.HttpError-class.html#__str__" title="str(x)" alt="" coords="18,447,246,465"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="54,199,210,217"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="41,5,221,224"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_11.gif" alt='' usemap="#uml_class_diagram_for_googleap_11" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_12.gif" alt='' usemap="#uml_class_diagram_for_googleap_12" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -362,7 +362,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.InvalidChunkSizeError-class.html b/docs/epy/googleapiclient.errors.InvalidChunkSizeError-class.html
index 157c956..8f924e5 100644
--- a/docs/epy/googleapiclient.errors.InvalidChunkSizeError-class.html
+++ b/docs/epy/googleapiclient.errors.InvalidChunkSizeError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class InvalidChunkSizeError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#InvalidChunkSizeError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_12" name="uml_class_diagram_for_googleap_12">
+<center>  <map id="uml_class_diagram_for_googleap_13" name="uml_class_diagram_for_googleap_13">
 <area shape="rect" id="node1" href="googleapiclient.errors.InvalidChunkSizeError-class.html" title="The given chunksize is not valid." alt="" coords="17,435,173,477"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="70,373,123,416"/>
 <area shape="rect" id="node3_14" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="34,311,159,329"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="18,236,174,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,5,185,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_12.gif" alt='' usemap="#uml_class_diagram_for_googleap_12" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_13.gif" alt='' usemap="#uml_class_diagram_for_googleap_13" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -187,7 +187,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.InvalidJsonError-class.html b/docs/epy/googleapiclient.errors.InvalidJsonError-class.html
index 026113f..1054bbb 100644
--- a/docs/epy/googleapiclient.errors.InvalidJsonError-class.html
+++ b/docs/epy/googleapiclient.errors.InvalidJsonError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class InvalidJsonError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#InvalidJsonError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_13" name="uml_class_diagram_for_googleap_13">
+<center>  <map id="uml_class_diagram_for_googleap_14" name="uml_class_diagram_for_googleap_14">
 <area shape="rect" id="node1" href="googleapiclient.errors.InvalidJsonError-class.html" title="The JSON returned could not be parsed." alt="" coords="37,435,157,477"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="70,373,123,416"/>
 <area shape="rect" id="node3_14" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="34,311,159,329"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="18,236,174,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,5,185,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_13.gif" alt='' usemap="#uml_class_diagram_for_googleap_13" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_14.gif" alt='' usemap="#uml_class_diagram_for_googleap_14" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -187,7 +187,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.InvalidNotificationError-class.html b/docs/epy/googleapiclient.errors.InvalidNotificationError-class.html
index 0e75fb8..1c80071 100644
--- a/docs/epy/googleapiclient.errors.InvalidNotificationError-class.html
+++ b/docs/epy/googleapiclient.errors.InvalidNotificationError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class InvalidNotificationError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#InvalidNotificationError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_14" name="uml_class_diagram_for_googleap_14">
+<center>  <map id="uml_class_diagram_for_googleap_15" name="uml_class_diagram_for_googleap_15">
 <area shape="rect" id="node1" href="googleapiclient.errors.InvalidNotificationError-class.html" title="The channel Notification is invalid." alt="" coords="18,435,175,477"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="70,373,123,416"/>
 <area shape="rect" id="node3_14" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="34,311,159,329"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="18,236,174,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,5,185,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_14.gif" alt='' usemap="#uml_class_diagram_for_googleap_14" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_15.gif" alt='' usemap="#uml_class_diagram_for_googleap_15" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -187,7 +187,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.MediaUploadSizeError-class.html b/docs/epy/googleapiclient.errors.MediaUploadSizeError-class.html
index 5520024..4524dc6 100644
--- a/docs/epy/googleapiclient.errors.MediaUploadSizeError-class.html
+++ b/docs/epy/googleapiclient.errors.MediaUploadSizeError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class MediaUploadSizeError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#MediaUploadSizeError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_15" name="uml_class_diagram_for_googleap_15">
+<center>  <map id="uml_class_diagram_for_googleap_16" name="uml_class_diagram_for_googleap_16">
 <area shape="rect" id="node1" href="googleapiclient.errors.MediaUploadSizeError-class.html" title="Media is larger than the method can accept." alt="" coords="18,435,175,477"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="70,373,123,416"/>
 <area shape="rect" id="node3_14" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="34,311,159,329"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="18,236,174,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,5,185,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_15.gif" alt='' usemap="#uml_class_diagram_for_googleap_15" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_16.gif" alt='' usemap="#uml_class_diagram_for_googleap_16" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -187,7 +187,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.ResumableUploadError-class.html b/docs/epy/googleapiclient.errors.ResumableUploadError-class.html
index 96509e9..fa76dd8 100644
--- a/docs/epy/googleapiclient.errors.ResumableUploadError-class.html
+++ b/docs/epy/googleapiclient.errors.ResumableUploadError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class ResumableUploadError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#ResumableUploadError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_16" name="uml_class_diagram_for_googleap_16">
+<center>  <map id="uml_class_diagram_for_googleap_17" name="uml_class_diagram_for_googleap_17">
 <area shape="rect" id="node1" href="googleapiclient.errors.ResumableUploadError-class.html" title="Error occured during resumable upload." alt="" coords="51,491,214,533"/>
 <area shape="rect" id="node2_14" href="googleapiclient.errors.HttpError-class.html#__init__" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="18,409,246,428"/>
 <area shape="rect" id="node2_15" href="googleapiclient.errors.HttpError-class.html#__repr__" title="str(x)" alt="" coords="18,428,246,447"/>
@@ -79,7 +79,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="54,199,210,217"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="41,5,221,224"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_16.gif" alt='' usemap="#uml_class_diagram_for_googleap_16" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_17.gif" alt='' usemap="#uml_class_diagram_for_googleap_17" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -193,7 +193,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.UnacceptableMimeTypeError-class.html b/docs/epy/googleapiclient.errors.UnacceptableMimeTypeError-class.html
index bb98dd6..e308029 100644
--- a/docs/epy/googleapiclient.errors.UnacceptableMimeTypeError-class.html
+++ b/docs/epy/googleapiclient.errors.UnacceptableMimeTypeError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class UnacceptableMimeTypeError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#UnacceptableMimeTypeError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_17" name="uml_class_diagram_for_googleap_17">
+<center>  <map id="uml_class_diagram_for_googleap_18" name="uml_class_diagram_for_googleap_18">
 <area shape="rect" id="node1" href="googleapiclient.errors.UnacceptableMimeTypeError-class.html" title="That is an unacceptable mimetype for this operation." alt="" coords="5,435,201,477"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="78,373,131,416"/>
 <area shape="rect" id="node3_14" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="42,311,167,329"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="26,236,182,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="13,5,193,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_17.gif" alt='' usemap="#uml_class_diagram_for_googleap_17" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_18.gif" alt='' usemap="#uml_class_diagram_for_googleap_18" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -187,7 +187,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.UnexpectedBodyError-class.html b/docs/epy/googleapiclient.errors.UnexpectedBodyError-class.html
index 8c6d9e9..0eb6a8e 100644
--- a/docs/epy/googleapiclient.errors.UnexpectedBodyError-class.html
+++ b/docs/epy/googleapiclient.errors.UnexpectedBodyError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class UnexpectedBodyError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#UnexpectedBodyError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_18" name="uml_class_diagram_for_googleap_18">
+<center>  <map id="uml_class_diagram_for_googleap_19" name="uml_class_diagram_for_googleap_19">
 <area shape="rect" id="node1_14" href="googleapiclient.errors.UnexpectedBodyError-class.html#__init__" title="Constructor for an UnexpectedMethodError." alt="" coords="18,447,219,465"/>
 <area shape="rect" id="node1" href="googleapiclient.errors.UnexpectedBodyError-class.html" title="Exception raised by RequestMockBuilder on unexpected bodies." alt="" coords="5,416,231,472"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="93,355,146,397"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="41,236,197,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="28,5,208,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_18.gif" alt='' usemap="#uml_class_diagram_for_googleap_18" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_19.gif" alt='' usemap="#uml_class_diagram_for_googleap_19" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -252,7 +252,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.UnexpectedMethodError-class.html b/docs/epy/googleapiclient.errors.UnexpectedMethodError-class.html
index d095bef..7708b0e 100644
--- a/docs/epy/googleapiclient.errors.UnexpectedMethodError-class.html
+++ b/docs/epy/googleapiclient.errors.UnexpectedMethodError-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class UnexpectedMethodError</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#UnexpectedMethodError">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_19" name="uml_class_diagram_for_googleap_19">
+<center>  <map id="uml_class_diagram_for_googleap_20" name="uml_class_diagram_for_googleap_20">
 <area shape="rect" id="node1_14" href="googleapiclient.errors.UnexpectedMethodError-class.html#__init__" title="Constructor for an UnexpectedMethodError." alt="" coords="17,447,201,465"/>
 <area shape="rect" id="node1" href="googleapiclient.errors.UnexpectedMethodError-class.html" title="Exception raised by RequestMockBuilder on unexpected calls." alt="" coords="5,416,213,472"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="83,355,136,397"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="31,236,187,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="18,5,198,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_19.gif" alt='' usemap="#uml_class_diagram_for_googleap_19" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_20.gif" alt='' usemap="#uml_class_diagram_for_googleap_20" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -254,7 +254,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.UnknownApiNameOrVersion-class.html b/docs/epy/googleapiclient.errors.UnknownApiNameOrVersion-class.html
index b85daf2..88bebad 100644
--- a/docs/epy/googleapiclient.errors.UnknownApiNameOrVersion-class.html
+++ b/docs/epy/googleapiclient.errors.UnknownApiNameOrVersion-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class UnknownApiNameOrVersion</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#UnknownApiNameOrVersion">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_20" name="uml_class_diagram_for_googleap_20">
+<center>  <map id="uml_class_diagram_for_googleap_21" name="uml_class_diagram_for_googleap_21">
 <area shape="rect" id="node1" href="googleapiclient.errors.UnknownApiNameOrVersion-class.html" title="No API with that name and version exists." alt="" coords="5,435,199,477"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="77,373,130,416"/>
 <area shape="rect" id="node3_14" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="41,311,166,329"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="25,236,181,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="12,5,192,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_20.gif" alt='' usemap="#uml_class_diagram_for_googleap_20" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_21.gif" alt='' usemap="#uml_class_diagram_for_googleap_21" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -187,7 +187,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.UnknownFileType-class.html b/docs/epy/googleapiclient.errors.UnknownFileType-class.html
index e907783..28d4133 100644
--- a/docs/epy/googleapiclient.errors.UnknownFileType-class.html
+++ b/docs/epy/googleapiclient.errors.UnknownFileType-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class UnknownFileType</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#UnknownFileType">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_21" name="uml_class_diagram_for_googleap_21">
+<center>  <map id="uml_class_diagram_for_googleap_22" name="uml_class_diagram_for_googleap_22">
 <area shape="rect" id="node1" href="googleapiclient.errors.UnknownFileType-class.html" title="File type unknown or unexpected." alt="" coords="31,435,160,477"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="70,373,123,416"/>
 <area shape="rect" id="node3_14" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="34,311,159,329"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="18,236,174,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,5,185,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_21.gif" alt='' usemap="#uml_class_diagram_for_googleap_21" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_22.gif" alt='' usemap="#uml_class_diagram_for_googleap_22" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -187,7 +187,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.errors.UnknownLinkType-class.html b/docs/epy/googleapiclient.errors.UnknownLinkType-class.html
index a146c79..955cdbb 100644
--- a/docs/epy/googleapiclient.errors.UnknownLinkType-class.html
+++ b/docs/epy/googleapiclient.errors.UnknownLinkType-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class UnknownLinkType</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.errors-pysrc.html#UnknownLinkType">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_22" name="uml_class_diagram_for_googleap_22">
+<center>  <map id="uml_class_diagram_for_googleap_23" name="uml_class_diagram_for_googleap_23">
 <area shape="rect" id="node1" href="googleapiclient.errors.UnknownLinkType-class.html" title="Link type unknown or unexpected." alt="" coords="29,435,161,477"/>
 <area shape="rect" id="node2" href="googleapiclient.errors.Error-class.html" title="Base error for this module." alt="" coords="70,373,123,416"/>
 <area shape="rect" id="node3_14" href="javascript:void(0);" title="x.__init__(...) initializes x; see help(type(x)) for signature" alt="" coords="34,311,159,329"/>
@@ -78,7 +78,7 @@
 <area shape="rect" id="node4_27" href="javascript:void(0);" title="exceptions.BaseException.__unicode__" alt="" coords="18,236,174,255"/>
 <area shape="rect" id="node4" href="javascript:void(0);" title="Common base class for all exceptions" alt="" coords="5,5,185,261"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_22.gif" alt='' usemap="#uml_class_diagram_for_googleap_22" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_23.gif" alt='' usemap="#uml_class_diagram_for_googleap_23" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -187,7 +187,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http-module.html b/docs/epy/googleapiclient.http-module.html
index e5c8b84..a100619 100644
--- a/docs/epy/googleapiclient.http-module.html
+++ b/docs/epy/googleapiclient.http-module.html
@@ -222,6 +222,24 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="googleapiclient.http-module.html#_should_retry_response" class="summary-sig-name" onclick="show_private();">_should_retry_response</a>(<span class="summary-sig-arg">resp_status</span>,
+        <span class="summary-sig-arg">content</span>)</span><br />
+      Determines whether a response should be retried.</td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="googleapiclient.http-pysrc.html#_should_retry_response">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="googleapiclient.http-module.html#_retry_request" class="summary-sig-name" onclick="show_private();">_retry_request</a>(<span class="summary-sig-arg">http</span>,
         <span class="summary-sig-arg">num_retries</span>,
         <span class="summary-sig-arg">req_type</span>,
@@ -294,6 +312,20 @@
     </table>
   </td>
 </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="_ssl_SSLError"></a><span class="summary-name">_ssl_SSLError</span> = <code title="ssl.SSLError">ssl.SSLError</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="LOGGER"></a><span class="summary-name">LOGGER</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
+    </td>
+  </tr>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
@@ -308,6 +340,13 @@
         <a name="MAX_URI_LENGTH"></a><span class="summary-name">MAX_URI_LENGTH</span> = <code title="2048">2048</code>
     </td>
   </tr>
+<tr class="private">
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+        <a name="_TOO_MANY_REQUESTS"></a><span class="summary-name">_TOO_MANY_REQUESTS</span> = <code title="429">429</code>
+    </td>
+  </tr>
 </table>
 <!-- ==================== FUNCTION DETAILS ==================== -->
 <a name="section-FunctionDetails"></a>
@@ -327,6 +366,36 @@
   </td>
 </tr>
 </table>
+<a name="_should_retry_response"></a>
+<div class="private">
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">_should_retry_response</span>(<span class="sig-arg">resp_status</span>,
+        <span class="sig-arg">content</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    ><span class="codelink"><a href="googleapiclient.http-pysrc.html#_should_retry_response">source&nbsp;code</a></span>&nbsp;
+    </td>
+  </tr></table>
+  
+  <pre class="literalblock">
+Determines whether a response should be retried.
+
+Args:
+  resp_status: The response status received.
+  content: The response content body. 
+
+Returns:
+  True if the response should be retried, otherwise False.
+
+</pre>
+  <dl class="fields">
+  </dl>
+</td></tr></table>
+</div>
 <a name="_retry_request"></a>
 <div class="private">
 <table class="details" border="1" cellpadding="3"
@@ -475,7 +544,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http-pysrc.html b/docs/epy/googleapiclient.http-pysrc.html
index 670d2be..7cf7538 100644
--- a/docs/epy/googleapiclient.http-pysrc.html
+++ b/docs/epy/googleapiclient.http-pysrc.html
@@ -78,1937 +78,2036 @@
 <a name="L20"></a><tt class="py-lineno">  20</tt>  <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
 <a name="L21"></a><tt class="py-lineno">  21</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">__future__</tt> <tt class="py-keyword">import</tt> <tt class="py-name">absolute_import</tt> </tt>
 <a name="L22"></a><tt class="py-lineno">  22</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">six</tt> </tt>
-<a name="L23"></a><tt class="py-lineno">  23</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">moves</tt> <tt class="py-keyword">import</tt> <tt class="py-name">range</tt> </tt>
-<a name="L24"></a><tt class="py-lineno">  24</tt>  <tt class="py-line"> </tt>
-<a name="L25"></a><tt class="py-lineno">  25</tt>  <tt class="py-line"><tt class="py-name">__author__</tt> <tt class="py-op">=</tt> <tt class="py-string">'jcgregorio@google.com (Joe Gregorio)'</tt> </tt>
-<a name="L26"></a><tt class="py-lineno">  26</tt>  <tt class="py-line"> </tt>
-<a name="L27"></a><tt class="py-lineno">  27</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">six</tt> <tt class="py-keyword">import</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">,</tt> <tt class="py-name">StringIO</tt> </tt>
-<a name="L28"></a><tt class="py-lineno">  28</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">moves</tt><tt class="py-op">.</tt><tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">parse</tt> <tt class="py-keyword">import</tt> <tt class="py-name">urlparse</tt><tt class="py-op">,</tt> <tt class="py-name">urlunparse</tt><tt class="py-op">,</tt> <tt class="py-name">quote</tt><tt class="py-op">,</tt> <tt class="py-name">unquote</tt> </tt>
-<a name="L29"></a><tt class="py-lineno">  29</tt>  <tt class="py-line"> </tt>
-<a name="L30"></a><tt class="py-lineno">  30</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">base64</tt> </tt>
-<a name="L31"></a><tt class="py-lineno">  31</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">copy</tt> </tt>
-<a name="L32"></a><tt class="py-lineno">  32</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">gzip</tt> </tt>
-<a name="L33"></a><tt class="py-lineno">  33</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">httplib2</tt> </tt>
-<a name="L34"></a><tt class="py-lineno">  34</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">json</tt> </tt>
-<a name="L35"></a><tt class="py-lineno">  35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
-<a name="L36"></a><tt class="py-lineno">  36</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">mimetypes</tt> </tt>
-<a name="L37"></a><tt class="py-lineno">  37</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
-<a name="L38"></a><tt class="py-lineno">  38</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">random</tt> </tt>
-<a name="L39"></a><tt class="py-lineno">  39</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">ssl</tt> </tt>
-<a name="L40"></a><tt class="py-lineno">  40</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
-<a name="L41"></a><tt class="py-lineno">  41</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
-<a name="L42"></a><tt class="py-lineno">  42</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">uuid</tt> </tt>
-<a name="L43"></a><tt class="py-lineno">  43</tt>  <tt class="py-line"> </tt>
-<a name="L44"></a><tt class="py-lineno">  44</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">generator</tt> <tt class="py-keyword">import</tt> <tt class="py-name">Generator</tt> </tt>
-<a name="L45"></a><tt class="py-lineno">  45</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">mime</tt><tt class="py-op">.</tt><tt class="py-name">multipart</tt> <tt class="py-keyword">import</tt> <tt class="py-name">MIMEMultipart</tt> </tt>
-<a name="L46"></a><tt class="py-lineno">  46</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">mime</tt><tt class="py-op">.</tt><tt class="py-name">nonmultipart</tt> <tt class="py-keyword">import</tt> <tt class="py-name">MIMENonMultipart</tt> </tt>
-<a name="L47"></a><tt class="py-lineno">  47</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">parser</tt> <tt class="py-keyword">import</tt> <tt class="py-name">FeedParser</tt> </tt>
-<a name="L48"></a><tt class="py-lineno">  48</tt>  <tt class="py-line"> </tt>
-<a name="L49"></a><tt class="py-lineno">  49</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package googleapiclient=googleapiclient-module.html"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-0', 'googleapiclient', 'link-0');">googleapiclient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Module googleapiclient.mimeparse=googleapiclient.mimeparse-module.html"><a title="googleapiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-1', 'mimeparse', 'link-1');">mimeparse</a></tt> </tt>
-<a name="L50"></a><tt class="py-lineno">  50</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-2', 'googleapiclient', 'link-0');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-3" class="py-name" targets="Module googleapiclient.errors=googleapiclient.errors-module.html"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-3', 'errors', 'link-3');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-4" class="py-name" targets="Class googleapiclient.errors.BatchError=googleapiclient.errors.BatchError-class.html"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-4', 'BatchError', 'link-4');">BatchError</a></tt> </tt>
-<a name="L51"></a><tt class="py-lineno">  51</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-5" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-5', 'googleapiclient', 'link-0');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-6" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-6', 'errors', 'link-3');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-7" class="py-name" targets="Class googleapiclient.errors.HttpError=googleapiclient.errors.HttpError-class.html"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-7', 'HttpError', 'link-7');">HttpError</a></tt> </tt>
-<a name="L52"></a><tt class="py-lineno">  52</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-8', 'googleapiclient', 'link-0');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-9', 'errors', 'link-3');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-10" class="py-name" targets="Class googleapiclient.errors.InvalidChunkSizeError=googleapiclient.errors.InvalidChunkSizeError-class.html"><a title="googleapiclient.errors.InvalidChunkSizeError" class="py-name" href="#" onclick="return doclink('link-10', 'InvalidChunkSizeError', 'link-10');">InvalidChunkSizeError</a></tt> </tt>
-<a name="L53"></a><tt class="py-lineno">  53</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-11" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-11', 'googleapiclient', 'link-0');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-12" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-12', 'errors', 'link-3');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-13" class="py-name" targets="Class googleapiclient.errors.ResumableUploadError=googleapiclient.errors.ResumableUploadError-class.html"><a title="googleapiclient.errors.ResumableUploadError" class="py-name" href="#" onclick="return doclink('link-13', 'ResumableUploadError', 'link-13');">ResumableUploadError</a></tt> </tt>
-<a name="L54"></a><tt class="py-lineno">  54</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-14" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-14', 'googleapiclient', 'link-0');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-15" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-15', 'errors', 'link-3');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-16" class="py-name" targets="Class googleapiclient.errors.UnexpectedBodyError=googleapiclient.errors.UnexpectedBodyError-class.html"><a title="googleapiclient.errors.UnexpectedBodyError" class="py-name" href="#" onclick="return doclink('link-16', 'UnexpectedBodyError', 'link-16');">UnexpectedBodyError</a></tt> </tt>
-<a name="L55"></a><tt class="py-lineno">  55</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-17" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-17', 'googleapiclient', 'link-0');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-18" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-18', 'errors', 'link-3');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-19" class="py-name" targets="Class googleapiclient.errors.UnexpectedMethodError=googleapiclient.errors.UnexpectedMethodError-class.html"><a title="googleapiclient.errors.UnexpectedMethodError" class="py-name" href="#" onclick="return doclink('link-19', 'UnexpectedMethodError', 'link-19');">UnexpectedMethodError</a></tt> </tt>
-<a name="L56"></a><tt class="py-lineno">  56</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-20" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-20', 'googleapiclient', 'link-0');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-21" class="py-name" targets="Module googleapiclient.model=googleapiclient.model-module.html"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-21', 'model', 'link-21');">model</a></tt> <tt class="py-keyword">import</tt> <tt id="link-22" class="py-name" targets="Class googleapiclient.model.JsonModel=googleapiclient.model.JsonModel-class.html"><a title="googleapiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-22', 'JsonModel', 'link-22');">JsonModel</a></tt> </tt>
-<a name="L57"></a><tt class="py-lineno">  57</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">oauth2client</tt> <tt class="py-keyword">import</tt> <tt class="py-name">util</tt> </tt>
-<a name="L58"></a><tt class="py-lineno">  58</tt>  <tt class="py-line"> </tt>
-<a name="L59"></a><tt class="py-lineno">  59</tt>  <tt class="py-line"> </tt>
-<a name="L60"></a><tt class="py-lineno">  60</tt>  <tt class="py-line"><tt id="link-23" class="py-name" targets="Variable googleapiclient.http.DEFAULT_CHUNK_SIZE=googleapiclient.http-module.html#DEFAULT_CHUNK_SIZE"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-23', 'DEFAULT_CHUNK_SIZE', 'link-23');">DEFAULT_CHUNK_SIZE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">512</tt><tt class="py-op">*</tt><tt class="py-number">1024</tt> </tt>
-<a name="L61"></a><tt class="py-lineno">  61</tt>  <tt class="py-line"> </tt>
-<a name="L62"></a><tt class="py-lineno">  62</tt>  <tt class="py-line"><tt id="link-24" class="py-name" targets="Variable googleapiclient.http.MAX_URI_LENGTH=googleapiclient.http-module.html#MAX_URI_LENGTH"><a title="googleapiclient.http.MAX_URI_LENGTH" class="py-name" href="#" onclick="return doclink('link-24', 'MAX_URI_LENGTH', 'link-24');">MAX_URI_LENGTH</a></tt> <tt class="py-op">=</tt> <tt class="py-number">2048</tt> </tt>
-<a name="_retry_request"></a><div id="_retry_request-def"><a name="L63"></a><tt class="py-lineno">  63</tt>  <tt class="py-line"> </tt>
-<a name="L64"></a><tt class="py-lineno">  64</tt>  <tt class="py-line"> </tt>
-<a name="L65"></a><tt class="py-lineno">  65</tt> <a class="py-toggle" href="#" id="_retry_request-toggle" onclick="return toggle('_retry_request');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http-module.html#_retry_request">_retry_request</a><tt class="py-op">(</tt><tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">num_retries</tt><tt class="py-op">,</tt> <tt class="py-param">req_type</tt><tt class="py-op">,</tt> <tt class="py-param">sleep</tt><tt class="py-op">,</tt> <tt class="py-param">rand</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> </tt>
-<a name="L66"></a><tt class="py-lineno">  66</tt>  <tt class="py-line">                   <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_retry_request-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_retry_request-expanded"><a name="L67"></a><tt class="py-lineno">  67</tt>  <tt class="py-line">  <tt class="py-docstring">"""Retries an HTTP request multiple times while handling errors.</tt> </tt>
-<a name="L68"></a><tt class="py-lineno">  68</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L69"></a><tt class="py-lineno">  69</tt>  <tt class="py-line"><tt class="py-docstring">  If after all retries the request still fails, last error is either returned as</tt> </tt>
-<a name="L70"></a><tt class="py-lineno">  70</tt>  <tt class="py-line"><tt class="py-docstring">  return value (for HTTP 5xx errors) or thrown (for ssl.SSLError).</tt> </tt>
-<a name="L71"></a><tt class="py-lineno">  71</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L72"></a><tt class="py-lineno">  72</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L73"></a><tt class="py-lineno">  73</tt>  <tt class="py-line"><tt class="py-docstring">    http: Http object to be used to execute request.</tt> </tt>
-<a name="L74"></a><tt class="py-lineno">  74</tt>  <tt class="py-line"><tt class="py-docstring">    num_retries: Maximum number of retries.</tt> </tt>
-<a name="L75"></a><tt class="py-lineno">  75</tt>  <tt class="py-line"><tt class="py-docstring">    req_type: Type of the request (used for logging retries).</tt> </tt>
-<a name="L76"></a><tt class="py-lineno">  76</tt>  <tt class="py-line"><tt class="py-docstring">    sleep, rand: Functions to sleep for random time between retries.</tt> </tt>
-<a name="L77"></a><tt class="py-lineno">  77</tt>  <tt class="py-line"><tt class="py-docstring">    uri: URI to be requested.</tt> </tt>
-<a name="L78"></a><tt class="py-lineno">  78</tt>  <tt class="py-line"><tt class="py-docstring">    method: HTTP method to be used.</tt> </tt>
-<a name="L79"></a><tt class="py-lineno">  79</tt>  <tt class="py-line"><tt class="py-docstring">    args, kwargs: Additional arguments passed to http.request.</tt> </tt>
+<a name="L23"></a><tt class="py-lineno">  23</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">moves</tt> <tt class="py-keyword">import</tt> <tt class="py-name">http_client</tt> </tt>
+<a name="L24"></a><tt class="py-lineno">  24</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">moves</tt> <tt class="py-keyword">import</tt> <tt class="py-name">range</tt> </tt>
+<a name="L25"></a><tt class="py-lineno">  25</tt>  <tt class="py-line"> </tt>
+<a name="L26"></a><tt class="py-lineno">  26</tt>  <tt class="py-line"><tt class="py-name">__author__</tt> <tt class="py-op">=</tt> <tt class="py-string">'jcgregorio@google.com (Joe Gregorio)'</tt> </tt>
+<a name="L27"></a><tt class="py-lineno">  27</tt>  <tt class="py-line"> </tt>
+<a name="L28"></a><tt class="py-lineno">  28</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">six</tt> <tt class="py-keyword">import</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">,</tt> <tt class="py-name">StringIO</tt> </tt>
+<a name="L29"></a><tt class="py-lineno">  29</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">moves</tt><tt class="py-op">.</tt><tt class="py-name">urllib</tt><tt class="py-op">.</tt><tt class="py-name">parse</tt> <tt class="py-keyword">import</tt> <tt class="py-name">urlparse</tt><tt class="py-op">,</tt> <tt class="py-name">urlunparse</tt><tt class="py-op">,</tt> <tt class="py-name">quote</tt><tt class="py-op">,</tt> <tt class="py-name">unquote</tt> </tt>
+<a name="L30"></a><tt class="py-lineno">  30</tt>  <tt class="py-line"> </tt>
+<a name="L31"></a><tt class="py-lineno">  31</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">base64</tt> </tt>
+<a name="L32"></a><tt class="py-lineno">  32</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">copy</tt> </tt>
+<a name="L33"></a><tt class="py-lineno">  33</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">gzip</tt> </tt>
+<a name="L34"></a><tt class="py-lineno">  34</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">httplib2</tt> </tt>
+<a name="L35"></a><tt class="py-lineno">  35</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">json</tt> </tt>
+<a name="L36"></a><tt class="py-lineno">  36</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">logging</tt> </tt>
+<a name="L37"></a><tt class="py-lineno">  37</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">mimetypes</tt> </tt>
+<a name="L38"></a><tt class="py-lineno">  38</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> </tt>
+<a name="L39"></a><tt class="py-lineno">  39</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">random</tt> </tt>
+<a name="L40"></a><tt class="py-lineno">  40</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt> </tt>
+<a name="L41"></a><tt class="py-lineno">  41</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> </tt>
+<a name="L42"></a><tt class="py-lineno">  42</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">time</tt> </tt>
+<a name="L43"></a><tt class="py-lineno">  43</tt>  <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">uuid</tt> </tt>
+<a name="L44"></a><tt class="py-lineno">  44</tt>  <tt class="py-line"> </tt>
+<a name="L45"></a><tt class="py-lineno">  45</tt>  <tt class="py-line"><tt class="py-comment"># TODO(issue 221): Remove this conditional import jibbajabba.</tt> </tt>
+<a name="L46"></a><tt class="py-lineno">  46</tt>  <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L47"></a><tt class="py-lineno">  47</tt>  <tt class="py-line">  <tt class="py-keyword">import</tt> <tt class="py-name">ssl</tt> </tt>
+<a name="L48"></a><tt class="py-lineno">  48</tt>  <tt class="py-line"><tt class="py-keyword">except</tt> <tt class="py-name">ImportError</tt><tt class="py-op">:</tt> </tt>
+<a name="L49"></a><tt class="py-lineno">  49</tt>  <tt class="py-line">  <tt id="link-0" class="py-name" targets="Variable googleapiclient.http._ssl_SSLError=googleapiclient.http-module.html#_ssl_SSLError"><a title="googleapiclient.http._ssl_SSLError" class="py-name" href="#" onclick="return doclink('link-0', '_ssl_SSLError', 'link-0');">_ssl_SSLError</a></tt> <tt class="py-op">=</tt> <tt class="py-name">object</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L50"></a><tt class="py-lineno">  50</tt>  <tt class="py-line"><tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L51"></a><tt class="py-lineno">  51</tt>  <tt class="py-line">  <tt id="link-1" class="py-name"><a title="googleapiclient.http._ssl_SSLError" class="py-name" href="#" onclick="return doclink('link-1', '_ssl_SSLError', 'link-0');">_ssl_SSLError</a></tt> <tt class="py-op">=</tt> <tt class="py-name">ssl</tt><tt class="py-op">.</tt><tt class="py-name">SSLError</tt> </tt>
+<a name="L52"></a><tt class="py-lineno">  52</tt>  <tt class="py-line"> </tt>
+<a name="L53"></a><tt class="py-lineno">  53</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">generator</tt> <tt class="py-keyword">import</tt> <tt class="py-name">Generator</tt> </tt>
+<a name="L54"></a><tt class="py-lineno">  54</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">mime</tt><tt class="py-op">.</tt><tt class="py-name">multipart</tt> <tt class="py-keyword">import</tt> <tt class="py-name">MIMEMultipart</tt> </tt>
+<a name="L55"></a><tt class="py-lineno">  55</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">mime</tt><tt class="py-op">.</tt><tt class="py-name">nonmultipart</tt> <tt class="py-keyword">import</tt> <tt class="py-name">MIMENonMultipart</tt> </tt>
+<a name="L56"></a><tt class="py-lineno">  56</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">email</tt><tt class="py-op">.</tt><tt class="py-name">parser</tt> <tt class="py-keyword">import</tt> <tt class="py-name">FeedParser</tt> </tt>
+<a name="L57"></a><tt class="py-lineno">  57</tt>  <tt class="py-line"> </tt>
+<a name="L58"></a><tt class="py-lineno">  58</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name" targets="Package googleapiclient=googleapiclient-module.html"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-2', 'googleapiclient', 'link-2');">googleapiclient</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Module googleapiclient.mimeparse=googleapiclient.mimeparse-module.html"><a title="googleapiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-3', 'mimeparse', 'link-3');">mimeparse</a></tt> </tt>
+<a name="L59"></a><tt class="py-lineno">  59</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-4" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-4', 'googleapiclient', 'link-2');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-5" class="py-name" targets="Module googleapiclient.errors=googleapiclient.errors-module.html"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-5', 'errors', 'link-5');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Class googleapiclient.errors.BatchError=googleapiclient.errors.BatchError-class.html"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-6', 'BatchError', 'link-6');">BatchError</a></tt> </tt>
+<a name="L60"></a><tt class="py-lineno">  60</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-7" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-7', 'googleapiclient', 'link-2');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-8" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-8', 'errors', 'link-5');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-9" class="py-name" targets="Class googleapiclient.errors.HttpError=googleapiclient.errors.HttpError-class.html"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-9', 'HttpError', 'link-9');">HttpError</a></tt> </tt>
+<a name="L61"></a><tt class="py-lineno">  61</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-10" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-10', 'googleapiclient', 'link-2');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-11" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-11', 'errors', 'link-5');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-12" class="py-name" targets="Class googleapiclient.errors.InvalidChunkSizeError=googleapiclient.errors.InvalidChunkSizeError-class.html"><a title="googleapiclient.errors.InvalidChunkSizeError" class="py-name" href="#" onclick="return doclink('link-12', 'InvalidChunkSizeError', 'link-12');">InvalidChunkSizeError</a></tt> </tt>
+<a name="L62"></a><tt class="py-lineno">  62</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-13" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-13', 'googleapiclient', 'link-2');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-14', 'errors', 'link-5');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-15" class="py-name" targets="Class googleapiclient.errors.ResumableUploadError=googleapiclient.errors.ResumableUploadError-class.html"><a title="googleapiclient.errors.ResumableUploadError" class="py-name" href="#" onclick="return doclink('link-15', 'ResumableUploadError', 'link-15');">ResumableUploadError</a></tt> </tt>
+<a name="L63"></a><tt class="py-lineno">  63</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-16" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-16', 'googleapiclient', 'link-2');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-17', 'errors', 'link-5');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-18" class="py-name" targets="Class googleapiclient.errors.UnexpectedBodyError=googleapiclient.errors.UnexpectedBodyError-class.html"><a title="googleapiclient.errors.UnexpectedBodyError" class="py-name" href="#" onclick="return doclink('link-18', 'UnexpectedBodyError', 'link-18');">UnexpectedBodyError</a></tt> </tt>
+<a name="L64"></a><tt class="py-lineno">  64</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-19" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-19', 'googleapiclient', 'link-2');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-20', 'errors', 'link-5');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-21" class="py-name" targets="Class googleapiclient.errors.UnexpectedMethodError=googleapiclient.errors.UnexpectedMethodError-class.html"><a title="googleapiclient.errors.UnexpectedMethodError" class="py-name" href="#" onclick="return doclink('link-21', 'UnexpectedMethodError', 'link-21');">UnexpectedMethodError</a></tt> </tt>
+<a name="L65"></a><tt class="py-lineno">  65</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-22" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-22', 'googleapiclient', 'link-2');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-23" class="py-name" targets="Module googleapiclient.model=googleapiclient.model-module.html"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-23', 'model', 'link-23');">model</a></tt> <tt class="py-keyword">import</tt> <tt id="link-24" class="py-name" targets="Class googleapiclient.model.JsonModel=googleapiclient.model.JsonModel-class.html"><a title="googleapiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-24', 'JsonModel', 'link-24');">JsonModel</a></tt> </tt>
+<a name="L66"></a><tt class="py-lineno">  66</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt class="py-name">oauth2client</tt> <tt class="py-keyword">import</tt> <tt class="py-name">util</tt> </tt>
+<a name="L67"></a><tt class="py-lineno">  67</tt>  <tt class="py-line"> </tt>
+<a name="L68"></a><tt class="py-lineno">  68</tt>  <tt class="py-line"> </tt>
+<a name="L69"></a><tt class="py-lineno">  69</tt>  <tt class="py-line"><tt id="link-25" class="py-name" targets="Variable googleapiclient.discovery_cache.LOGGER=googleapiclient.discovery_cache-module.html#LOGGER,Variable googleapiclient.discovery_cache.appengine_memcache.LOGGER=googleapiclient.discovery_cache.appengine_memcache-module.html#LOGGER,Variable googleapiclient.discovery_cache.file_cache.LOGGER=googleapiclient.discovery_cache.file_cache-module.html#LOGGER,Variable googleapiclient.http.LOGGER=googleapiclient.http-module.html#LOGGER,Variable googleapiclient.model.LOGGER=googleapiclient.model-module.html#LOGGER"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-25', 'LOGGER', 'link-25');">LOGGER</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
+<a name="L70"></a><tt class="py-lineno">  70</tt>  <tt class="py-line"> </tt>
+<a name="L71"></a><tt class="py-lineno">  71</tt>  <tt class="py-line"><tt id="link-26" class="py-name" targets="Variable googleapiclient.http.DEFAULT_CHUNK_SIZE=googleapiclient.http-module.html#DEFAULT_CHUNK_SIZE"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-26', 'DEFAULT_CHUNK_SIZE', 'link-26');">DEFAULT_CHUNK_SIZE</a></tt> <tt class="py-op">=</tt> <tt class="py-number">512</tt><tt class="py-op">*</tt><tt class="py-number">1024</tt> </tt>
+<a name="L72"></a><tt class="py-lineno">  72</tt>  <tt class="py-line"> </tt>
+<a name="L73"></a><tt class="py-lineno">  73</tt>  <tt class="py-line"><tt id="link-27" class="py-name" targets="Variable googleapiclient.http.MAX_URI_LENGTH=googleapiclient.http-module.html#MAX_URI_LENGTH"><a title="googleapiclient.http.MAX_URI_LENGTH" class="py-name" href="#" onclick="return doclink('link-27', 'MAX_URI_LENGTH', 'link-27');">MAX_URI_LENGTH</a></tt> <tt class="py-op">=</tt> <tt class="py-number">2048</tt> </tt>
+<a name="L74"></a><tt class="py-lineno">  74</tt>  <tt class="py-line"> </tt>
+<a name="L75"></a><tt class="py-lineno">  75</tt>  <tt class="py-line"><tt id="link-28" class="py-name" targets="Variable googleapiclient.http._TOO_MANY_REQUESTS=googleapiclient.http-module.html#_TOO_MANY_REQUESTS"><a title="googleapiclient.http._TOO_MANY_REQUESTS" class="py-name" href="#" onclick="return doclink('link-28', '_TOO_MANY_REQUESTS', 'link-28');">_TOO_MANY_REQUESTS</a></tt> <tt class="py-op">=</tt> <tt class="py-number">429</tt> </tt>
+<a name="_should_retry_response"></a><div id="_should_retry_response-def"><a name="L76"></a><tt class="py-lineno">  76</tt>  <tt class="py-line"> </tt>
+<a name="L77"></a><tt class="py-lineno">  77</tt>  <tt class="py-line"> </tt>
+<a name="L78"></a><tt class="py-lineno">  78</tt> <a class="py-toggle" href="#" id="_should_retry_response-toggle" onclick="return toggle('_should_retry_response');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http-module.html#_should_retry_response">_should_retry_response</a><tt class="py-op">(</tt><tt class="py-param">resp_status</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_should_retry_response-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_should_retry_response-expanded"><a name="L79"></a><tt class="py-lineno">  79</tt>  <tt class="py-line">  <tt class="py-docstring">"""Determines whether a response should be retried.</tt> </tt>
 <a name="L80"></a><tt class="py-lineno">  80</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L81"></a><tt class="py-lineno">  81</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L82"></a><tt class="py-lineno">  82</tt>  <tt class="py-line"><tt class="py-docstring">    resp, content - Response from the http request (may be HTTP 5xx).</tt> </tt>
-<a name="L83"></a><tt class="py-lineno">  83</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L84"></a><tt class="py-lineno">  84</tt>  <tt class="py-line">  <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L85"></a><tt class="py-lineno">  85</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">retry_num</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">num_retries</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L86"></a><tt class="py-lineno">  86</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">retry_num</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L87"></a><tt class="py-lineno">  87</tt>  <tt class="py-line">      <tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-name">rand</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-number">2</tt><tt class="py-op">**</tt><tt class="py-name">retry_num</tt><tt class="py-op">)</tt> </tt>
-<a name="L88"></a><tt class="py-lineno">  88</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt> </tt>
-<a name="L89"></a><tt class="py-lineno">  89</tt>  <tt class="py-line">          <tt class="py-string">'Retry #%d for %s: %s %s%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">retry_num</tt><tt class="py-op">,</tt> <tt class="py-name">req_type</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L90"></a><tt class="py-lineno">  90</tt>  <tt class="py-line">          <tt class="py-string">', following status: %d'</tt> <tt class="py-op">%</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt> <tt class="py-keyword">else</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L81"></a><tt class="py-lineno">  81</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L82"></a><tt class="py-lineno">  82</tt>  <tt class="py-line"><tt class="py-docstring">    resp_status: The response status received.</tt> </tt>
+<a name="L83"></a><tt class="py-lineno">  83</tt>  <tt class="py-line"><tt class="py-docstring">    content: The response content body. </tt> </tt>
+<a name="L84"></a><tt class="py-lineno">  84</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L85"></a><tt class="py-lineno">  85</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L86"></a><tt class="py-lineno">  86</tt>  <tt class="py-line"><tt class="py-docstring">    True if the response should be retried, otherwise False.</tt> </tt>
+<a name="L87"></a><tt class="py-lineno">  87</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L88"></a><tt class="py-lineno">  88</tt>  <tt class="py-line">  <tt class="py-comment"># Retry on 5xx errors.</tt> </tt>
+<a name="L89"></a><tt class="py-lineno">  89</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp_status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">500</tt><tt class="py-op">:</tt> </tt>
+<a name="L90"></a><tt class="py-lineno">  90</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
 <a name="L91"></a><tt class="py-lineno">  91</tt>  <tt class="py-line"> </tt>
-<a name="L92"></a><tt class="py-lineno">  92</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L93"></a><tt class="py-lineno">  93</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-25" class="py-name" targets="Module googleapiclient.http=googleapiclient.http-module.html"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-25', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-26" class="py-name" targets="Method googleapiclient.http.HttpMock.request()=googleapiclient.http.HttpMock-class.html#request,Method googleapiclient.http.HttpMockSequence.request()=googleapiclient.http.HttpMockSequence-class.html#request,Method googleapiclient.model.BaseModel.request()=googleapiclient.model.BaseModel-class.html#request,Method googleapiclient.model.Model.request()=googleapiclient.model.Model-class.html#request"><a title="googleapiclient.http.HttpMock.request
+<a name="L92"></a><tt class="py-lineno">  92</tt>  <tt class="py-line">  <tt class="py-comment"># Retry on 429 errors.</tt> </tt>
+<a name="L93"></a><tt class="py-lineno">  93</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp_status</tt> <tt class="py-op">==</tt> <tt id="link-29" class="py-name"><a title="googleapiclient.http._TOO_MANY_REQUESTS" class="py-name" href="#" onclick="return doclink('link-29', '_TOO_MANY_REQUESTS', 'link-28');">_TOO_MANY_REQUESTS</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L94"></a><tt class="py-lineno">  94</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L95"></a><tt class="py-lineno">  95</tt>  <tt class="py-line"> </tt>
+<a name="L96"></a><tt class="py-lineno">  96</tt>  <tt class="py-line">  <tt class="py-comment"># For 403 errors, we have to check for the `reason` in the response to</tt> </tt>
+<a name="L97"></a><tt class="py-lineno">  97</tt>  <tt class="py-line">  <tt class="py-comment"># determine if we should retry.</tt> </tt>
+<a name="L98"></a><tt class="py-lineno">  98</tt>  <tt class="py-line">  <tt class="py-keyword">if</tt> <tt class="py-name">resp_status</tt> <tt class="py-op">==</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">moves</tt><tt class="py-op">.</tt><tt class="py-name">http_client</tt><tt class="py-op">.</tt><tt class="py-name">FORBIDDEN</tt><tt class="py-op">:</tt> </tt>
+<a name="L99"></a><tt class="py-lineno">  99</tt>  <tt class="py-line">    <tt class="py-comment"># If there's no details about the 403 type, don't retry.</tt> </tt>
+<a name="L100"></a><tt class="py-lineno"> 100</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">content</tt><tt class="py-op">:</tt> </tt>
+<a name="L101"></a><tt class="py-lineno"> 101</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L102"></a><tt class="py-lineno"> 102</tt>  <tt class="py-line"> </tt>
+<a name="L103"></a><tt class="py-lineno"> 103</tt>  <tt class="py-line">    <tt class="py-comment"># Content is in JSON format.</tt> </tt>
+<a name="L104"></a><tt class="py-lineno"> 104</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L105"></a><tt class="py-lineno"> 105</tt>  <tt class="py-line">      <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L106"></a><tt class="py-lineno"> 106</tt>  <tt class="py-line">      <tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'error'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'errors'</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'reason'</tt><tt class="py-op">]</tt> </tt>
+<a name="L107"></a><tt class="py-lineno"> 107</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-op">(</tt><tt class="py-name">UnicodeDecodeError</tt><tt class="py-op">,</tt> <tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">KeyError</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L108"></a><tt class="py-lineno"> 108</tt>  <tt class="py-line">      <tt id="link-30" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-30', 'LOGGER', 'link-25');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid JSON content from response: %s'</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L109"></a><tt class="py-lineno"> 109</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+<a name="L110"></a><tt class="py-lineno"> 110</tt>  <tt class="py-line"> </tt>
+<a name="L111"></a><tt class="py-lineno"> 111</tt>  <tt class="py-line">    <tt id="link-31" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-31', 'LOGGER', 'link-25');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt><tt class="py-string">'Encountered 403 Forbidden with reason "%s"'</tt><tt class="py-op">,</tt> <tt class="py-name">reason</tt><tt class="py-op">)</tt> </tt>
+<a name="L112"></a><tt class="py-lineno"> 112</tt>  <tt class="py-line"> </tt>
+<a name="L113"></a><tt class="py-lineno"> 113</tt>  <tt class="py-line">    <tt class="py-comment"># Only retry on rate limit related failures.</tt> </tt>
+<a name="L114"></a><tt class="py-lineno"> 114</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">reason</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">'userRateLimitExceeded'</tt><tt class="py-op">,</tt> <tt class="py-string">'rateLimitExceeded'</tt><tt class="py-op">,</tt> <tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L115"></a><tt class="py-lineno"> 115</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+<a name="L116"></a><tt class="py-lineno"> 116</tt>  <tt class="py-line"> </tt>
+<a name="L117"></a><tt class="py-lineno"> 117</tt>  <tt class="py-line">  <tt class="py-comment"># Everything else is a success or non-retriable so break.</tt> </tt>
+<a name="L118"></a><tt class="py-lineno"> 118</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L119"></a><tt class="py-lineno"> 119</tt>  <tt class="py-line"> </tt>
+<a name="_retry_request"></a><div id="_retry_request-def"><a name="L120"></a><tt class="py-lineno"> 120</tt>  <tt class="py-line"> </tt>
+<a name="L121"></a><tt class="py-lineno"> 121</tt> <a class="py-toggle" href="#" id="_retry_request-toggle" onclick="return toggle('_retry_request');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http-module.html#_retry_request">_retry_request</a><tt class="py-op">(</tt><tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">num_retries</tt><tt class="py-op">,</tt> <tt class="py-param">req_type</tt><tt class="py-op">,</tt> <tt class="py-param">sleep</tt><tt class="py-op">,</tt> <tt class="py-param">rand</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">,</tt> </tt>
+<a name="L122"></a><tt class="py-lineno"> 122</tt>  <tt class="py-line">                   <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_retry_request-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_retry_request-expanded"><a name="L123"></a><tt class="py-lineno"> 123</tt>  <tt class="py-line">  <tt class="py-docstring">"""Retries an HTTP request multiple times while handling errors.</tt> </tt>
+<a name="L124"></a><tt class="py-lineno"> 124</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L125"></a><tt class="py-lineno"> 125</tt>  <tt class="py-line"><tt class="py-docstring">  If after all retries the request still fails, last error is either returned as</tt> </tt>
+<a name="L126"></a><tt class="py-lineno"> 126</tt>  <tt class="py-line"><tt class="py-docstring">  return value (for HTTP 5xx errors) or thrown (for ssl.SSLError).</tt> </tt>
+<a name="L127"></a><tt class="py-lineno"> 127</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L128"></a><tt class="py-lineno"> 128</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L129"></a><tt class="py-lineno"> 129</tt>  <tt class="py-line"><tt class="py-docstring">    http: Http object to be used to execute request.</tt> </tt>
+<a name="L130"></a><tt class="py-lineno"> 130</tt>  <tt class="py-line"><tt class="py-docstring">    num_retries: Maximum number of retries.</tt> </tt>
+<a name="L131"></a><tt class="py-lineno"> 131</tt>  <tt class="py-line"><tt class="py-docstring">    req_type: Type of the request (used for logging retries).</tt> </tt>
+<a name="L132"></a><tt class="py-lineno"> 132</tt>  <tt class="py-line"><tt class="py-docstring">    sleep, rand: Functions to sleep for random time between retries.</tt> </tt>
+<a name="L133"></a><tt class="py-lineno"> 133</tt>  <tt class="py-line"><tt class="py-docstring">    uri: URI to be requested.</tt> </tt>
+<a name="L134"></a><tt class="py-lineno"> 134</tt>  <tt class="py-line"><tt class="py-docstring">    method: HTTP method to be used.</tt> </tt>
+<a name="L135"></a><tt class="py-lineno"> 135</tt>  <tt class="py-line"><tt class="py-docstring">    args, kwargs: Additional arguments passed to http.request.</tt> </tt>
+<a name="L136"></a><tt class="py-lineno"> 136</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L137"></a><tt class="py-lineno"> 137</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L138"></a><tt class="py-lineno"> 138</tt>  <tt class="py-line"><tt class="py-docstring">    resp, content - Response from the http request (may be HTTP 5xx).</tt> </tt>
+<a name="L139"></a><tt class="py-lineno"> 139</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L140"></a><tt class="py-lineno"> 140</tt>  <tt class="py-line">  <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L141"></a><tt class="py-lineno"> 141</tt>  <tt class="py-line">  <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L142"></a><tt class="py-lineno"> 142</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">retry_num</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">num_retries</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L143"></a><tt class="py-lineno"> 143</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">retry_num</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L144"></a><tt class="py-lineno"> 144</tt>  <tt class="py-line">      <tt class="py-comment"># Sleep before retrying.</tt> </tt>
+<a name="L145"></a><tt class="py-lineno"> 145</tt>  <tt class="py-line">      <tt class="py-name">sleep_time</tt> <tt class="py-op">=</tt> <tt class="py-name">rand</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-name">retry_num</tt> </tt>
+<a name="L146"></a><tt class="py-lineno"> 146</tt>  <tt class="py-line">      <tt id="link-32" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-32', 'LOGGER', 'link-25');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt> </tt>
+<a name="L147"></a><tt class="py-lineno"> 147</tt>  <tt class="py-line">          <tt class="py-string">'Sleeping %.2f seconds before retry %d of %d for %s: %s %s, after %s'</tt><tt class="py-op">,</tt> </tt>
+<a name="L148"></a><tt class="py-lineno"> 148</tt>  <tt class="py-line">          <tt class="py-name">sleep_time</tt><tt class="py-op">,</tt> <tt class="py-name">retry_num</tt><tt class="py-op">,</tt> <tt class="py-name">num_retries</tt><tt class="py-op">,</tt> <tt class="py-name">req_type</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L149"></a><tt class="py-lineno"> 149</tt>  <tt class="py-line">          <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt> <tt class="py-keyword">else</tt> <tt class="py-name">exception</tt><tt class="py-op">)</tt> </tt>
+<a name="L150"></a><tt class="py-lineno"> 150</tt>  <tt class="py-line">      <tt class="py-name">sleep</tt><tt class="py-op">(</tt><tt class="py-name">sleep_time</tt><tt class="py-op">)</tt> </tt>
+<a name="L151"></a><tt class="py-lineno"> 151</tt>  <tt class="py-line"> </tt>
+<a name="L152"></a><tt class="py-lineno"> 152</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L153"></a><tt class="py-lineno"> 153</tt>  <tt class="py-line">      <tt class="py-name">exception</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L154"></a><tt class="py-lineno"> 154</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-33" class="py-name" targets="Module googleapiclient.http=googleapiclient.http-module.html"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-33', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-34" class="py-name" targets="Method googleapiclient.http.HttpMock.request()=googleapiclient.http.HttpMock-class.html#request,Method googleapiclient.http.HttpMockSequence.request()=googleapiclient.http.HttpMockSequence-class.html#request,Method googleapiclient.model.BaseModel.request()=googleapiclient.model.BaseModel-class.html#request,Method googleapiclient.model.Model.request()=googleapiclient.model.Model-class.html#request"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-26', 'request', 'link-26');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
-<a name="L94"></a><tt class="py-lineno">  94</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">ssl</tt><tt class="py-op">.</tt><tt class="py-name">SSLError</tt><tt class="py-op">:</tt> </tt>
-<a name="L95"></a><tt class="py-lineno">  95</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">retry_num</tt> <tt class="py-op">==</tt> <tt class="py-name">num_retries</tt><tt class="py-op">:</tt> </tt>
-<a name="L96"></a><tt class="py-lineno">  96</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> </tt>
-<a name="L97"></a><tt class="py-lineno">  97</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L98"></a><tt class="py-lineno">  98</tt>  <tt class="py-line">        <tt class="py-keyword">continue</tt> </tt>
-<a name="L99"></a><tt class="py-lineno">  99</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">500</tt><tt class="py-op">:</tt> </tt>
-<a name="L100"></a><tt class="py-lineno"> 100</tt>  <tt class="py-line">      <tt class="py-keyword">break</tt> </tt>
-<a name="L101"></a><tt class="py-lineno"> 101</tt>  <tt class="py-line"> </tt>
-<a name="L102"></a><tt class="py-lineno"> 102</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
-</div><a name="L103"></a><tt class="py-lineno"> 103</tt>  <tt class="py-line"> </tt>
-<a name="MediaUploadProgress"></a><div id="MediaUploadProgress-def"><a name="L104"></a><tt class="py-lineno"> 104</tt>  <tt class="py-line"> </tt>
-<a name="L105"></a><tt class="py-lineno"> 105</tt> <a class="py-toggle" href="#" id="MediaUploadProgress-toggle" onclick="return toggle('MediaUploadProgress');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaUploadProgress-class.html">MediaUploadProgress</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUploadProgress-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaUploadProgress-expanded"><a name="L106"></a><tt class="py-lineno"> 106</tt>  <tt class="py-line">  <tt class="py-docstring">"""Status of a resumable upload."""</tt> </tt>
-<a name="L107"></a><tt class="py-lineno"> 107</tt>  <tt class="py-line"> </tt>
-<a name="MediaUploadProgress.__init__"></a><div id="MediaUploadProgress.__init__-def"><a name="L108"></a><tt class="py-lineno"> 108</tt> <a class="py-toggle" href="#" id="MediaUploadProgress.__init__-toggle" onclick="return toggle('MediaUploadProgress.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUploadProgress-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-param">total_size</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUploadProgress.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUploadProgress.__init__-expanded"><a name="L109"></a><tt class="py-lineno"> 109</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
-<a name="L110"></a><tt class="py-lineno"> 110</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L111"></a><tt class="py-lineno"> 111</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L112"></a><tt class="py-lineno"> 112</tt>  <tt class="py-line"><tt class="py-docstring">      resumable_progress: int, bytes sent so far.</tt> </tt>
-<a name="L113"></a><tt class="py-lineno"> 113</tt>  <tt class="py-line"><tt class="py-docstring">      total_size: int, total bytes in complete upload, or None if the total</tt> </tt>
-<a name="L114"></a><tt class="py-lineno"> 114</tt>  <tt class="py-line"><tt class="py-docstring">        upload size isn't known ahead of time.</tt> </tt>
-<a name="L115"></a><tt class="py-lineno"> 115</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L116"></a><tt class="py-lineno"> 116</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">=</tt> <tt class="py-name">resumable_progress</tt> </tt>
-<a name="L117"></a><tt class="py-lineno"> 117</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">total_size</tt> </tt>
-</div><a name="L118"></a><tt class="py-lineno"> 118</tt>  <tt class="py-line"> </tt>
-<a name="MediaUploadProgress.progress"></a><div id="MediaUploadProgress.progress-def"><a name="L119"></a><tt class="py-lineno"> 119</tt> <a class="py-toggle" href="#" id="MediaUploadProgress.progress-toggle" onclick="return toggle('MediaUploadProgress.progress');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUploadProgress-class.html#progress">progress</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUploadProgress.progress-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUploadProgress.progress-expanded"><a name="L120"></a><tt class="py-lineno"> 120</tt>  <tt class="py-line">    <tt class="py-docstring">"""Percent of upload completed, as a float.</tt> </tt>
-<a name="L121"></a><tt class="py-lineno"> 121</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L122"></a><tt class="py-lineno"> 122</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L123"></a><tt class="py-lineno"> 123</tt>  <tt class="py-line"><tt class="py-docstring">      the percentage complete as a float, returning 0.0 if the total size of</tt> </tt>
-<a name="L124"></a><tt class="py-lineno"> 124</tt>  <tt class="py-line"><tt class="py-docstring">      the upload is unknown.</tt> </tt>
-<a name="L125"></a><tt class="py-lineno"> 125</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L126"></a><tt class="py-lineno"> 126</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L127"></a><tt class="py-lineno"> 127</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt><tt class="py-op">)</tt> </tt>
-<a name="L128"></a><tt class="py-lineno"> 128</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L129"></a><tt class="py-lineno"> 129</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-number">0.0</tt> </tt>
-</div></div><a name="L130"></a><tt class="py-lineno"> 130</tt>  <tt class="py-line"> </tt>
-<a name="MediaDownloadProgress"></a><div id="MediaDownloadProgress-def"><a name="L131"></a><tt class="py-lineno"> 131</tt>  <tt class="py-line"> </tt>
-<a name="L132"></a><tt class="py-lineno"> 132</tt> <a class="py-toggle" href="#" id="MediaDownloadProgress-toggle" onclick="return toggle('MediaDownloadProgress');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaDownloadProgress-class.html">MediaDownloadProgress</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaDownloadProgress-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaDownloadProgress-expanded"><a name="L133"></a><tt class="py-lineno"> 133</tt>  <tt class="py-line">  <tt class="py-docstring">"""Status of a resumable download."""</tt> </tt>
-<a name="L134"></a><tt class="py-lineno"> 134</tt>  <tt class="py-line"> </tt>
-<a name="MediaDownloadProgress.__init__"></a><div id="MediaDownloadProgress.__init__-def"><a name="L135"></a><tt class="py-lineno"> 135</tt> <a class="py-toggle" href="#" id="MediaDownloadProgress.__init__-toggle" onclick="return toggle('MediaDownloadProgress.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaDownloadProgress-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-param">total_size</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaDownloadProgress.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaDownloadProgress.__init__-expanded"><a name="L136"></a><tt class="py-lineno"> 136</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
-<a name="L137"></a><tt class="py-lineno"> 137</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L138"></a><tt class="py-lineno"> 138</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L139"></a><tt class="py-lineno"> 139</tt>  <tt class="py-line"><tt class="py-docstring">      resumable_progress: int, bytes received so far.</tt> </tt>
-<a name="L140"></a><tt class="py-lineno"> 140</tt>  <tt class="py-line"><tt class="py-docstring">      total_size: int, total bytes in complete download.</tt> </tt>
-<a name="L141"></a><tt class="py-lineno"> 141</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L142"></a><tt class="py-lineno"> 142</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">=</tt> <tt class="py-name">resumable_progress</tt> </tt>
-<a name="L143"></a><tt class="py-lineno"> 143</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">total_size</tt> </tt>
-</div><a name="L144"></a><tt class="py-lineno"> 144</tt>  <tt class="py-line"> </tt>
-<a name="MediaDownloadProgress.progress"></a><div id="MediaDownloadProgress.progress-def"><a name="L145"></a><tt class="py-lineno"> 145</tt> <a class="py-toggle" href="#" id="MediaDownloadProgress.progress-toggle" onclick="return toggle('MediaDownloadProgress.progress');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaDownloadProgress-class.html#progress">progress</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaDownloadProgress.progress-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaDownloadProgress.progress-expanded"><a name="L146"></a><tt class="py-lineno"> 146</tt>  <tt class="py-line">    <tt class="py-docstring">"""Percent of download completed, as a float.</tt> </tt>
-<a name="L147"></a><tt class="py-lineno"> 147</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L148"></a><tt class="py-lineno"> 148</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L149"></a><tt class="py-lineno"> 149</tt>  <tt class="py-line"><tt class="py-docstring">      the percentage complete as a float, returning 0.0 if the total size of</tt> </tt>
-<a name="L150"></a><tt class="py-lineno"> 150</tt>  <tt class="py-line"><tt class="py-docstring">      the download is unknown.</tt> </tt>
-<a name="L151"></a><tt class="py-lineno"> 151</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L152"></a><tt class="py-lineno"> 152</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L153"></a><tt class="py-lineno"> 153</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt><tt class="py-op">)</tt> </tt>
-<a name="L154"></a><tt class="py-lineno"> 154</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L155"></a><tt class="py-lineno"> 155</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-number">0.0</tt> </tt>
-</div></div><a name="L156"></a><tt class="py-lineno"> 156</tt>  <tt class="py-line"> </tt>
-<a name="MediaUpload"></a><div id="MediaUpload-def"><a name="L157"></a><tt class="py-lineno"> 157</tt>  <tt class="py-line"> </tt>
-<a name="L158"></a><tt class="py-lineno"> 158</tt> <a class="py-toggle" href="#" id="MediaUpload-toggle" onclick="return toggle('MediaUpload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html">MediaUpload</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaUpload-expanded"><a name="L159"></a><tt class="py-lineno"> 159</tt>  <tt class="py-line">  <tt class="py-docstring">"""Describes a media object to upload.</tt> </tt>
-<a name="L160"></a><tt class="py-lineno"> 160</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L161"></a><tt class="py-lineno"> 161</tt>  <tt class="py-line"><tt class="py-docstring">  Base class that defines the interface of MediaUpload subclasses.</tt> </tt>
-<a name="L162"></a><tt class="py-lineno"> 162</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L163"></a><tt class="py-lineno"> 163</tt>  <tt class="py-line"><tt class="py-docstring">  Note that subclasses of MediaUpload may allow you to control the chunksize</tt> </tt>
-<a name="L164"></a><tt class="py-lineno"> 164</tt>  <tt class="py-line"><tt class="py-docstring">  when uploading a media object. It is important to keep the size of the chunk</tt> </tt>
-<a name="L165"></a><tt class="py-lineno"> 165</tt>  <tt class="py-line"><tt class="py-docstring">  as large as possible to keep the upload efficient. Other factors may influence</tt> </tt>
-<a name="L166"></a><tt class="py-lineno"> 166</tt>  <tt class="py-line"><tt class="py-docstring">  the size of the chunk you use, particularly if you are working in an</tt> </tt>
-<a name="L167"></a><tt class="py-lineno"> 167</tt>  <tt class="py-line"><tt class="py-docstring">  environment where individual HTTP requests may have a hardcoded time limit,</tt> </tt>
-<a name="L168"></a><tt class="py-lineno"> 168</tt>  <tt class="py-line"><tt class="py-docstring">  such as under certain classes of requests under Google App Engine.</tt> </tt>
-<a name="L169"></a><tt class="py-lineno"> 169</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L170"></a><tt class="py-lineno"> 170</tt>  <tt class="py-line"><tt class="py-docstring">  Streams are io.Base compatible objects that support seek(). Some MediaUpload</tt> </tt>
-<a name="L171"></a><tt class="py-lineno"> 171</tt>  <tt class="py-line"><tt class="py-docstring">  subclasses support using streams directly to upload data. Support for</tt> </tt>
-<a name="L172"></a><tt class="py-lineno"> 172</tt>  <tt class="py-line"><tt class="py-docstring">  streaming may be indicated by a MediaUpload sub-class and if appropriate for a</tt> </tt>
-<a name="L173"></a><tt class="py-lineno"> 173</tt>  <tt class="py-line"><tt class="py-docstring">  platform that stream will be used for uploading the media object. The support</tt> </tt>
-<a name="L174"></a><tt class="py-lineno"> 174</tt>  <tt class="py-line"><tt class="py-docstring">  for streaming is indicated by has_stream() returning True. The stream() method</tt> </tt>
-<a name="L175"></a><tt class="py-lineno"> 175</tt>  <tt class="py-line"><tt class="py-docstring">  should return an io.Base object that supports seek(). On platforms where the</tt> </tt>
-<a name="L176"></a><tt class="py-lineno"> 176</tt>  <tt class="py-line"><tt class="py-docstring">  underlying httplib module supports streaming, for example Python 2.6 and</tt> </tt>
-<a name="L177"></a><tt class="py-lineno"> 177</tt>  <tt class="py-line"><tt class="py-docstring">  later, the stream will be passed into the http library which will result in</tt> </tt>
-<a name="L178"></a><tt class="py-lineno"> 178</tt>  <tt class="py-line"><tt class="py-docstring">  less memory being used and possibly faster uploads.</tt> </tt>
-<a name="L179"></a><tt class="py-lineno"> 179</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L180"></a><tt class="py-lineno"> 180</tt>  <tt class="py-line"><tt class="py-docstring">  If you need to upload media that can't be uploaded using any of the existing</tt> </tt>
-<a name="L181"></a><tt class="py-lineno"> 181</tt>  <tt class="py-line"><tt class="py-docstring">  MediaUpload sub-class then you can sub-class MediaUpload for your particular</tt> </tt>
-<a name="L182"></a><tt class="py-lineno"> 182</tt>  <tt class="py-line"><tt class="py-docstring">  needs.</tt> </tt>
-<a name="L183"></a><tt class="py-lineno"> 183</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L184"></a><tt class="py-lineno"> 184</tt>  <tt class="py-line"> </tt>
-<a name="MediaUpload.chunksize"></a><div id="MediaUpload.chunksize-def"><a name="L185"></a><tt class="py-lineno"> 185</tt> <a class="py-toggle" href="#" id="MediaUpload.chunksize-toggle" onclick="return toggle('MediaUpload.chunksize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#chunksize">chunksize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload.chunksize-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.chunksize-expanded"><a name="L186"></a><tt class="py-lineno"> 186</tt>  <tt class="py-line">    <tt class="py-docstring">"""Chunk size for resumable uploads.</tt> </tt>
-<a name="L187"></a><tt class="py-lineno"> 187</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L188"></a><tt class="py-lineno"> 188</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L189"></a><tt class="py-lineno"> 189</tt>  <tt class="py-line"><tt class="py-docstring">      Chunk size in bytes.</tt> </tt>
-<a name="L190"></a><tt class="py-lineno"> 190</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L191"></a><tt class="py-lineno"> 191</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L192"></a><tt class="py-lineno"> 192</tt>  <tt class="py-line"> </tt>
-<a name="MediaUpload.mimetype"></a><div id="MediaUpload.mimetype-def"><a name="L193"></a><tt class="py-lineno"> 193</tt> <a class="py-toggle" href="#" id="MediaUpload.mimetype-toggle" onclick="return toggle('MediaUpload.mimetype');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#mimetype">mimetype</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload.mimetype-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.mimetype-expanded"><a name="L194"></a><tt class="py-lineno"> 194</tt>  <tt class="py-line">    <tt class="py-docstring">"""Mime type of the body.</tt> </tt>
-<a name="L195"></a><tt class="py-lineno"> 195</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L196"></a><tt class="py-lineno"> 196</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L197"></a><tt class="py-lineno"> 197</tt>  <tt class="py-line"><tt class="py-docstring">      Mime type.</tt> </tt>
-<a name="L198"></a><tt class="py-lineno"> 198</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L199"></a><tt class="py-lineno"> 199</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'application/octet-stream'</tt> </tt>
-</div><a name="L200"></a><tt class="py-lineno"> 200</tt>  <tt class="py-line"> </tt>
-<a name="MediaUpload.size"></a><div id="MediaUpload.size-def"><a name="L201"></a><tt class="py-lineno"> 201</tt> <a class="py-toggle" href="#" id="MediaUpload.size-toggle" onclick="return toggle('MediaUpload.size');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#size">size</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload.size-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.size-expanded"><a name="L202"></a><tt class="py-lineno"> 202</tt>  <tt class="py-line">    <tt class="py-docstring">"""Size of upload.</tt> </tt>
-<a name="L203"></a><tt class="py-lineno"> 203</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L204"></a><tt class="py-lineno"> 204</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L205"></a><tt class="py-lineno"> 205</tt>  <tt class="py-line"><tt class="py-docstring">      Size of the body, or None of the size is unknown.</tt> </tt>
-<a name="L206"></a><tt class="py-lineno"> 206</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L207"></a><tt class="py-lineno"> 207</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-</div><a name="L208"></a><tt class="py-lineno"> 208</tt>  <tt class="py-line"> </tt>
-<a name="MediaUpload.resumable"></a><div id="MediaUpload.resumable-def"><a name="L209"></a><tt class="py-lineno"> 209</tt> <a class="py-toggle" href="#" id="MediaUpload.resumable-toggle" onclick="return toggle('MediaUpload.resumable');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#resumable">resumable</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload.resumable-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.resumable-expanded"><a name="L210"></a><tt class="py-lineno"> 210</tt>  <tt class="py-line">    <tt class="py-docstring">"""Whether this upload is resumable.</tt> </tt>
-<a name="L211"></a><tt class="py-lineno"> 211</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L212"></a><tt class="py-lineno"> 212</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L213"></a><tt class="py-lineno"> 213</tt>  <tt class="py-line"><tt class="py-docstring">      True if resumable upload or False.</tt> </tt>
-<a name="L214"></a><tt class="py-lineno"> 214</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L215"></a><tt class="py-lineno"> 215</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L216"></a><tt class="py-lineno"> 216</tt>  <tt class="py-line"> </tt>
-<a name="MediaUpload.getbytes"></a><div id="MediaUpload.getbytes-def"><a name="L217"></a><tt class="py-lineno"> 217</tt> <a class="py-toggle" href="#" id="MediaUpload.getbytes-toggle" onclick="return toggle('MediaUpload.getbytes');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#getbytes">getbytes</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">begin</tt><tt class="py-op">,</tt> <tt class="py-param">end</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload.getbytes-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.getbytes-expanded"><a name="L218"></a><tt class="py-lineno"> 218</tt>  <tt class="py-line">    <tt class="py-docstring">"""Get bytes from the media.</tt> </tt>
-<a name="L219"></a><tt class="py-lineno"> 219</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L220"></a><tt class="py-lineno"> 220</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L221"></a><tt class="py-lineno"> 221</tt>  <tt class="py-line"><tt class="py-docstring">      begin: int, offset from beginning of file.</tt> </tt>
-<a name="L222"></a><tt class="py-lineno"> 222</tt>  <tt class="py-line"><tt class="py-docstring">      length: int, number of bytes to read, starting at begin.</tt> </tt>
-<a name="L223"></a><tt class="py-lineno"> 223</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L224"></a><tt class="py-lineno"> 224</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L225"></a><tt class="py-lineno"> 225</tt>  <tt class="py-line"><tt class="py-docstring">      A string of bytes read. May be shorter than length if EOF was reached</tt> </tt>
-<a name="L226"></a><tt class="py-lineno"> 226</tt>  <tt class="py-line"><tt class="py-docstring">      first.</tt> </tt>
-<a name="L227"></a><tt class="py-lineno"> 227</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L228"></a><tt class="py-lineno"> 228</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L229"></a><tt class="py-lineno"> 229</tt>  <tt class="py-line"> </tt>
-<a name="MediaUpload.has_stream"></a><div id="MediaUpload.has_stream-def"><a name="L230"></a><tt class="py-lineno"> 230</tt> <a class="py-toggle" href="#" id="MediaUpload.has_stream-toggle" onclick="return toggle('MediaUpload.has_stream');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#has_stream">has_stream</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload.has_stream-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.has_stream-expanded"><a name="L231"></a><tt class="py-lineno"> 231</tt>  <tt class="py-line">    <tt class="py-docstring">"""Does the underlying upload support a streaming interface.</tt> </tt>
-<a name="L232"></a><tt class="py-lineno"> 232</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L233"></a><tt class="py-lineno"> 233</tt>  <tt class="py-line"><tt class="py-docstring">    Streaming means it is an io.IOBase subclass that supports seek, i.e.</tt> </tt>
-<a name="L234"></a><tt class="py-lineno"> 234</tt>  <tt class="py-line"><tt class="py-docstring">    seekable() returns True.</tt> </tt>
-<a name="L235"></a><tt class="py-lineno"> 235</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L236"></a><tt class="py-lineno"> 236</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L237"></a><tt class="py-lineno"> 237</tt>  <tt class="py-line"><tt class="py-docstring">      True if the call to stream() will return an instance of a seekable io.Base</tt> </tt>
-<a name="L238"></a><tt class="py-lineno"> 238</tt>  <tt class="py-line"><tt class="py-docstring">      subclass.</tt> </tt>
-<a name="L239"></a><tt class="py-lineno"> 239</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L240"></a><tt class="py-lineno"> 240</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L241"></a><tt class="py-lineno"> 241</tt>  <tt class="py-line"> </tt>
-<a name="MediaUpload.stream"></a><div id="MediaUpload.stream-def"><a name="L242"></a><tt class="py-lineno"> 242</tt> <a class="py-toggle" href="#" id="MediaUpload.stream-toggle" onclick="return toggle('MediaUpload.stream');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#stream">stream</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload.stream-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.stream-expanded"><a name="L243"></a><tt class="py-lineno"> 243</tt>  <tt class="py-line">    <tt class="py-docstring">"""A stream interface to the data being uploaded.</tt> </tt>
-<a name="L244"></a><tt class="py-lineno"> 244</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L245"></a><tt class="py-lineno"> 245</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L246"></a><tt class="py-lineno"> 246</tt>  <tt class="py-line"><tt class="py-docstring">      The returned value is an io.IOBase subclass that supports seek, i.e.</tt> </tt>
-<a name="L247"></a><tt class="py-lineno"> 247</tt>  <tt class="py-line"><tt class="py-docstring">      seekable() returns True.</tt> </tt>
-<a name="L248"></a><tt class="py-lineno"> 248</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L249"></a><tt class="py-lineno"> 249</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L250"></a><tt class="py-lineno"> 250</tt>  <tt class="py-line"> </tt>
-<a name="L251"></a><tt class="py-lineno"> 251</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="MediaUpload._to_json"></a><div id="MediaUpload._to_json-def"><a name="L252"></a><tt class="py-lineno"> 252</tt> <a class="py-toggle" href="#" id="MediaUpload._to_json-toggle" onclick="return toggle('MediaUpload._to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#_to_json">_to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">strip</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload._to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload._to_json-expanded"><a name="L253"></a><tt class="py-lineno"> 253</tt>  <tt class="py-line">    <tt class="py-docstring">"""Utility function for creating a JSON representation of a MediaUpload.</tt> </tt>
-<a name="L254"></a><tt class="py-lineno"> 254</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L255"></a><tt class="py-lineno"> 255</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L256"></a><tt class="py-lineno"> 256</tt>  <tt class="py-line"><tt class="py-docstring">      strip: array, An array of names of members to not include in the JSON.</tt> </tt>
-<a name="L257"></a><tt class="py-lineno"> 257</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L258"></a><tt class="py-lineno"> 258</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L259"></a><tt class="py-lineno"> 259</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
-<a name="L260"></a><tt class="py-lineno"> 260</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
-<a name="L261"></a><tt class="py-lineno"> 261</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L262"></a><tt class="py-lineno"> 262</tt>  <tt class="py-line">    <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L263"></a><tt class="py-lineno"> 263</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
-<a name="L264"></a><tt class="py-lineno"> 264</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">strip</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L265"></a><tt class="py-lineno"> 265</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">member</tt> <tt class="py-keyword">in</tt> <tt class="py-name">strip</tt><tt class="py-op">:</tt> </tt>
-<a name="L266"></a><tt class="py-lineno"> 266</tt>  <tt class="py-line">        <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-name">member</tt><tt class="py-op">]</tt> </tt>
-<a name="L267"></a><tt class="py-lineno"> 267</tt>  <tt class="py-line">    <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_class'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> </tt>
-<a name="L268"></a><tt class="py-lineno"> 268</tt>  <tt class="py-line">    <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_module'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">.</tt><tt class="py-name">__module__</tt> </tt>
-<a name="L269"></a><tt class="py-lineno"> 269</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L270"></a><tt class="py-lineno"> 270</tt>  <tt class="py-line"> </tt>
-<a name="MediaUpload.to_json"></a><div id="MediaUpload.to_json-def"><a name="L271"></a><tt class="py-lineno"> 271</tt> <a class="py-toggle" href="#" id="MediaUpload.to_json-toggle" onclick="return toggle('MediaUpload.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#to_json">to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.to_json-expanded"><a name="L272"></a><tt class="py-lineno"> 272</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create a JSON representation of an instance of MediaUpload.</tt> </tt>
-<a name="L273"></a><tt class="py-lineno"> 273</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L274"></a><tt class="py-lineno"> 274</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L275"></a><tt class="py-lineno"> 275</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
-<a name="L276"></a><tt class="py-lineno"> 276</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
-<a name="L277"></a><tt class="py-lineno"> 277</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L278"></a><tt class="py-lineno"> 278</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Method googleapiclient.http.MediaUpload._to_json()=googleapiclient.http.MediaUpload-class.html#_to_json"><a title="googleapiclient.http.MediaUpload._to_json" class="py-name" href="#" onclick="return doclink('link-27', '_to_json', 'link-27');">_to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L279"></a><tt class="py-lineno"> 279</tt>  <tt class="py-line"> </tt>
-<a name="L280"></a><tt class="py-lineno"> 280</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
-<a name="MediaUpload.new_from_json"></a><div id="MediaUpload.new_from_json-def"><a name="L281"></a><tt class="py-lineno"> 281</tt> <a class="py-toggle" href="#" id="MediaUpload.new_from_json-toggle" onclick="return toggle('MediaUpload.new_from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#new_from_json">new_from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaUpload.new_from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.new_from_json-expanded"><a name="L282"></a><tt class="py-lineno"> 282</tt>  <tt class="py-line">    <tt class="py-docstring">"""Utility class method to instantiate a MediaUpload subclass from a JSON</tt> </tt>
-<a name="L283"></a><tt class="py-lineno"> 283</tt>  <tt class="py-line"><tt class="py-docstring">    representation produced by to_json().</tt> </tt>
-<a name="L284"></a><tt class="py-lineno"> 284</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L285"></a><tt class="py-lineno"> 285</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L286"></a><tt class="py-lineno"> 286</tt>  <tt class="py-line"><tt class="py-docstring">      s: string, JSON from to_json().</tt> </tt>
-<a name="L287"></a><tt class="py-lineno"> 287</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L288"></a><tt class="py-lineno"> 288</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L289"></a><tt class="py-lineno"> 289</tt>  <tt class="py-line"><tt class="py-docstring">      An instance of the subclass of MediaUpload that was serialized with</tt> </tt>
-<a name="L290"></a><tt class="py-lineno"> 290</tt>  <tt class="py-line"><tt class="py-docstring">      to_json().</tt> </tt>
-<a name="L291"></a><tt class="py-lineno"> 291</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L292"></a><tt class="py-lineno"> 292</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-<a name="L293"></a><tt class="py-lineno"> 293</tt>  <tt class="py-line">    <tt class="py-comment"># Find and call the right classmethod from_json() to restore the object.</tt> </tt>
-<a name="L294"></a><tt class="py-lineno"> 294</tt>  <tt class="py-line">    <tt class="py-name">module</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'_module'</tt><tt class="py-op">]</tt> </tt>
-<a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line">    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-name">module</tt><tt class="py-op">,</tt> <tt class="py-name">fromlist</tt><tt class="py-op">=</tt><tt class="py-name">module</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L296"></a><tt class="py-lineno"> 296</tt>  <tt class="py-line">    <tt class="py-name">kls</tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'_class'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L297"></a><tt class="py-lineno"> 297</tt>  <tt class="py-line">    <tt id="link-28" class="py-name" targets="Static Method googleapiclient.http.HttpRequest.from_json()=googleapiclient.http.HttpRequest-class.html#from_json,Static Method googleapiclient.http.MediaFileUpload.from_json()=googleapiclient.http.MediaFileUpload-class.html#from_json"><a title="googleapiclient.http.HttpRequest.from_json
-googleapiclient.http.MediaFileUpload.from_json" class="py-name" href="#" onclick="return doclink('link-28', 'from_json', 'link-28');">from_json</a></tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">kls</tt><tt class="py-op">,</tt> <tt class="py-string">'from_json'</tt><tt class="py-op">)</tt> </tt>
-<a name="L298"></a><tt class="py-lineno"> 298</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-29" class="py-name"><a title="googleapiclient.http.HttpRequest.from_json
-googleapiclient.http.MediaFileUpload.from_json" class="py-name" href="#" onclick="return doclink('link-29', 'from_json', 'link-28');">from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L299"></a><tt class="py-lineno"> 299</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseUpload"></a><div id="MediaIoBaseUpload-def"><a name="L300"></a><tt class="py-lineno"> 300</tt>  <tt class="py-line"> </tt>
-<a name="L301"></a><tt class="py-lineno"> 301</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload-toggle" onclick="return toggle('MediaIoBaseUpload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a><tt class="py-op">(</tt><tt class="py-base-class">MediaUpload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaIoBaseUpload-expanded"><a name="L302"></a><tt class="py-lineno"> 302</tt>  <tt class="py-line">  <tt class="py-docstring">"""A MediaUpload for a io.Base objects.</tt> </tt>
-<a name="L303"></a><tt class="py-lineno"> 303</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L304"></a><tt class="py-lineno"> 304</tt>  <tt class="py-line"><tt class="py-docstring">  Note that the Python file object is compatible with io.Base and can be used</tt> </tt>
-<a name="L305"></a><tt class="py-lineno"> 305</tt>  <tt class="py-line"><tt class="py-docstring">  with this class also.</tt> </tt>
-<a name="L306"></a><tt class="py-lineno"> 306</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L307"></a><tt class="py-lineno"> 307</tt>  <tt class="py-line"><tt class="py-docstring">    fh = BytesIO('...Some data to upload...')</tt> </tt>
-<a name="L308"></a><tt class="py-lineno"> 308</tt>  <tt class="py-line"><tt class="py-docstring">    media = MediaIoBaseUpload(fh, mimetype='image/png',</tt> </tt>
-<a name="L309"></a><tt class="py-lineno"> 309</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize=1024*1024, resumable=True)</tt> </tt>
-<a name="L310"></a><tt class="py-lineno"> 310</tt>  <tt class="py-line"><tt class="py-docstring">    farm.animals().insert(</tt> </tt>
-<a name="L311"></a><tt class="py-lineno"> 311</tt>  <tt class="py-line"><tt class="py-docstring">        id='cow',</tt> </tt>
-<a name="L312"></a><tt class="py-lineno"> 312</tt>  <tt class="py-line"><tt class="py-docstring">        name='cow.png',</tt> </tt>
-<a name="L313"></a><tt class="py-lineno"> 313</tt>  <tt class="py-line"><tt class="py-docstring">        media_body=media).execute()</tt> </tt>
-<a name="L314"></a><tt class="py-lineno"> 314</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L315"></a><tt class="py-lineno"> 315</tt>  <tt class="py-line"><tt class="py-docstring">  Depending on the platform you are working on, you may pass -1 as the</tt> </tt>
-<a name="L316"></a><tt class="py-lineno"> 316</tt>  <tt class="py-line"><tt class="py-docstring">  chunksize, which indicates that the entire file should be uploaded in a single</tt> </tt>
-<a name="L317"></a><tt class="py-lineno"> 317</tt>  <tt class="py-line"><tt class="py-docstring">  request. If the underlying platform supports streams, such as Python 2.6 or</tt> </tt>
-<a name="L318"></a><tt class="py-lineno"> 318</tt>  <tt class="py-line"><tt class="py-docstring">  later, then this can be very efficient as it avoids multiple connections, and</tt> </tt>
-<a name="L319"></a><tt class="py-lineno"> 319</tt>  <tt class="py-line"><tt class="py-docstring">  also avoids loading the entire file into memory before sending it. Note that</tt> </tt>
-<a name="L320"></a><tt class="py-lineno"> 320</tt>  <tt class="py-line"><tt class="py-docstring">  Google App Engine has a 5MB limit on request size, so you should never set</tt> </tt>
-<a name="L321"></a><tt class="py-lineno"> 321</tt>  <tt class="py-line"><tt class="py-docstring">  your chunksize larger than 5MB, or to -1.</tt> </tt>
-<a name="L322"></a><tt class="py-lineno"> 322</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L323"></a><tt class="py-lineno"> 323</tt>  <tt class="py-line"> </tt>
-<a name="L324"></a><tt class="py-lineno"> 324</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
-<a name="MediaIoBaseUpload.__init__"></a><div id="MediaIoBaseUpload.__init__-def"><a name="L325"></a><tt class="py-lineno"> 325</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.__init__-toggle" onclick="return toggle('MediaIoBaseUpload.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">mimetype</tt><tt class="py-op">,</tt> <tt class="py-param">chunksize</tt><tt class="py-op">=</tt><tt id="link-30" class="py-name"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-30', 'DEFAULT_CHUNK_SIZE', 'link-23');">DEFAULT_CHUNK_SIZE</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L326"></a><tt class="py-lineno"> 326</tt>  <tt class="py-line">      <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.__init__-expanded"><a name="L327"></a><tt class="py-lineno"> 327</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
-<a name="L328"></a><tt class="py-lineno"> 328</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L329"></a><tt class="py-lineno"> 329</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L330"></a><tt class="py-lineno"> 330</tt>  <tt class="py-line"><tt class="py-docstring">      fd: io.Base or file object, The source of the bytes to upload. MUST be</tt> </tt>
-<a name="L331"></a><tt class="py-lineno"> 331</tt>  <tt class="py-line"><tt class="py-docstring">        opened in blocking mode, do not use streams opened in non-blocking mode.</tt> </tt>
-<a name="L332"></a><tt class="py-lineno"> 332</tt>  <tt class="py-line"><tt class="py-docstring">        The given stream must be seekable, that is, it must be able to call</tt> </tt>
-<a name="L333"></a><tt class="py-lineno"> 333</tt>  <tt class="py-line"><tt class="py-docstring">        seek() on fd.</tt> </tt>
-<a name="L334"></a><tt class="py-lineno"> 334</tt>  <tt class="py-line"><tt class="py-docstring">      mimetype: string, Mime-type of the file.</tt> </tt>
-<a name="L335"></a><tt class="py-lineno"> 335</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize: int, File will be uploaded in chunks of this many bytes. Only</tt> </tt>
-<a name="L336"></a><tt class="py-lineno"> 336</tt>  <tt class="py-line"><tt class="py-docstring">        used if resumable=True. Pass in a value of -1 if the file is to be</tt> </tt>
-<a name="L337"></a><tt class="py-lineno"> 337</tt>  <tt class="py-line"><tt class="py-docstring">        uploaded as a single chunk. Note that Google App Engine has a 5MB limit</tt> </tt>
-<a name="L338"></a><tt class="py-lineno"> 338</tt>  <tt class="py-line"><tt class="py-docstring">        on request size, so you should never set your chunksize larger than 5MB,</tt> </tt>
-<a name="L339"></a><tt class="py-lineno"> 339</tt>  <tt class="py-line"><tt class="py-docstring">        or to -1.</tt> </tt>
-<a name="L340"></a><tt class="py-lineno"> 340</tt>  <tt class="py-line"><tt class="py-docstring">      resumable: bool, True if this is a resumable upload. False means upload</tt> </tt>
-<a name="L341"></a><tt class="py-lineno"> 341</tt>  <tt class="py-line"><tt class="py-docstring">        in a single request.</tt> </tt>
-<a name="L342"></a><tt class="py-lineno"> 342</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L343"></a><tt class="py-lineno"> 343</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-31" class="py-name" targets="Class googleapiclient.http.MediaIoBaseUpload=googleapiclient.http.MediaIoBaseUpload-class.html"><a title="googleapiclient.http.MediaIoBaseUpload" class="py-name" href="#" onclick="return doclink('link-31', 'MediaIoBaseUpload', 'link-31');">MediaIoBaseUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-32" class="py-name" targets="Method googleapiclient.channel.Channel.__init__()=googleapiclient.channel.Channel-class.html#__init__,Method googleapiclient.channel.Notification.__init__()=googleapiclient.channel.Notification-class.html#__init__,Method googleapiclient.discovery.Resource.__init__()=googleapiclient.discovery.Resource-class.html#__init__,Method googleapiclient.discovery.ResourceMethodParameters.__init__()=googleapiclient.discovery.ResourceMethodParameters-class.html#__init__,Method googleapiclient.discovery_cache.appengine_memcache.Cache.__init__()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#__init__,Method googleapiclient.discovery_cache.file_cache.Cache.__init__()=googleapiclient.discovery_cache.file_cache.Cache-class.html#__init__,Method googleapiclient.errors.BatchError.__init__()=googleapiclient.errors.BatchError-class.html#__init__,Method googleapiclient.errors.HttpError.__init__()=googleapiclient.errors.HttpError-class.html#__init__,Method googleapiclient.errors.UnexpectedBodyError.__init__()=googleapiclient.errors.UnexpectedBodyError-class.html#__init__,Method googleapiclient.errors.UnexpectedMethodError.__init__()=googleapiclient.errors.UnexpectedMethodError-class.html#__init__,Method googleapiclient.http.BatchHttpRequest.__init__()=googleapiclient.http.BatchHttpRequest-class.html#__init__,Method googleapiclient.http.HttpMock.__init__()=googleapiclient.http.HttpMock-class.html#__init__,Method googleapiclient.http.HttpMockSequence.__init__()=googleapiclient.http.HttpMockSequence-class.html#__init__,Method googleapiclient.http.HttpRequest.__init__()=googleapiclient.http.HttpRequest-class.html#__init__,Method googleapiclient.http.HttpRequestMock.__init__()=googleapiclient.http.HttpRequestMock-class.html#__init__,Method googleapiclient.http.MediaDownloadProgress.__init__()=googleapiclient.http.MediaDownloadProgress-class.html#__init__,Method googleapiclient.http.MediaFileUpload.__init__()=googleapiclient.http.MediaFileUpload-class.html#__init__,Method googleapiclient.http.MediaInMemoryUpload.__init__()=googleapiclient.http.MediaInMemoryUpload-class.html#__init__,Method googleapiclient.http.MediaIoBaseDownload.__init__()=googleapiclient.http.MediaIoBaseDownload-class.html#__init__,Method googleapiclient.http.MediaIoBaseUpload.__init__()=googleapiclient.http.MediaIoBaseUpload-class.html#__init__,Method googleapiclient.http.MediaUploadProgress.__init__()=googleapiclient.http.MediaUploadProgress-class.html#__init__,Method googleapiclient.http.RequestMockBuilder.__init__()=googleapiclient.http.RequestMockBuilder-class.html#__init__,Method googleapiclient.http._StreamSlice.__init__()=googleapiclient.http._StreamSlice-class.html#__init__,Method googleapiclient.model.JsonModel.__init__()=googleapiclient.model.JsonModel-class.html#__init__,Method googleapiclient.model.ProtocolBufferModel.__init__()=googleapiclient.model.ProtocolBufferModel-class.html#__init__,Method googleapiclient.schema.Schemas.__init__()=googleapiclient.schema.Schemas-class.html#__init__,Method googleapiclient.schema._SchemaToStruct.__init__()=googleapiclient.schema._SchemaToStruct-class.html#__init__"><a title="googleapiclient.channel.Channel.__init__
-googleapiclient.channel.Notification.__init__
-googleapiclient.discovery.Resource.__init__
-googleapiclient.discovery.ResourceMethodParameters.__init__
-googleapiclient.discovery_cache.appengine_memcache.Cache.__init__
-googleapiclient.discovery_cache.file_cache.Cache.__init__
-googleapiclient.errors.BatchError.__init__
-googleapiclient.errors.HttpError.__init__
-googleapiclient.errors.UnexpectedBodyError.__init__
-googleapiclient.errors.UnexpectedMethodError.__init__
-googleapiclient.http.BatchHttpRequest.__init__
-googleapiclient.http.HttpMock.__init__
-googleapiclient.http.HttpMockSequence.__init__
-googleapiclient.http.HttpRequest.__init__
-googleapiclient.http.HttpRequestMock.__init__
-googleapiclient.http.MediaDownloadProgress.__init__
-googleapiclient.http.MediaFileUpload.__init__
-googleapiclient.http.MediaInMemoryUpload.__init__
-googleapiclient.http.MediaIoBaseDownload.__init__
-googleapiclient.http.MediaIoBaseUpload.__init__
-googleapiclient.http.MediaUploadProgress.__init__
-googleapiclient.http.RequestMockBuilder.__init__
-googleapiclient.http._StreamSlice.__init__
-googleapiclient.model.JsonModel.__init__
-googleapiclient.model.ProtocolBufferModel.__init__
-googleapiclient.schema.Schemas.__init__
-googleapiclient.schema._SchemaToStruct.__init__" class="py-name" href="#" onclick="return doclink('link-32', '__init__', 'link-32');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L344"></a><tt class="py-lineno"> 344</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt> <tt class="py-op">=</tt> <tt class="py-name">fd</tt> </tt>
-<a name="L345"></a><tt class="py-lineno"> 345</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mimetype</tt> <tt class="py-op">=</tt> <tt id="link-33" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.mimetype()=googleapiclient.http.MediaIoBaseUpload-class.html#mimetype,Method googleapiclient.http.MediaUpload.mimetype()=googleapiclient.http.MediaUpload-class.html#mimetype"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-33', 'mimetype', 'link-33');">mimetype</a></tt> </tt>
-<a name="L346"></a><tt class="py-lineno"> 346</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-op">(</tt><tt id="link-34" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.chunksize()=googleapiclient.http.MediaIoBaseUpload-class.html#chunksize,Method googleapiclient.http.MediaUpload.chunksize()=googleapiclient.http.MediaUpload-class.html#chunksize"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-34', 'chunksize', 'link-34');">chunksize</a></tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> <tt class="py-keyword">or</tt> <tt id="link-35" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-35', 'chunksize', 'link-34');">chunksize</a></tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L347"></a><tt class="py-lineno"> 347</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-36" class="py-name"><a title="googleapiclient.errors.InvalidChunkSizeError" class="py-name" href="#" onclick="return doclink('link-36', 'InvalidChunkSizeError', 'link-10');">InvalidChunkSizeError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L348"></a><tt class="py-lineno"> 348</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> <tt class="py-op">=</tt> <tt id="link-37" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-37', 'chunksize', 'link-34');">chunksize</a></tt> </tt>
-<a name="L349"></a><tt class="py-lineno"> 349</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resumable</tt> <tt class="py-op">=</tt> <tt id="link-38" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.resumable()=googleapiclient.http.MediaIoBaseUpload-class.html#resumable,Method googleapiclient.http.MediaUpload.resumable()=googleapiclient.http.MediaUpload-class.html#resumable"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-38', 'resumable', 'link-38');">resumable</a></tt> </tt>
-<a name="L350"></a><tt class="py-lineno"> 350</tt>  <tt class="py-line"> </tt>
-<a name="L351"></a><tt class="py-lineno"> 351</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">SEEK_END</tt><tt class="py-op">)</tt> </tt>
-<a name="L352"></a><tt class="py-lineno"> 352</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_size</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt class="py-name">tell</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L353"></a><tt class="py-lineno"> 353</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseUpload.chunksize"></a><div id="MediaIoBaseUpload.chunksize-def"><a name="L354"></a><tt class="py-lineno"> 354</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.chunksize-toggle" onclick="return toggle('MediaIoBaseUpload.chunksize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#chunksize">chunksize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload.chunksize-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.chunksize-expanded"><a name="L355"></a><tt class="py-lineno"> 355</tt>  <tt class="py-line">    <tt class="py-docstring">"""Chunk size for resumable uploads.</tt> </tt>
-<a name="L356"></a><tt class="py-lineno"> 356</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L357"></a><tt class="py-lineno"> 357</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L358"></a><tt class="py-lineno"> 358</tt>  <tt class="py-line"><tt class="py-docstring">      Chunk size in bytes.</tt> </tt>
-<a name="L359"></a><tt class="py-lineno"> 359</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L360"></a><tt class="py-lineno"> 360</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> </tt>
-</div><a name="L361"></a><tt class="py-lineno"> 361</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseUpload.mimetype"></a><div id="MediaIoBaseUpload.mimetype-def"><a name="L362"></a><tt class="py-lineno"> 362</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.mimetype-toggle" onclick="return toggle('MediaIoBaseUpload.mimetype');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#mimetype">mimetype</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload.mimetype-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.mimetype-expanded"><a name="L363"></a><tt class="py-lineno"> 363</tt>  <tt class="py-line">    <tt class="py-docstring">"""Mime type of the body.</tt> </tt>
-<a name="L364"></a><tt class="py-lineno"> 364</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L365"></a><tt class="py-lineno"> 365</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L366"></a><tt class="py-lineno"> 366</tt>  <tt class="py-line"><tt class="py-docstring">      Mime type.</tt> </tt>
-<a name="L367"></a><tt class="py-lineno"> 367</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L368"></a><tt class="py-lineno"> 368</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mimetype</tt> </tt>
-</div><a name="L369"></a><tt class="py-lineno"> 369</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseUpload.size"></a><div id="MediaIoBaseUpload.size-def"><a name="L370"></a><tt class="py-lineno"> 370</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.size-toggle" onclick="return toggle('MediaIoBaseUpload.size');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#size">size</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload.size-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.size-expanded"><a name="L371"></a><tt class="py-lineno"> 371</tt>  <tt class="py-line">    <tt class="py-docstring">"""Size of upload.</tt> </tt>
-<a name="L372"></a><tt class="py-lineno"> 372</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L373"></a><tt class="py-lineno"> 373</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L374"></a><tt class="py-lineno"> 374</tt>  <tt class="py-line"><tt class="py-docstring">      Size of the body, or None of the size is unknown.</tt> </tt>
-<a name="L375"></a><tt class="py-lineno"> 375</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L376"></a><tt class="py-lineno"> 376</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_size</tt> </tt>
-</div><a name="L377"></a><tt class="py-lineno"> 377</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseUpload.resumable"></a><div id="MediaIoBaseUpload.resumable-def"><a name="L378"></a><tt class="py-lineno"> 378</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.resumable-toggle" onclick="return toggle('MediaIoBaseUpload.resumable');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#resumable">resumable</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload.resumable-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.resumable-expanded"><a name="L379"></a><tt class="py-lineno"> 379</tt>  <tt class="py-line">    <tt class="py-docstring">"""Whether this upload is resumable.</tt> </tt>
-<a name="L380"></a><tt class="py-lineno"> 380</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L381"></a><tt class="py-lineno"> 381</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L382"></a><tt class="py-lineno"> 382</tt>  <tt class="py-line"><tt class="py-docstring">      True if resumable upload or False.</tt> </tt>
-<a name="L383"></a><tt class="py-lineno"> 383</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L384"></a><tt class="py-lineno"> 384</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resumable</tt> </tt>
-</div><a name="L385"></a><tt class="py-lineno"> 385</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseUpload.getbytes"></a><div id="MediaIoBaseUpload.getbytes-def"><a name="L386"></a><tt class="py-lineno"> 386</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.getbytes-toggle" onclick="return toggle('MediaIoBaseUpload.getbytes');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#getbytes">getbytes</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">begin</tt><tt class="py-op">,</tt> <tt class="py-param">length</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload.getbytes-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.getbytes-expanded"><a name="L387"></a><tt class="py-lineno"> 387</tt>  <tt class="py-line">    <tt class="py-docstring">"""Get bytes from the media.</tt> </tt>
-<a name="L388"></a><tt class="py-lineno"> 388</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L389"></a><tt class="py-lineno"> 389</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L390"></a><tt class="py-lineno"> 390</tt>  <tt class="py-line"><tt class="py-docstring">      begin: int, offset from beginning of file.</tt> </tt>
-<a name="L391"></a><tt class="py-lineno"> 391</tt>  <tt class="py-line"><tt class="py-docstring">      length: int, number of bytes to read, starting at begin.</tt> </tt>
-<a name="L392"></a><tt class="py-lineno"> 392</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L393"></a><tt class="py-lineno"> 393</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L394"></a><tt class="py-lineno"> 394</tt>  <tt class="py-line"><tt class="py-docstring">      A string of bytes read. May be shorted than length if EOF was reached</tt> </tt>
-<a name="L395"></a><tt class="py-lineno"> 395</tt>  <tt class="py-line"><tt class="py-docstring">      first.</tt> </tt>
-<a name="L396"></a><tt class="py-lineno"> 396</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L397"></a><tt class="py-lineno"> 397</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-name">begin</tt><tt class="py-op">)</tt> </tt>
-<a name="L398"></a><tt class="py-lineno"> 398</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method googleapiclient.http._StreamSlice.read()=googleapiclient.http._StreamSlice-class.html#read"><a title="googleapiclient.http._StreamSlice.read" class="py-name" href="#" onclick="return doclink('link-39', 'read', 'link-39');">read</a></tt><tt class="py-op">(</tt><tt class="py-name">length</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L399"></a><tt class="py-lineno"> 399</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseUpload.has_stream"></a><div id="MediaIoBaseUpload.has_stream-def"><a name="L400"></a><tt class="py-lineno"> 400</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.has_stream-toggle" onclick="return toggle('MediaIoBaseUpload.has_stream');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#has_stream">has_stream</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload.has_stream-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.has_stream-expanded"><a name="L401"></a><tt class="py-lineno"> 401</tt>  <tt class="py-line">    <tt class="py-docstring">"""Does the underlying upload support a streaming interface.</tt> </tt>
-<a name="L402"></a><tt class="py-lineno"> 402</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L403"></a><tt class="py-lineno"> 403</tt>  <tt class="py-line"><tt class="py-docstring">    Streaming means it is an io.IOBase subclass that supports seek, i.e.</tt> </tt>
-<a name="L404"></a><tt class="py-lineno"> 404</tt>  <tt class="py-line"><tt class="py-docstring">    seekable() returns True.</tt> </tt>
-<a name="L405"></a><tt class="py-lineno"> 405</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L406"></a><tt class="py-lineno"> 406</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L407"></a><tt class="py-lineno"> 407</tt>  <tt class="py-line"><tt class="py-docstring">      True if the call to stream() will return an instance of a seekable io.Base</tt> </tt>
-<a name="L408"></a><tt class="py-lineno"> 408</tt>  <tt class="py-line"><tt class="py-docstring">      subclass.</tt> </tt>
-<a name="L409"></a><tt class="py-lineno"> 409</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L410"></a><tt class="py-lineno"> 410</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-</div><a name="L411"></a><tt class="py-lineno"> 411</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseUpload.stream"></a><div id="MediaIoBaseUpload.stream-def"><a name="L412"></a><tt class="py-lineno"> 412</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.stream-toggle" onclick="return toggle('MediaIoBaseUpload.stream');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#stream">stream</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload.stream-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.stream-expanded"><a name="L413"></a><tt class="py-lineno"> 413</tt>  <tt class="py-line">    <tt class="py-docstring">"""A stream interface to the data being uploaded.</tt> </tt>
-<a name="L414"></a><tt class="py-lineno"> 414</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L415"></a><tt class="py-lineno"> 415</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L416"></a><tt class="py-lineno"> 416</tt>  <tt class="py-line"><tt class="py-docstring">      The returned value is an io.IOBase subclass that supports seek, i.e.</tt> </tt>
-<a name="L417"></a><tt class="py-lineno"> 417</tt>  <tt class="py-line"><tt class="py-docstring">      seekable() returns True.</tt> </tt>
-<a name="L418"></a><tt class="py-lineno"> 418</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L419"></a><tt class="py-lineno"> 419</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt> </tt>
-</div><a name="L420"></a><tt class="py-lineno"> 420</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseUpload.to_json"></a><div id="MediaIoBaseUpload.to_json-def"><a name="L421"></a><tt class="py-lineno"> 421</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.to_json-toggle" onclick="return toggle('MediaIoBaseUpload.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#to_json">to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseUpload.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.to_json-expanded"><a name="L422"></a><tt class="py-lineno"> 422</tt>  <tt class="py-line">    <tt class="py-docstring">"""This upload type is not serializable."""</tt> </tt>
-<a name="L423"></a><tt class="py-lineno"> 423</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">'MediaIoBaseUpload is not serializable.'</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L424"></a><tt class="py-lineno"> 424</tt>  <tt class="py-line"> </tt>
-<a name="MediaFileUpload"></a><div id="MediaFileUpload-def"><a name="L425"></a><tt class="py-lineno"> 425</tt>  <tt class="py-line"> </tt>
-<a name="L426"></a><tt class="py-lineno"> 426</tt> <a class="py-toggle" href="#" id="MediaFileUpload-toggle" onclick="return toggle('MediaFileUpload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaFileUpload-class.html">MediaFileUpload</a><tt class="py-op">(</tt><tt class="py-base-class">MediaIoBaseUpload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaFileUpload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaFileUpload-expanded"><a name="L427"></a><tt class="py-lineno"> 427</tt>  <tt class="py-line">  <tt class="py-docstring">"""A MediaUpload for a file.</tt> </tt>
-<a name="L428"></a><tt class="py-lineno"> 428</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L429"></a><tt class="py-lineno"> 429</tt>  <tt class="py-line"><tt class="py-docstring">  Construct a MediaFileUpload and pass as the media_body parameter of the</tt> </tt>
-<a name="L430"></a><tt class="py-lineno"> 430</tt>  <tt class="py-line"><tt class="py-docstring">  method. For example, if we had a service that allowed uploading images:</tt> </tt>
-<a name="L431"></a><tt class="py-lineno"> 431</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L432"></a><tt class="py-lineno"> 432</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L433"></a><tt class="py-lineno"> 433</tt>  <tt class="py-line"><tt class="py-docstring">    media = MediaFileUpload('cow.png', mimetype='image/png',</tt> </tt>
-<a name="L434"></a><tt class="py-lineno"> 434</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize=1024*1024, resumable=True)</tt> </tt>
-<a name="L435"></a><tt class="py-lineno"> 435</tt>  <tt class="py-line"><tt class="py-docstring">    farm.animals().insert(</tt> </tt>
-<a name="L436"></a><tt class="py-lineno"> 436</tt>  <tt class="py-line"><tt class="py-docstring">        id='cow',</tt> </tt>
-<a name="L437"></a><tt class="py-lineno"> 437</tt>  <tt class="py-line"><tt class="py-docstring">        name='cow.png',</tt> </tt>
-<a name="L438"></a><tt class="py-lineno"> 438</tt>  <tt class="py-line"><tt class="py-docstring">        media_body=media).execute()</tt> </tt>
-<a name="L439"></a><tt class="py-lineno"> 439</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L440"></a><tt class="py-lineno"> 440</tt>  <tt class="py-line"><tt class="py-docstring">  Depending on the platform you are working on, you may pass -1 as the</tt> </tt>
-<a name="L441"></a><tt class="py-lineno"> 441</tt>  <tt class="py-line"><tt class="py-docstring">  chunksize, which indicates that the entire file should be uploaded in a single</tt> </tt>
-<a name="L442"></a><tt class="py-lineno"> 442</tt>  <tt class="py-line"><tt class="py-docstring">  request. If the underlying platform supports streams, such as Python 2.6 or</tt> </tt>
-<a name="L443"></a><tt class="py-lineno"> 443</tt>  <tt class="py-line"><tt class="py-docstring">  later, then this can be very efficient as it avoids multiple connections, and</tt> </tt>
-<a name="L444"></a><tt class="py-lineno"> 444</tt>  <tt class="py-line"><tt class="py-docstring">  also avoids loading the entire file into memory before sending it. Note that</tt> </tt>
-<a name="L445"></a><tt class="py-lineno"> 445</tt>  <tt class="py-line"><tt class="py-docstring">  Google App Engine has a 5MB limit on request size, so you should never set</tt> </tt>
-<a name="L446"></a><tt class="py-lineno"> 446</tt>  <tt class="py-line"><tt class="py-docstring">  your chunksize larger than 5MB, or to -1.</tt> </tt>
-<a name="L447"></a><tt class="py-lineno"> 447</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L448"></a><tt class="py-lineno"> 448</tt>  <tt class="py-line"> </tt>
-<a name="L449"></a><tt class="py-lineno"> 449</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="MediaFileUpload.__init__"></a><div id="MediaFileUpload.__init__-def"><a name="L450"></a><tt class="py-lineno"> 450</tt> <a class="py-toggle" href="#" id="MediaFileUpload.__init__-toggle" onclick="return toggle('MediaFileUpload.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaFileUpload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">mimetype</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">chunksize</tt><tt class="py-op">=</tt><tt id="link-40" class="py-name"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-40', 'DEFAULT_CHUNK_SIZE', 'link-23');">DEFAULT_CHUNK_SIZE</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L451"></a><tt class="py-lineno"> 451</tt>  <tt class="py-line">               <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaFileUpload.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaFileUpload.__init__-expanded"><a name="L452"></a><tt class="py-lineno"> 452</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
-<a name="L453"></a><tt class="py-lineno"> 453</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L454"></a><tt class="py-lineno"> 454</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L455"></a><tt class="py-lineno"> 455</tt>  <tt class="py-line"><tt class="py-docstring">      filename: string, Name of the file.</tt> </tt>
-<a name="L456"></a><tt class="py-lineno"> 456</tt>  <tt class="py-line"><tt class="py-docstring">      mimetype: string, Mime-type of the file. If None then a mime-type will be</tt> </tt>
-<a name="L457"></a><tt class="py-lineno"> 457</tt>  <tt class="py-line"><tt class="py-docstring">        guessed from the file extension.</tt> </tt>
-<a name="L458"></a><tt class="py-lineno"> 458</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize: int, File will be uploaded in chunks of this many bytes. Only</tt> </tt>
-<a name="L459"></a><tt class="py-lineno"> 459</tt>  <tt class="py-line"><tt class="py-docstring">        used if resumable=True. Pass in a value of -1 if the file is to be</tt> </tt>
-<a name="L460"></a><tt class="py-lineno"> 460</tt>  <tt class="py-line"><tt class="py-docstring">        uploaded in a single chunk. Note that Google App Engine has a 5MB limit</tt> </tt>
-<a name="L461"></a><tt class="py-lineno"> 461</tt>  <tt class="py-line"><tt class="py-docstring">        on request size, so you should never set your chunksize larger than 5MB,</tt> </tt>
-<a name="L462"></a><tt class="py-lineno"> 462</tt>  <tt class="py-line"><tt class="py-docstring">        or to -1.</tt> </tt>
-<a name="L463"></a><tt class="py-lineno"> 463</tt>  <tt class="py-line"><tt class="py-docstring">      resumable: bool, True if this is a resumable upload. False means upload</tt> </tt>
-<a name="L464"></a><tt class="py-lineno"> 464</tt>  <tt class="py-line"><tt class="py-docstring">        in a single request.</tt> </tt>
-<a name="L465"></a><tt class="py-lineno"> 465</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L466"></a><tt class="py-lineno"> 466</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_filename</tt> <tt class="py-op">=</tt> <tt class="py-name">filename</tt> </tt>
-<a name="L467"></a><tt class="py-lineno"> 467</tt>  <tt class="py-line">    <tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_filename</tt><tt class="py-op">,</tt> <tt class="py-string">'rb'</tt><tt class="py-op">)</tt> </tt>
-<a name="L468"></a><tt class="py-lineno"> 468</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-41" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-41', 'mimetype', 'link-33');">mimetype</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L469"></a><tt class="py-lineno"> 469</tt>  <tt class="py-line">      <tt class="py-comment"># No mimetype provided, make a guess.</tt> </tt>
-<a name="L470"></a><tt class="py-lineno"> 470</tt>  <tt class="py-line">      <tt id="link-42" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-42', 'mimetype', 'link-33');">mimetype</a></tt><tt class="py-op">,</tt> <tt class="py-name">_</tt> <tt class="py-op">=</tt> <tt class="py-name">mimetypes</tt><tt class="py-op">.</tt><tt class="py-name">guess_type</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt> </tt>
-<a name="L471"></a><tt class="py-lineno"> 471</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt id="link-43" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-43', 'mimetype', 'link-33');">mimetype</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L472"></a><tt class="py-lineno"> 472</tt>  <tt class="py-line">        <tt class="py-comment"># Guess failed, use octet-stream.</tt> </tt>
-<a name="L473"></a><tt class="py-lineno"> 473</tt>  <tt class="py-line">        <tt id="link-44" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-44', 'mimetype', 'link-33');">mimetype</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/octet-stream'</tt> </tt>
-<a name="L474"></a><tt class="py-lineno"> 474</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-45" class="py-name" targets="Class googleapiclient.http.MediaFileUpload=googleapiclient.http.MediaFileUpload-class.html"><a title="googleapiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-45', 'MediaFileUpload', 'link-45');">MediaFileUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="googleapiclient.channel.Channel.__init__
-googleapiclient.channel.Notification.__init__
-googleapiclient.discovery.Resource.__init__
-googleapiclient.discovery.ResourceMethodParameters.__init__
-googleapiclient.discovery_cache.appengine_memcache.Cache.__init__
-googleapiclient.discovery_cache.file_cache.Cache.__init__
-googleapiclient.errors.BatchError.__init__
-googleapiclient.errors.HttpError.__init__
-googleapiclient.errors.UnexpectedBodyError.__init__
-googleapiclient.errors.UnexpectedMethodError.__init__
-googleapiclient.http.BatchHttpRequest.__init__
-googleapiclient.http.HttpMock.__init__
-googleapiclient.http.HttpMockSequence.__init__
-googleapiclient.http.HttpRequest.__init__
-googleapiclient.http.HttpRequestMock.__init__
-googleapiclient.http.MediaDownloadProgress.__init__
-googleapiclient.http.MediaFileUpload.__init__
-googleapiclient.http.MediaInMemoryUpload.__init__
-googleapiclient.http.MediaIoBaseDownload.__init__
-googleapiclient.http.MediaIoBaseUpload.__init__
-googleapiclient.http.MediaUploadProgress.__init__
-googleapiclient.http.RequestMockBuilder.__init__
-googleapiclient.http._StreamSlice.__init__
-googleapiclient.model.JsonModel.__init__
-googleapiclient.model.ProtocolBufferModel.__init__
-googleapiclient.schema.Schemas.__init__
-googleapiclient.schema._SchemaToStruct.__init__" class="py-name" href="#" onclick="return doclink('link-46', '__init__', 'link-32');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt id="link-47" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-47', 'mimetype', 'link-33');">mimetype</a></tt><tt class="py-op">,</tt> <tt id="link-48" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-48', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">=</tt><tt id="link-49" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-49', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L475"></a><tt class="py-lineno"> 475</tt>  <tt class="py-line">                                          <tt id="link-50" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-50', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">=</tt><tt id="link-51" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-51', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L476"></a><tt class="py-lineno"> 476</tt>  <tt class="py-line"> </tt>
-<a name="MediaFileUpload.to_json"></a><div id="MediaFileUpload.to_json-def"><a name="L477"></a><tt class="py-lineno"> 477</tt> <a class="py-toggle" href="#" id="MediaFileUpload.to_json-toggle" onclick="return toggle('MediaFileUpload.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaFileUpload-class.html#to_json">to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaFileUpload.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaFileUpload.to_json-expanded"><a name="L478"></a><tt class="py-lineno"> 478</tt>  <tt class="py-line">    <tt class="py-docstring">"""Creating a JSON representation of an instance of MediaFileUpload.</tt> </tt>
-<a name="L479"></a><tt class="py-lineno"> 479</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L480"></a><tt class="py-lineno"> 480</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L481"></a><tt class="py-lineno"> 481</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
-<a name="L482"></a><tt class="py-lineno"> 482</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
-<a name="L483"></a><tt class="py-lineno"> 483</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L484"></a><tt class="py-lineno"> 484</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="googleapiclient.http.MediaUpload._to_json" class="py-name" href="#" onclick="return doclink('link-52', '_to_json', 'link-27');">_to_json</a></tt><tt class="py-op">(</tt><tt class="py-name">strip</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-string">'_fd'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L485"></a><tt class="py-lineno"> 485</tt>  <tt class="py-line"> </tt>
-<a name="L486"></a><tt class="py-lineno"> 486</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
-<a name="MediaFileUpload.from_json"></a><div id="MediaFileUpload.from_json-def"><a name="L487"></a><tt class="py-lineno"> 487</tt> <a class="py-toggle" href="#" id="MediaFileUpload.from_json-toggle" onclick="return toggle('MediaFileUpload.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaFileUpload-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaFileUpload.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaFileUpload.from_json-expanded"><a name="L488"></a><tt class="py-lineno"> 488</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-<a name="L489"></a><tt class="py-lineno"> 489</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-53" class="py-name"><a title="googleapiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-53', 'MediaFileUpload', 'link-45');">MediaFileUpload</a></tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_filename'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-54" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-54', 'mimetype', 'link-33');">mimetype</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_mimetype'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L490"></a><tt class="py-lineno"> 490</tt>  <tt class="py-line">                           <tt id="link-55" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-55', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_chunksize'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-56" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-56', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_resumable'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L491"></a><tt class="py-lineno"> 491</tt>  <tt class="py-line"> </tt>
-<a name="MediaInMemoryUpload"></a><div id="MediaInMemoryUpload-def"><a name="L492"></a><tt class="py-lineno"> 492</tt>  <tt class="py-line"> </tt>
-<a name="L493"></a><tt class="py-lineno"> 493</tt> <a class="py-toggle" href="#" id="MediaInMemoryUpload-toggle" onclick="return toggle('MediaInMemoryUpload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaInMemoryUpload-class.html">MediaInMemoryUpload</a><tt class="py-op">(</tt><tt class="py-base-class">MediaIoBaseUpload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaInMemoryUpload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaInMemoryUpload-expanded"><a name="L494"></a><tt class="py-lineno"> 494</tt>  <tt class="py-line">  <tt class="py-docstring">"""MediaUpload for a chunk of bytes.</tt> </tt>
-<a name="L495"></a><tt class="py-lineno"> 495</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L496"></a><tt class="py-lineno"> 496</tt>  <tt class="py-line"><tt class="py-docstring">  DEPRECATED: Use MediaIoBaseUpload with either io.TextIOBase or StringIO for</tt> </tt>
-<a name="L497"></a><tt class="py-lineno"> 497</tt>  <tt class="py-line"><tt class="py-docstring">  the stream.</tt> </tt>
-<a name="L498"></a><tt class="py-lineno"> 498</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L499"></a><tt class="py-lineno"> 499</tt>  <tt class="py-line"> </tt>
-<a name="L500"></a><tt class="py-lineno"> 500</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="MediaInMemoryUpload.__init__"></a><div id="MediaInMemoryUpload.__init__-def"><a name="L501"></a><tt class="py-lineno"> 501</tt> <a class="py-toggle" href="#" id="MediaInMemoryUpload.__init__-toggle" onclick="return toggle('MediaInMemoryUpload.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaInMemoryUpload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">,</tt> <tt class="py-param">mimetype</tt><tt class="py-op">=</tt><tt class="py-string">'application/octet-stream'</tt><tt class="py-op">,</tt> </tt>
-<a name="L502"></a><tt class="py-lineno"> 502</tt>  <tt class="py-line">               <tt class="py-param">chunksize</tt><tt class="py-op">=</tt><tt id="link-57" class="py-name"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-57', 'DEFAULT_CHUNK_SIZE', 'link-23');">DEFAULT_CHUNK_SIZE</a></tt><tt class="py-op">,</tt> <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaInMemoryUpload.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaInMemoryUpload.__init__-expanded"><a name="L503"></a><tt class="py-lineno"> 503</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create a new MediaInMemoryUpload.</tt> </tt>
-<a name="L504"></a><tt class="py-lineno"> 504</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L505"></a><tt class="py-lineno"> 505</tt>  <tt class="py-line"><tt class="py-docstring">  DEPRECATED: Use MediaIoBaseUpload with either io.TextIOBase or StringIO for</tt> </tt>
-<a name="L506"></a><tt class="py-lineno"> 506</tt>  <tt class="py-line"><tt class="py-docstring">  the stream.</tt> </tt>
-<a name="L507"></a><tt class="py-lineno"> 507</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L508"></a><tt class="py-lineno"> 508</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L509"></a><tt class="py-lineno"> 509</tt>  <tt class="py-line"><tt class="py-docstring">    body: string, Bytes of body content.</tt> </tt>
-<a name="L510"></a><tt class="py-lineno"> 510</tt>  <tt class="py-line"><tt class="py-docstring">    mimetype: string, Mime-type of the file or default of</tt> </tt>
-<a name="L511"></a><tt class="py-lineno"> 511</tt>  <tt class="py-line"><tt class="py-docstring">      'application/octet-stream'.</tt> </tt>
-<a name="L512"></a><tt class="py-lineno"> 512</tt>  <tt class="py-line"><tt class="py-docstring">    chunksize: int, File will be uploaded in chunks of this many bytes. Only</tt> </tt>
-<a name="L513"></a><tt class="py-lineno"> 513</tt>  <tt class="py-line"><tt class="py-docstring">      used if resumable=True.</tt> </tt>
-<a name="L514"></a><tt class="py-lineno"> 514</tt>  <tt class="py-line"><tt class="py-docstring">    resumable: bool, True if this is a resumable upload. False means upload</tt> </tt>
-<a name="L515"></a><tt class="py-lineno"> 515</tt>  <tt class="py-line"><tt class="py-docstring">      in a single request.</tt> </tt>
-<a name="L516"></a><tt class="py-lineno"> 516</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L517"></a><tt class="py-lineno"> 517</tt>  <tt class="py-line">    <tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt><tt id="link-58" class="py-name" targets="Method googleapiclient.channel.Channel.body()=googleapiclient.channel.Channel-class.html#body"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-58', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L518"></a><tt class="py-lineno"> 518</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-59" class="py-name" targets="Class googleapiclient.http.MediaInMemoryUpload=googleapiclient.http.MediaInMemoryUpload-class.html"><a title="googleapiclient.http.MediaInMemoryUpload" class="py-name" href="#" onclick="return doclink('link-59', 'MediaInMemoryUpload', 'link-59');">MediaInMemoryUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="googleapiclient.channel.Channel.__init__
-googleapiclient.channel.Notification.__init__
-googleapiclient.discovery.Resource.__init__
-googleapiclient.discovery.ResourceMethodParameters.__init__
-googleapiclient.discovery_cache.appengine_memcache.Cache.__init__
-googleapiclient.discovery_cache.file_cache.Cache.__init__
-googleapiclient.errors.BatchError.__init__
-googleapiclient.errors.HttpError.__init__
-googleapiclient.errors.UnexpectedBodyError.__init__
-googleapiclient.errors.UnexpectedMethodError.__init__
-googleapiclient.http.BatchHttpRequest.__init__
-googleapiclient.http.HttpMock.__init__
-googleapiclient.http.HttpMockSequence.__init__
-googleapiclient.http.HttpRequest.__init__
-googleapiclient.http.HttpRequestMock.__init__
-googleapiclient.http.MediaDownloadProgress.__init__
-googleapiclient.http.MediaFileUpload.__init__
-googleapiclient.http.MediaInMemoryUpload.__init__
-googleapiclient.http.MediaIoBaseDownload.__init__
-googleapiclient.http.MediaIoBaseUpload.__init__
-googleapiclient.http.MediaUploadProgress.__init__
-googleapiclient.http.RequestMockBuilder.__init__
-googleapiclient.http._StreamSlice.__init__
-googleapiclient.model.JsonModel.__init__
-googleapiclient.model.ProtocolBufferModel.__init__
-googleapiclient.schema.Schemas.__init__
-googleapiclient.schema._SchemaToStruct.__init__" class="py-name" href="#" onclick="return doclink('link-60', '__init__', 'link-32');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt id="link-61" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-61', 'mimetype', 'link-33');">mimetype</a></tt><tt class="py-op">,</tt> <tt id="link-62" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-62', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">=</tt><tt id="link-63" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-63', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L519"></a><tt class="py-lineno"> 519</tt>  <tt class="py-line">                                              <tt id="link-64" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-64', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">=</tt><tt id="link-65" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-65', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L520"></a><tt class="py-lineno"> 520</tt>  <tt class="py-line"> </tt>
-<a name="MediaIoBaseDownload"></a><div id="MediaIoBaseDownload-def"><a name="L521"></a><tt class="py-lineno"> 521</tt>  <tt class="py-line"> </tt>
-<a name="L522"></a><tt class="py-lineno"> 522</tt> <a class="py-toggle" href="#" id="MediaIoBaseDownload-toggle" onclick="return toggle('MediaIoBaseDownload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseDownload-class.html">MediaIoBaseDownload</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseDownload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaIoBaseDownload-expanded"><a name="L523"></a><tt class="py-lineno"> 523</tt>  <tt class="py-line">  <tt class="py-docstring">""""Download media resources.</tt> </tt>
-<a name="L524"></a><tt class="py-lineno"> 524</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L525"></a><tt class="py-lineno"> 525</tt>  <tt class="py-line"><tt class="py-docstring">  Note that the Python file object is compatible with io.Base and can be used</tt> </tt>
-<a name="L526"></a><tt class="py-lineno"> 526</tt>  <tt class="py-line"><tt class="py-docstring">  with this class also.</tt> </tt>
-<a name="L527"></a><tt class="py-lineno"> 527</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L528"></a><tt class="py-lineno"> 528</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L529"></a><tt class="py-lineno"> 529</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
-<a name="L530"></a><tt class="py-lineno"> 530</tt>  <tt class="py-line"><tt class="py-docstring">    request = farms.animals().get_media(id='cow')</tt> </tt>
-<a name="L531"></a><tt class="py-lineno"> 531</tt>  <tt class="py-line"><tt class="py-docstring">    fh = io.FileIO('cow.png', mode='wb')</tt> </tt>
-<a name="L532"></a><tt class="py-lineno"> 532</tt>  <tt class="py-line"><tt class="py-docstring">    downloader = MediaIoBaseDownload(fh, request, chunksize=1024*1024)</tt> </tt>
-<a name="L533"></a><tt class="py-lineno"> 533</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L534"></a><tt class="py-lineno"> 534</tt>  <tt class="py-line"><tt class="py-docstring">    done = False</tt> </tt>
-<a name="L535"></a><tt class="py-lineno"> 535</tt>  <tt class="py-line"><tt class="py-docstring">    while done is False:</tt> </tt>
-<a name="L536"></a><tt class="py-lineno"> 536</tt>  <tt class="py-line"><tt class="py-docstring">      status, done = downloader.next_chunk()</tt> </tt>
-<a name="L537"></a><tt class="py-lineno"> 537</tt>  <tt class="py-line"><tt class="py-docstring">      if status:</tt> </tt>
-<a name="L538"></a><tt class="py-lineno"> 538</tt>  <tt class="py-line"><tt class="py-docstring">        print "Download %d%%." % int(status.progress() * 100)</tt> </tt>
-<a name="L539"></a><tt class="py-lineno"> 539</tt>  <tt class="py-line"><tt class="py-docstring">    print "Download Complete!"</tt> </tt>
-<a name="L540"></a><tt class="py-lineno"> 540</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L541"></a><tt class="py-lineno"> 541</tt>  <tt class="py-line"> </tt>
-<a name="L542"></a><tt class="py-lineno"> 542</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
-<a name="MediaIoBaseDownload.__init__"></a><div id="MediaIoBaseDownload.__init__-def"><a name="L543"></a><tt class="py-lineno"> 543</tt> <a class="py-toggle" href="#" id="MediaIoBaseDownload.__init__-toggle" onclick="return toggle('MediaIoBaseDownload.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseDownload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">request</tt><tt class="py-op">,</tt> <tt class="py-param">chunksize</tt><tt class="py-op">=</tt><tt id="link-66" class="py-name"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-66', 'DEFAULT_CHUNK_SIZE', 'link-23');">DEFAULT_CHUNK_SIZE</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseDownload.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseDownload.__init__-expanded"><a name="L544"></a><tt class="py-lineno"> 544</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
-<a name="L545"></a><tt class="py-lineno"> 545</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L546"></a><tt class="py-lineno"> 546</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L547"></a><tt class="py-lineno"> 547</tt>  <tt class="py-line"><tt class="py-docstring">      fd: io.Base or file object, The stream in which to write the downloaded</tt> </tt>
-<a name="L548"></a><tt class="py-lineno"> 548</tt>  <tt class="py-line"><tt class="py-docstring">        bytes.</tt> </tt>
-<a name="L549"></a><tt class="py-lineno"> 549</tt>  <tt class="py-line"><tt class="py-docstring">      request: googleapiclient.http.HttpRequest, the media request to perform in</tt> </tt>
-<a name="L550"></a><tt class="py-lineno"> 550</tt>  <tt class="py-line"><tt class="py-docstring">        chunks.</tt> </tt>
-<a name="L551"></a><tt class="py-lineno"> 551</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize: int, File will be downloaded in chunks of this many bytes.</tt> </tt>
-<a name="L552"></a><tt class="py-lineno"> 552</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L553"></a><tt class="py-lineno"> 553</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt> <tt class="py-op">=</tt> <tt class="py-name">fd</tt> </tt>
-<a name="L554"></a><tt class="py-lineno"> 554</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_request</tt> <tt class="py-op">=</tt> <tt id="link-67" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-67', 'request', 'link-26');">request</a></tt> </tt>
-<a name="L555"></a><tt class="py-lineno"> 555</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt> <tt class="py-op">=</tt> <tt id="link-68" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-68', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> </tt>
-<a name="L556"></a><tt class="py-lineno"> 556</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> <tt class="py-op">=</tt> <tt id="link-69" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-69', 'chunksize', 'link-34');">chunksize</a></tt> </tt>
-<a name="L557"></a><tt class="py-lineno"> 557</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L558"></a><tt class="py-lineno"> 558</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L559"></a><tt class="py-lineno"> 559</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_done</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L560"></a><tt class="py-lineno"> 560</tt>  <tt class="py-line"> </tt>
-<a name="L561"></a><tt class="py-lineno"> 561</tt>  <tt class="py-line">    <tt class="py-comment"># Stubs for testing.</tt> </tt>
-<a name="L562"></a><tt class="py-lineno"> 562</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt> </tt>
-<a name="L563"></a><tt class="py-lineno"> 563</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt> <tt class="py-op">=</tt> <tt class="py-name">random</tt><tt class="py-op">.</tt><tt class="py-name">random</tt> </tt>
-</div><a name="L564"></a><tt class="py-lineno"> 564</tt>  <tt class="py-line"> </tt>
-<a name="L565"></a><tt class="py-lineno"> 565</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="MediaIoBaseDownload.next_chunk"></a><div id="MediaIoBaseDownload.next_chunk-def"><a name="L566"></a><tt class="py-lineno"> 566</tt> <a class="py-toggle" href="#" id="MediaIoBaseDownload.next_chunk-toggle" onclick="return toggle('MediaIoBaseDownload.next_chunk');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseDownload-class.html#next_chunk">next_chunk</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">num_retries</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaIoBaseDownload.next_chunk-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseDownload.next_chunk-expanded"><a name="L567"></a><tt class="py-lineno"> 567</tt>  <tt class="py-line">    <tt class="py-docstring">"""Get the next chunk of the download.</tt> </tt>
-<a name="L568"></a><tt class="py-lineno"> 568</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L569"></a><tt class="py-lineno"> 569</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L570"></a><tt class="py-lineno"> 570</tt>  <tt class="py-line"><tt class="py-docstring">      num_retries: Integer, number of times to retry 500's with randomized</tt> </tt>
-<a name="L571"></a><tt class="py-lineno"> 571</tt>  <tt class="py-line"><tt class="py-docstring">            exponential backoff. If all retries fail, the raised HttpError</tt> </tt>
-<a name="L572"></a><tt class="py-lineno"> 572</tt>  <tt class="py-line"><tt class="py-docstring">            represents the last request. If zero (default), we attempt the</tt> </tt>
-<a name="L573"></a><tt class="py-lineno"> 573</tt>  <tt class="py-line"><tt class="py-docstring">            request only once.</tt> </tt>
-<a name="L574"></a><tt class="py-lineno"> 574</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L575"></a><tt class="py-lineno"> 575</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L576"></a><tt class="py-lineno"> 576</tt>  <tt class="py-line"><tt class="py-docstring">      (status, done): (MediaDownloadStatus, boolean)</tt> </tt>
-<a name="L577"></a><tt class="py-lineno"> 577</tt>  <tt class="py-line"><tt class="py-docstring">         The value of 'done' will be True when the media has been fully</tt> </tt>
-<a name="L578"></a><tt class="py-lineno"> 578</tt>  <tt class="py-line"><tt class="py-docstring">         downloaded.</tt> </tt>
-<a name="L579"></a><tt class="py-lineno"> 579</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L580"></a><tt class="py-lineno"> 580</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L581"></a><tt class="py-lineno"> 581</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if the response was not a 2xx.</tt> </tt>
-<a name="L582"></a><tt class="py-lineno"> 582</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
-<a name="L583"></a><tt class="py-lineno"> 583</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L584"></a><tt class="py-lineno"> 584</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L585"></a><tt class="py-lineno"> 585</tt>  <tt class="py-line">        <tt class="py-string">'range'</tt><tt class="py-op">:</tt> <tt class="py-string">'bytes=%d-%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L586"></a><tt class="py-lineno"> 586</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt><tt class="py-op">)</tt> </tt>
-<a name="L587"></a><tt class="py-lineno"> 587</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
-<a name="L588"></a><tt class="py-lineno"> 588</tt>  <tt class="py-line">    <tt id="link-70" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-70', 'http', 'link-25');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_request</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-71', 'http', 'link-25');">http</a></tt> </tt>
-<a name="L589"></a><tt class="py-lineno"> 589</tt>  <tt class="py-line"> </tt>
-<a name="L590"></a><tt class="py-lineno"> 590</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-72" class="py-name" targets="Function googleapiclient.http._retry_request()=googleapiclient.http-module.html#_retry_request"><a title="googleapiclient.http._retry_request" class="py-name" href="#" onclick="return doclink('link-72', '_retry_request', 'link-72');">_retry_request</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L591"></a><tt class="py-lineno"> 591</tt>  <tt class="py-line">        <tt id="link-73" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-73', 'http', 'link-25');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">num_retries</tt><tt class="py-op">,</tt> <tt class="py-string">'media download'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L592"></a><tt class="py-lineno"> 592</tt>  <tt class="py-line">        <tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L593"></a><tt class="py-lineno"> 593</tt>  <tt class="py-line"> </tt>
-<a name="L594"></a><tt class="py-lineno"> 594</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-number">200</tt><tt class="py-op">,</tt> <tt class="py-number">206</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L595"></a><tt class="py-lineno"> 595</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'content-location'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt> <tt class="py-keyword">and</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-location'</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt><tt class="py-op">:</tt> </tt>
-<a name="L596"></a><tt class="py-lineno"> 596</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-location'</tt><tt class="py-op">]</tt> </tt>
-<a name="L597"></a><tt class="py-lineno"> 597</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L598"></a><tt class="py-lineno"> 598</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L599"></a><tt class="py-lineno"> 599</tt>  <tt class="py-line"> </tt>
-<a name="L600"></a><tt class="py-lineno"> 600</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'content-range'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
-<a name="L601"></a><tt class="py-lineno"> 601</tt>  <tt class="py-line">        <tt class="py-name">content_range</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-range'</tt><tt class="py-op">]</tt> </tt>
-<a name="L602"></a><tt class="py-lineno"> 602</tt>  <tt class="py-line">        <tt class="py-name">length</tt> <tt class="py-op">=</tt> <tt class="py-name">content_range</tt><tt class="py-op">.</tt><tt class="py-name">rsplit</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L603"></a><tt class="py-lineno"> 603</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">length</tt><tt class="py-op">)</tt> </tt>
-<a name="L604"></a><tt class="py-lineno"> 604</tt>  <tt class="py-line">      <tt class="py-keyword">elif</tt> <tt class="py-string">'content-length'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
-<a name="L605"></a><tt class="py-lineno"> 605</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L606"></a><tt class="py-lineno"> 606</tt>  <tt class="py-line"> </tt>
-<a name="L607"></a><tt class="py-lineno"> 607</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt><tt class="py-op">:</tt> </tt>
-<a name="L608"></a><tt class="py-lineno"> 608</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_done</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L609"></a><tt class="py-lineno"> 609</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-74" class="py-name" targets="Class googleapiclient.http.MediaDownloadProgress=googleapiclient.http.MediaDownloadProgress-class.html"><a title="googleapiclient.http.MediaDownloadProgress" class="py-name" href="#" onclick="return doclink('link-74', 'MediaDownloadProgress', 'link-74');">MediaDownloadProgress</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_done</tt> </tt>
-<a name="L610"></a><tt class="py-lineno"> 610</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L611"></a><tt class="py-lineno"> 611</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-75" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-75', 'HttpError', 'link-7');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L612"></a><tt class="py-lineno"> 612</tt>  <tt class="py-line"> </tt>
-<a name="_StreamSlice"></a><div id="_StreamSlice-def"><a name="L613"></a><tt class="py-lineno"> 613</tt>  <tt class="py-line"> </tt>
-<a name="L614"></a><tt class="py-lineno"> 614</tt> <a class="py-toggle" href="#" id="_StreamSlice-toggle" onclick="return toggle('_StreamSlice');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http._StreamSlice-class.html">_StreamSlice</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_StreamSlice-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_StreamSlice-expanded"><a name="L615"></a><tt class="py-lineno"> 615</tt>  <tt class="py-line">  <tt class="py-docstring">"""Truncated stream.</tt> </tt>
-<a name="L616"></a><tt class="py-lineno"> 616</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L617"></a><tt class="py-lineno"> 617</tt>  <tt class="py-line"><tt class="py-docstring">  Takes a stream and presents a stream that is a slice of the original stream.</tt> </tt>
-<a name="L618"></a><tt class="py-lineno"> 618</tt>  <tt class="py-line"><tt class="py-docstring">  This is used when uploading media in chunks. In later versions of Python a</tt> </tt>
-<a name="L619"></a><tt class="py-lineno"> 619</tt>  <tt class="py-line"><tt class="py-docstring">  stream can be passed to httplib in place of the string of data to send. The</tt> </tt>
-<a name="L620"></a><tt class="py-lineno"> 620</tt>  <tt class="py-line"><tt class="py-docstring">  problem is that httplib just blindly reads to the end of the stream. This</tt> </tt>
-<a name="L621"></a><tt class="py-lineno"> 621</tt>  <tt class="py-line"><tt class="py-docstring">  wrapper presents a virtual stream that only reads to the end of the chunk.</tt> </tt>
-<a name="L622"></a><tt class="py-lineno"> 622</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L623"></a><tt class="py-lineno"> 623</tt>  <tt class="py-line"> </tt>
-<a name="_StreamSlice.__init__"></a><div id="_StreamSlice.__init__-def"><a name="L624"></a><tt class="py-lineno"> 624</tt> <a class="py-toggle" href="#" id="_StreamSlice.__init__-toggle" onclick="return toggle('_StreamSlice.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http._StreamSlice-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">,</tt> <tt class="py-param">begin</tt><tt class="py-op">,</tt> <tt class="py-param">chunksize</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_StreamSlice.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="_StreamSlice.__init__-expanded"><a name="L625"></a><tt class="py-lineno"> 625</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
-<a name="L626"></a><tt class="py-lineno"> 626</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L627"></a><tt class="py-lineno"> 627</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L628"></a><tt class="py-lineno"> 628</tt>  <tt class="py-line"><tt class="py-docstring">      stream: (io.Base, file object), the stream to wrap.</tt> </tt>
-<a name="L629"></a><tt class="py-lineno"> 629</tt>  <tt class="py-line"><tt class="py-docstring">      begin: int, the seek position the chunk begins at.</tt> </tt>
-<a name="L630"></a><tt class="py-lineno"> 630</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize: int, the size of the chunk.</tt> </tt>
-<a name="L631"></a><tt class="py-lineno"> 631</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L632"></a><tt class="py-lineno"> 632</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_stream</tt> <tt class="py-op">=</tt> <tt id="link-76" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.stream()=googleapiclient.http.MediaIoBaseUpload-class.html#stream,Method googleapiclient.http.MediaUpload.stream()=googleapiclient.http.MediaUpload-class.html#stream"><a title="googleapiclient.http.MediaIoBaseUpload.stream
-googleapiclient.http.MediaUpload.stream" class="py-name" href="#" onclick="return doclink('link-76', 'stream', 'link-76');">stream</a></tt> </tt>
-<a name="L633"></a><tt class="py-lineno"> 633</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_begin</tt> <tt class="py-op">=</tt> <tt class="py-name">begin</tt> </tt>
-<a name="L634"></a><tt class="py-lineno"> 634</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> <tt class="py-op">=</tt> <tt id="link-77" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-77', 'chunksize', 'link-34');">chunksize</a></tt> </tt>
-<a name="L635"></a><tt class="py-lineno"> 635</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_stream</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-name">begin</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L636"></a><tt class="py-lineno"> 636</tt>  <tt class="py-line"> </tt>
-<a name="_StreamSlice.read"></a><div id="_StreamSlice.read-def"><a name="L637"></a><tt class="py-lineno"> 637</tt> <a class="py-toggle" href="#" id="_StreamSlice.read-toggle" onclick="return toggle('_StreamSlice.read');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http._StreamSlice-class.html#read">read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">n</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_StreamSlice.read-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="_StreamSlice.read-expanded"><a name="L638"></a><tt class="py-lineno"> 638</tt>  <tt class="py-line">    <tt class="py-docstring">"""Read n bytes.</tt> </tt>
-<a name="L639"></a><tt class="py-lineno"> 639</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L640"></a><tt class="py-lineno"> 640</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L641"></a><tt class="py-lineno"> 641</tt>  <tt class="py-line"><tt class="py-docstring">      n, int, the number of bytes to read.</tt> </tt>
-<a name="L642"></a><tt class="py-lineno"> 642</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L643"></a><tt class="py-lineno"> 643</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L644"></a><tt class="py-lineno"> 644</tt>  <tt class="py-line"><tt class="py-docstring">      A string of length 'n', or less if EOF is reached.</tt> </tt>
-<a name="L645"></a><tt class="py-lineno"> 645</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L646"></a><tt class="py-lineno"> 646</tt>  <tt class="py-line">    <tt class="py-comment"># The data left available to read sits in [cur, end)</tt> </tt>
-<a name="L647"></a><tt class="py-lineno"> 647</tt>  <tt class="py-line">    <tt class="py-name">cur</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_stream</tt><tt class="py-op">.</tt><tt class="py-name">tell</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L648"></a><tt class="py-lineno"> 648</tt>  <tt class="py-line">    <tt class="py-name">end</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_begin</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> </tt>
-<a name="L649"></a><tt class="py-lineno"> 649</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">n</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> <tt class="py-keyword">or</tt> <tt class="py-name">cur</tt> <tt class="py-op">+</tt> <tt class="py-name">n</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">end</tt><tt class="py-op">:</tt> </tt>
-<a name="L650"></a><tt class="py-lineno"> 650</tt>  <tt class="py-line">      <tt class="py-name">n</tt> <tt class="py-op">=</tt> <tt class="py-name">end</tt> <tt class="py-op">-</tt> <tt class="py-name">cur</tt> </tt>
-<a name="L651"></a><tt class="py-lineno"> 651</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_stream</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="googleapiclient.http._StreamSlice.read" class="py-name" href="#" onclick="return doclink('link-78', 'read', 'link-39');">read</a></tt><tt class="py-op">(</tt><tt class="py-name">n</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L652"></a><tt class="py-lineno"> 652</tt>  <tt class="py-line"> </tt>
-<a name="HttpRequest"></a><div id="HttpRequest-def"><a name="L653"></a><tt class="py-lineno"> 653</tt>  <tt class="py-line"> </tt>
-<a name="L654"></a><tt class="py-lineno"> 654</tt> <a class="py-toggle" href="#" id="HttpRequest-toggle" onclick="return toggle('HttpRequest');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html">HttpRequest</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequest-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HttpRequest-expanded"><a name="L655"></a><tt class="py-lineno"> 655</tt>  <tt class="py-line">  <tt class="py-docstring">"""Encapsulates a single HTTP request."""</tt> </tt>
-<a name="L656"></a><tt class="py-lineno"> 656</tt>  <tt class="py-line"> </tt>
-<a name="L657"></a><tt class="py-lineno"> 657</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
-<a name="HttpRequest.__init__"></a><div id="HttpRequest.__init__-def"><a name="L658"></a><tt class="py-lineno"> 658</tt> <a class="py-toggle" href="#" id="HttpRequest.__init__-toggle" onclick="return toggle('HttpRequest.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">postproc</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L659"></a><tt class="py-lineno"> 659</tt>  <tt class="py-line">               <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> </tt>
-<a name="L660"></a><tt class="py-lineno"> 660</tt>  <tt class="py-line">               <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L661"></a><tt class="py-lineno"> 661</tt>  <tt class="py-line">               <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L662"></a><tt class="py-lineno"> 662</tt>  <tt class="py-line">               <tt class="py-param">methodId</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L663"></a><tt class="py-lineno"> 663</tt>  <tt class="py-line">               <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequest.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.__init__-expanded"><a name="L664"></a><tt class="py-lineno"> 664</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for an HttpRequest.</tt> </tt>
-<a name="L665"></a><tt class="py-lineno"> 665</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L666"></a><tt class="py-lineno"> 666</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L667"></a><tt class="py-lineno"> 667</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, the transport object to use to make a request</tt> </tt>
-<a name="L668"></a><tt class="py-lineno"> 668</tt>  <tt class="py-line"><tt class="py-docstring">      postproc: callable, called on the HTTP response and content to transform</tt> </tt>
-<a name="L669"></a><tt class="py-lineno"> 669</tt>  <tt class="py-line"><tt class="py-docstring">                it into a data object before returning, or raising an exception</tt> </tt>
-<a name="L670"></a><tt class="py-lineno"> 670</tt>  <tt class="py-line"><tt class="py-docstring">                on an error.</tt> </tt>
-<a name="L671"></a><tt class="py-lineno"> 671</tt>  <tt class="py-line"><tt class="py-docstring">      uri: string, the absolute URI to send the request to</tt> </tt>
-<a name="L672"></a><tt class="py-lineno"> 672</tt>  <tt class="py-line"><tt class="py-docstring">      method: string, the HTTP method to use</tt> </tt>
-<a name="L673"></a><tt class="py-lineno"> 673</tt>  <tt class="py-line"><tt class="py-docstring">      body: string, the request body of the HTTP request,</tt> </tt>
-<a name="L674"></a><tt class="py-lineno"> 674</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, the HTTP request headers</tt> </tt>
-<a name="L675"></a><tt class="py-lineno"> 675</tt>  <tt class="py-line"><tt class="py-docstring">      methodId: string, a unique identifier for the API method being called.</tt> </tt>
-<a name="L676"></a><tt class="py-lineno"> 676</tt>  <tt class="py-line"><tt class="py-docstring">      resumable: MediaUpload, None if this is not a resumbale request.</tt> </tt>
-<a name="L677"></a><tt class="py-lineno"> 677</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L678"></a><tt class="py-lineno"> 678</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
-<a name="L679"></a><tt class="py-lineno"> 679</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">method</tt> </tt>
-<a name="L680"></a><tt class="py-lineno"> 680</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-79" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-79', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-80" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-80', 'body', 'link-58');">body</a></tt> </tt>
-<a name="L681"></a><tt class="py-lineno"> 681</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">or</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L682"></a><tt class="py-lineno"> 682</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">methodId</tt> <tt class="py-op">=</tt> <tt class="py-name">methodId</tt> </tt>
-<a name="L683"></a><tt class="py-lineno"> 683</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-81', 'http', 'link-25');">http</a></tt> <tt class="py-op">=</tt> <tt id="link-82" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-82', 'http', 'link-25');">http</a></tt> </tt>
-<a name="L684"></a><tt class="py-lineno"> 684</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt> <tt class="py-op">=</tt> <tt class="py-name">postproc</tt> </tt>
-<a name="L685"></a><tt class="py-lineno"> 685</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-83', 'resumable', 'link-38');">resumable</a></tt> <tt class="py-op">=</tt> <tt id="link-84" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-84', 'resumable', 'link-38');">resumable</a></tt> </tt>
-<a name="L686"></a><tt class="py-lineno"> 686</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_callbacks</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L687"></a><tt class="py-lineno"> 687</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L688"></a><tt class="py-lineno"> 688</tt>  <tt class="py-line"> </tt>
-<a name="L689"></a><tt class="py-lineno"> 689</tt>  <tt class="py-line">    <tt class="py-comment"># Pull the multipart boundary out of the content-type header.</tt> </tt>
-<a name="L690"></a><tt class="py-lineno"> 690</tt>  <tt class="py-line">    <tt class="py-name">major</tt><tt class="py-op">,</tt> <tt class="py-name">minor</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt> <tt class="py-op">=</tt> <tt id="link-85" class="py-name"><a title="googleapiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-85', 'mimeparse', 'link-1');">mimeparse</a></tt><tt class="py-op">.</tt><tt id="link-86" class="py-name" targets="Function googleapiclient.mimeparse.parse_mime_type()=googleapiclient.mimeparse-module.html#parse_mime_type"><a title="googleapiclient.mimeparse.parse_mime_type" class="py-name" href="#" onclick="return doclink('link-86', 'parse_mime_type', 'link-86');">parse_mime_type</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L691"></a><tt class="py-lineno"> 691</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-34', 'request', 'link-34');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">args</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
+<a name="L155"></a><tt class="py-lineno"> 155</tt>  <tt class="py-line">    <tt class="py-comment"># Retry on SSL errors and socket timeout errors.</tt> </tt>
+<a name="L156"></a><tt class="py-lineno"> 156</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt id="link-35" class="py-name"><a title="googleapiclient.http._ssl_SSLError" class="py-name" href="#" onclick="return doclink('link-35', '_ssl_SSLError', 'link-0');">_ssl_SSLError</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">ssl_error</tt><tt class="py-op">:</tt> </tt>
+<a name="L157"></a><tt class="py-lineno"> 157</tt>  <tt class="py-line">      <tt class="py-name">exception</tt> <tt class="py-op">=</tt> <tt class="py-name">ssl_error</tt> </tt>
+<a name="L158"></a><tt class="py-lineno"> 158</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt> <tt class="py-keyword">as</tt> <tt class="py-name">socket_error</tt><tt class="py-op">:</tt> </tt>
+<a name="L159"></a><tt class="py-lineno"> 159</tt>  <tt class="py-line">      <tt class="py-comment"># errno's contents differ by platform, so we have to match by name.</tt> </tt>
+<a name="L160"></a><tt class="py-lineno"> 160</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">socket</tt><tt class="py-op">.</tt><tt class="py-name">errno</tt><tt class="py-op">.</tt><tt class="py-name">errorcode</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-87', 'get', 'link-87');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'content-type'</tt><tt class="py-op">,</tt> <tt class="py-string">'application/json'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L692"></a><tt class="py-lineno"> 692</tt>  <tt class="py-line"> </tt>
-<a name="L693"></a><tt class="py-lineno"> 693</tt>  <tt class="py-line">    <tt class="py-comment"># The size of the non-media part of the request.</tt> </tt>
-<a name="L694"></a><tt class="py-lineno"> 694</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">body_size</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-88', 'body', 'link-58');">body</a></tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-36', 'get', 'link-36');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">socket_error</tt><tt class="py-op">.</tt><tt class="py-name">errno</tt><tt class="py-op">)</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt> </tt>
+<a name="L161"></a><tt class="py-lineno"> 161</tt>  <tt class="py-line">          <tt class="py-string">'WSAETIMEDOUT'</tt><tt class="py-op">,</tt> <tt class="py-string">'ETIMEDOUT'</tt><tt class="py-op">,</tt> <tt class="py-string">'EPIPE'</tt><tt class="py-op">,</tt> <tt class="py-string">'ECONNABORTED'</tt><tt class="py-op">,</tt> <tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L162"></a><tt class="py-lineno"> 162</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> </tt>
+<a name="L163"></a><tt class="py-lineno"> 163</tt>  <tt class="py-line">      <tt class="py-name">exception</tt> <tt class="py-op">=</tt> <tt class="py-name">socket_error</tt> </tt>
+<a name="L164"></a><tt class="py-lineno"> 164</tt>  <tt class="py-line"> </tt>
+<a name="L165"></a><tt class="py-lineno"> 165</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">exception</tt><tt class="py-op">:</tt> </tt>
+<a name="L166"></a><tt class="py-lineno"> 166</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">retry_num</tt> <tt class="py-op">==</tt> <tt class="py-name">num_retries</tt><tt class="py-op">:</tt> </tt>
+<a name="L167"></a><tt class="py-lineno"> 167</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt class="py-name">exception</tt> </tt>
+<a name="L168"></a><tt class="py-lineno"> 168</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L169"></a><tt class="py-lineno"> 169</tt>  <tt class="py-line">        <tt class="py-keyword">continue</tt> </tt>
+<a name="L170"></a><tt class="py-lineno"> 170</tt>  <tt class="py-line"> </tt>
+<a name="L171"></a><tt class="py-lineno"> 171</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-37" class="py-name" targets="Function googleapiclient.http._should_retry_response()=googleapiclient.http-module.html#_should_retry_response"><a title="googleapiclient.http._should_retry_response" class="py-name" href="#" onclick="return doclink('link-37', '_should_retry_response', 'link-37');">_should_retry_response</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L172"></a><tt class="py-lineno"> 172</tt>  <tt class="py-line">      <tt class="py-keyword">break</tt> </tt>
+<a name="L173"></a><tt class="py-lineno"> 173</tt>  <tt class="py-line"> </tt>
+<a name="L174"></a><tt class="py-lineno"> 174</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
+</div><a name="L175"></a><tt class="py-lineno"> 175</tt>  <tt class="py-line"> </tt>
+<a name="MediaUploadProgress"></a><div id="MediaUploadProgress-def"><a name="L176"></a><tt class="py-lineno"> 176</tt>  <tt class="py-line"> </tt>
+<a name="L177"></a><tt class="py-lineno"> 177</tt> <a class="py-toggle" href="#" id="MediaUploadProgress-toggle" onclick="return toggle('MediaUploadProgress');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaUploadProgress-class.html">MediaUploadProgress</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUploadProgress-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaUploadProgress-expanded"><a name="L178"></a><tt class="py-lineno"> 178</tt>  <tt class="py-line">  <tt class="py-docstring">"""Status of a resumable upload."""</tt> </tt>
+<a name="L179"></a><tt class="py-lineno"> 179</tt>  <tt class="py-line"> </tt>
+<a name="MediaUploadProgress.__init__"></a><div id="MediaUploadProgress.__init__-def"><a name="L180"></a><tt class="py-lineno"> 180</tt> <a class="py-toggle" href="#" id="MediaUploadProgress.__init__-toggle" onclick="return toggle('MediaUploadProgress.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUploadProgress-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-param">total_size</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUploadProgress.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUploadProgress.__init__-expanded"><a name="L181"></a><tt class="py-lineno"> 181</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
+<a name="L182"></a><tt class="py-lineno"> 182</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L183"></a><tt class="py-lineno"> 183</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L184"></a><tt class="py-lineno"> 184</tt>  <tt class="py-line"><tt class="py-docstring">      resumable_progress: int, bytes sent so far.</tt> </tt>
+<a name="L185"></a><tt class="py-lineno"> 185</tt>  <tt class="py-line"><tt class="py-docstring">      total_size: int, total bytes in complete upload, or None if the total</tt> </tt>
+<a name="L186"></a><tt class="py-lineno"> 186</tt>  <tt class="py-line"><tt class="py-docstring">        upload size isn't known ahead of time.</tt> </tt>
+<a name="L187"></a><tt class="py-lineno"> 187</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L188"></a><tt class="py-lineno"> 188</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">=</tt> <tt class="py-name">resumable_progress</tt> </tt>
+<a name="L189"></a><tt class="py-lineno"> 189</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">total_size</tt> </tt>
+</div><a name="L190"></a><tt class="py-lineno"> 190</tt>  <tt class="py-line"> </tt>
+<a name="MediaUploadProgress.progress"></a><div id="MediaUploadProgress.progress-def"><a name="L191"></a><tt class="py-lineno"> 191</tt> <a class="py-toggle" href="#" id="MediaUploadProgress.progress-toggle" onclick="return toggle('MediaUploadProgress.progress');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUploadProgress-class.html#progress">progress</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUploadProgress.progress-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUploadProgress.progress-expanded"><a name="L192"></a><tt class="py-lineno"> 192</tt>  <tt class="py-line">    <tt class="py-docstring">"""Percent of upload completed, as a float.</tt> </tt>
+<a name="L193"></a><tt class="py-lineno"> 193</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L194"></a><tt class="py-lineno"> 194</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L195"></a><tt class="py-lineno"> 195</tt>  <tt class="py-line"><tt class="py-docstring">      the percentage complete as a float, returning 0.0 if the total size of</tt> </tt>
+<a name="L196"></a><tt class="py-lineno"> 196</tt>  <tt class="py-line"><tt class="py-docstring">      the upload is unknown.</tt> </tt>
+<a name="L197"></a><tt class="py-lineno"> 197</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L198"></a><tt class="py-lineno"> 198</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L199"></a><tt class="py-lineno"> 199</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt><tt class="py-op">)</tt> </tt>
+<a name="L200"></a><tt class="py-lineno"> 200</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L201"></a><tt class="py-lineno"> 201</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-number">0.0</tt> </tt>
+</div></div><a name="L202"></a><tt class="py-lineno"> 202</tt>  <tt class="py-line"> </tt>
+<a name="MediaDownloadProgress"></a><div id="MediaDownloadProgress-def"><a name="L203"></a><tt class="py-lineno"> 203</tt>  <tt class="py-line"> </tt>
+<a name="L204"></a><tt class="py-lineno"> 204</tt> <a class="py-toggle" href="#" id="MediaDownloadProgress-toggle" onclick="return toggle('MediaDownloadProgress');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaDownloadProgress-class.html">MediaDownloadProgress</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaDownloadProgress-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaDownloadProgress-expanded"><a name="L205"></a><tt class="py-lineno"> 205</tt>  <tt class="py-line">  <tt class="py-docstring">"""Status of a resumable download."""</tt> </tt>
+<a name="L206"></a><tt class="py-lineno"> 206</tt>  <tt class="py-line"> </tt>
+<a name="MediaDownloadProgress.__init__"></a><div id="MediaDownloadProgress.__init__-def"><a name="L207"></a><tt class="py-lineno"> 207</tt> <a class="py-toggle" href="#" id="MediaDownloadProgress.__init__-toggle" onclick="return toggle('MediaDownloadProgress.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaDownloadProgress-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-param">total_size</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaDownloadProgress.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaDownloadProgress.__init__-expanded"><a name="L208"></a><tt class="py-lineno"> 208</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
+<a name="L209"></a><tt class="py-lineno"> 209</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L210"></a><tt class="py-lineno"> 210</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L211"></a><tt class="py-lineno"> 211</tt>  <tt class="py-line"><tt class="py-docstring">      resumable_progress: int, bytes received so far.</tt> </tt>
+<a name="L212"></a><tt class="py-lineno"> 212</tt>  <tt class="py-line"><tt class="py-docstring">      total_size: int, total bytes in complete download.</tt> </tt>
+<a name="L213"></a><tt class="py-lineno"> 213</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L214"></a><tt class="py-lineno"> 214</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">=</tt> <tt class="py-name">resumable_progress</tt> </tt>
+<a name="L215"></a><tt class="py-lineno"> 215</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">total_size</tt> </tt>
+</div><a name="L216"></a><tt class="py-lineno"> 216</tt>  <tt class="py-line"> </tt>
+<a name="MediaDownloadProgress.progress"></a><div id="MediaDownloadProgress.progress-def"><a name="L217"></a><tt class="py-lineno"> 217</tt> <a class="py-toggle" href="#" id="MediaDownloadProgress.progress-toggle" onclick="return toggle('MediaDownloadProgress.progress');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaDownloadProgress-class.html#progress">progress</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaDownloadProgress.progress-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaDownloadProgress.progress-expanded"><a name="L218"></a><tt class="py-lineno"> 218</tt>  <tt class="py-line">    <tt class="py-docstring">"""Percent of download completed, as a float.</tt> </tt>
+<a name="L219"></a><tt class="py-lineno"> 219</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L220"></a><tt class="py-lineno"> 220</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L221"></a><tt class="py-lineno"> 221</tt>  <tt class="py-line"><tt class="py-docstring">      the percentage complete as a float, returning 0.0 if the total size of</tt> </tt>
+<a name="L222"></a><tt class="py-lineno"> 222</tt>  <tt class="py-line"><tt class="py-docstring">      the download is unknown.</tt> </tt>
+<a name="L223"></a><tt class="py-lineno"> 223</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L224"></a><tt class="py-lineno"> 224</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L225"></a><tt class="py-lineno"> 225</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-name">float</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">total_size</tt><tt class="py-op">)</tt> </tt>
+<a name="L226"></a><tt class="py-lineno"> 226</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L227"></a><tt class="py-lineno"> 227</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-number">0.0</tt> </tt>
+</div></div><a name="L228"></a><tt class="py-lineno"> 228</tt>  <tt class="py-line"> </tt>
+<a name="MediaUpload"></a><div id="MediaUpload-def"><a name="L229"></a><tt class="py-lineno"> 229</tt>  <tt class="py-line"> </tt>
+<a name="L230"></a><tt class="py-lineno"> 230</tt> <a class="py-toggle" href="#" id="MediaUpload-toggle" onclick="return toggle('MediaUpload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html">MediaUpload</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaUpload-expanded"><a name="L231"></a><tt class="py-lineno"> 231</tt>  <tt class="py-line">  <tt class="py-docstring">"""Describes a media object to upload.</tt> </tt>
+<a name="L232"></a><tt class="py-lineno"> 232</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L233"></a><tt class="py-lineno"> 233</tt>  <tt class="py-line"><tt class="py-docstring">  Base class that defines the interface of MediaUpload subclasses.</tt> </tt>
+<a name="L234"></a><tt class="py-lineno"> 234</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L235"></a><tt class="py-lineno"> 235</tt>  <tt class="py-line"><tt class="py-docstring">  Note that subclasses of MediaUpload may allow you to control the chunksize</tt> </tt>
+<a name="L236"></a><tt class="py-lineno"> 236</tt>  <tt class="py-line"><tt class="py-docstring">  when uploading a media object. It is important to keep the size of the chunk</tt> </tt>
+<a name="L237"></a><tt class="py-lineno"> 237</tt>  <tt class="py-line"><tt class="py-docstring">  as large as possible to keep the upload efficient. Other factors may influence</tt> </tt>
+<a name="L238"></a><tt class="py-lineno"> 238</tt>  <tt class="py-line"><tt class="py-docstring">  the size of the chunk you use, particularly if you are working in an</tt> </tt>
+<a name="L239"></a><tt class="py-lineno"> 239</tt>  <tt class="py-line"><tt class="py-docstring">  environment where individual HTTP requests may have a hardcoded time limit,</tt> </tt>
+<a name="L240"></a><tt class="py-lineno"> 240</tt>  <tt class="py-line"><tt class="py-docstring">  such as under certain classes of requests under Google App Engine.</tt> </tt>
+<a name="L241"></a><tt class="py-lineno"> 241</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L242"></a><tt class="py-lineno"> 242</tt>  <tt class="py-line"><tt class="py-docstring">  Streams are io.Base compatible objects that support seek(). Some MediaUpload</tt> </tt>
+<a name="L243"></a><tt class="py-lineno"> 243</tt>  <tt class="py-line"><tt class="py-docstring">  subclasses support using streams directly to upload data. Support for</tt> </tt>
+<a name="L244"></a><tt class="py-lineno"> 244</tt>  <tt class="py-line"><tt class="py-docstring">  streaming may be indicated by a MediaUpload sub-class and if appropriate for a</tt> </tt>
+<a name="L245"></a><tt class="py-lineno"> 245</tt>  <tt class="py-line"><tt class="py-docstring">  platform that stream will be used for uploading the media object. The support</tt> </tt>
+<a name="L246"></a><tt class="py-lineno"> 246</tt>  <tt class="py-line"><tt class="py-docstring">  for streaming is indicated by has_stream() returning True. The stream() method</tt> </tt>
+<a name="L247"></a><tt class="py-lineno"> 247</tt>  <tt class="py-line"><tt class="py-docstring">  should return an io.Base object that supports seek(). On platforms where the</tt> </tt>
+<a name="L248"></a><tt class="py-lineno"> 248</tt>  <tt class="py-line"><tt class="py-docstring">  underlying httplib module supports streaming, for example Python 2.6 and</tt> </tt>
+<a name="L249"></a><tt class="py-lineno"> 249</tt>  <tt class="py-line"><tt class="py-docstring">  later, the stream will be passed into the http library which will result in</tt> </tt>
+<a name="L250"></a><tt class="py-lineno"> 250</tt>  <tt class="py-line"><tt class="py-docstring">  less memory being used and possibly faster uploads.</tt> </tt>
+<a name="L251"></a><tt class="py-lineno"> 251</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L252"></a><tt class="py-lineno"> 252</tt>  <tt class="py-line"><tt class="py-docstring">  If you need to upload media that can't be uploaded using any of the existing</tt> </tt>
+<a name="L253"></a><tt class="py-lineno"> 253</tt>  <tt class="py-line"><tt class="py-docstring">  MediaUpload sub-class then you can sub-class MediaUpload for your particular</tt> </tt>
+<a name="L254"></a><tt class="py-lineno"> 254</tt>  <tt class="py-line"><tt class="py-docstring">  needs.</tt> </tt>
+<a name="L255"></a><tt class="py-lineno"> 255</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L256"></a><tt class="py-lineno"> 256</tt>  <tt class="py-line"> </tt>
+<a name="MediaUpload.chunksize"></a><div id="MediaUpload.chunksize-def"><a name="L257"></a><tt class="py-lineno"> 257</tt> <a class="py-toggle" href="#" id="MediaUpload.chunksize-toggle" onclick="return toggle('MediaUpload.chunksize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#chunksize">chunksize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload.chunksize-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.chunksize-expanded"><a name="L258"></a><tt class="py-lineno"> 258</tt>  <tt class="py-line">    <tt class="py-docstring">"""Chunk size for resumable uploads.</tt> </tt>
+<a name="L259"></a><tt class="py-lineno"> 259</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L260"></a><tt class="py-lineno"> 260</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L261"></a><tt class="py-lineno"> 261</tt>  <tt class="py-line"><tt class="py-docstring">      Chunk size in bytes.</tt> </tt>
+<a name="L262"></a><tt class="py-lineno"> 262</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L263"></a><tt class="py-lineno"> 263</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L264"></a><tt class="py-lineno"> 264</tt>  <tt class="py-line"> </tt>
+<a name="MediaUpload.mimetype"></a><div id="MediaUpload.mimetype-def"><a name="L265"></a><tt class="py-lineno"> 265</tt> <a class="py-toggle" href="#" id="MediaUpload.mimetype-toggle" onclick="return toggle('MediaUpload.mimetype');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#mimetype">mimetype</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload.mimetype-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.mimetype-expanded"><a name="L266"></a><tt class="py-lineno"> 266</tt>  <tt class="py-line">    <tt class="py-docstring">"""Mime type of the body.</tt> </tt>
+<a name="L267"></a><tt class="py-lineno"> 267</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L268"></a><tt class="py-lineno"> 268</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L269"></a><tt class="py-lineno"> 269</tt>  <tt class="py-line"><tt class="py-docstring">      Mime type.</tt> </tt>
+<a name="L270"></a><tt class="py-lineno"> 270</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L271"></a><tt class="py-lineno"> 271</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'application/octet-stream'</tt> </tt>
+</div><a name="L272"></a><tt class="py-lineno"> 272</tt>  <tt class="py-line"> </tt>
+<a name="MediaUpload.size"></a><div id="MediaUpload.size-def"><a name="L273"></a><tt class="py-lineno"> 273</tt> <a class="py-toggle" href="#" id="MediaUpload.size-toggle" onclick="return toggle('MediaUpload.size');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#size">size</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload.size-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.size-expanded"><a name="L274"></a><tt class="py-lineno"> 274</tt>  <tt class="py-line">    <tt class="py-docstring">"""Size of upload.</tt> </tt>
+<a name="L275"></a><tt class="py-lineno"> 275</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L276"></a><tt class="py-lineno"> 276</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L277"></a><tt class="py-lineno"> 277</tt>  <tt class="py-line"><tt class="py-docstring">      Size of the body, or None of the size is unknown.</tt> </tt>
+<a name="L278"></a><tt class="py-lineno"> 278</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L279"></a><tt class="py-lineno"> 279</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L280"></a><tt class="py-lineno"> 280</tt>  <tt class="py-line"> </tt>
+<a name="MediaUpload.resumable"></a><div id="MediaUpload.resumable-def"><a name="L281"></a><tt class="py-lineno"> 281</tt> <a class="py-toggle" href="#" id="MediaUpload.resumable-toggle" onclick="return toggle('MediaUpload.resumable');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#resumable">resumable</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload.resumable-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.resumable-expanded"><a name="L282"></a><tt class="py-lineno"> 282</tt>  <tt class="py-line">    <tt class="py-docstring">"""Whether this upload is resumable.</tt> </tt>
+<a name="L283"></a><tt class="py-lineno"> 283</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L284"></a><tt class="py-lineno"> 284</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L285"></a><tt class="py-lineno"> 285</tt>  <tt class="py-line"><tt class="py-docstring">      True if resumable upload or False.</tt> </tt>
+<a name="L286"></a><tt class="py-lineno"> 286</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L287"></a><tt class="py-lineno"> 287</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L288"></a><tt class="py-lineno"> 288</tt>  <tt class="py-line"> </tt>
+<a name="MediaUpload.getbytes"></a><div id="MediaUpload.getbytes-def"><a name="L289"></a><tt class="py-lineno"> 289</tt> <a class="py-toggle" href="#" id="MediaUpload.getbytes-toggle" onclick="return toggle('MediaUpload.getbytes');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#getbytes">getbytes</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">begin</tt><tt class="py-op">,</tt> <tt class="py-param">end</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload.getbytes-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.getbytes-expanded"><a name="L290"></a><tt class="py-lineno"> 290</tt>  <tt class="py-line">    <tt class="py-docstring">"""Get bytes from the media.</tt> </tt>
+<a name="L291"></a><tt class="py-lineno"> 291</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L292"></a><tt class="py-lineno"> 292</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L293"></a><tt class="py-lineno"> 293</tt>  <tt class="py-line"><tt class="py-docstring">      begin: int, offset from beginning of file.</tt> </tt>
+<a name="L294"></a><tt class="py-lineno"> 294</tt>  <tt class="py-line"><tt class="py-docstring">      length: int, number of bytes to read, starting at begin.</tt> </tt>
+<a name="L295"></a><tt class="py-lineno"> 295</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L296"></a><tt class="py-lineno"> 296</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L297"></a><tt class="py-lineno"> 297</tt>  <tt class="py-line"><tt class="py-docstring">      A string of bytes read. May be shorter than length if EOF was reached</tt> </tt>
+<a name="L298"></a><tt class="py-lineno"> 298</tt>  <tt class="py-line"><tt class="py-docstring">      first.</tt> </tt>
+<a name="L299"></a><tt class="py-lineno"> 299</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L300"></a><tt class="py-lineno"> 300</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L301"></a><tt class="py-lineno"> 301</tt>  <tt class="py-line"> </tt>
+<a name="MediaUpload.has_stream"></a><div id="MediaUpload.has_stream-def"><a name="L302"></a><tt class="py-lineno"> 302</tt> <a class="py-toggle" href="#" id="MediaUpload.has_stream-toggle" onclick="return toggle('MediaUpload.has_stream');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#has_stream">has_stream</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload.has_stream-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.has_stream-expanded"><a name="L303"></a><tt class="py-lineno"> 303</tt>  <tt class="py-line">    <tt class="py-docstring">"""Does the underlying upload support a streaming interface.</tt> </tt>
+<a name="L304"></a><tt class="py-lineno"> 304</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L305"></a><tt class="py-lineno"> 305</tt>  <tt class="py-line"><tt class="py-docstring">    Streaming means it is an io.IOBase subclass that supports seek, i.e.</tt> </tt>
+<a name="L306"></a><tt class="py-lineno"> 306</tt>  <tt class="py-line"><tt class="py-docstring">    seekable() returns True.</tt> </tt>
+<a name="L307"></a><tt class="py-lineno"> 307</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L308"></a><tt class="py-lineno"> 308</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L309"></a><tt class="py-lineno"> 309</tt>  <tt class="py-line"><tt class="py-docstring">      True if the call to stream() will return an instance of a seekable io.Base</tt> </tt>
+<a name="L310"></a><tt class="py-lineno"> 310</tt>  <tt class="py-line"><tt class="py-docstring">      subclass.</tt> </tt>
+<a name="L311"></a><tt class="py-lineno"> 311</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L312"></a><tt class="py-lineno"> 312</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
+</div><a name="L313"></a><tt class="py-lineno"> 313</tt>  <tt class="py-line"> </tt>
+<a name="MediaUpload.stream"></a><div id="MediaUpload.stream-def"><a name="L314"></a><tt class="py-lineno"> 314</tt> <a class="py-toggle" href="#" id="MediaUpload.stream-toggle" onclick="return toggle('MediaUpload.stream');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#stream">stream</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload.stream-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.stream-expanded"><a name="L315"></a><tt class="py-lineno"> 315</tt>  <tt class="py-line">    <tt class="py-docstring">"""A stream interface to the data being uploaded.</tt> </tt>
+<a name="L316"></a><tt class="py-lineno"> 316</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L317"></a><tt class="py-lineno"> 317</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L318"></a><tt class="py-lineno"> 318</tt>  <tt class="py-line"><tt class="py-docstring">      The returned value is an io.IOBase subclass that supports seek, i.e.</tt> </tt>
+<a name="L319"></a><tt class="py-lineno"> 319</tt>  <tt class="py-line"><tt class="py-docstring">      seekable() returns True.</tt> </tt>
+<a name="L320"></a><tt class="py-lineno"> 320</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L321"></a><tt class="py-lineno"> 321</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L322"></a><tt class="py-lineno"> 322</tt>  <tt class="py-line"> </tt>
+<a name="L323"></a><tt class="py-lineno"> 323</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="MediaUpload._to_json"></a><div id="MediaUpload._to_json-def"><a name="L324"></a><tt class="py-lineno"> 324</tt> <a class="py-toggle" href="#" id="MediaUpload._to_json-toggle" onclick="return toggle('MediaUpload._to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#_to_json">_to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">strip</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload._to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload._to_json-expanded"><a name="L325"></a><tt class="py-lineno"> 325</tt>  <tt class="py-line">    <tt class="py-docstring">"""Utility function for creating a JSON representation of a MediaUpload.</tt> </tt>
+<a name="L326"></a><tt class="py-lineno"> 326</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L327"></a><tt class="py-lineno"> 327</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L328"></a><tt class="py-lineno"> 328</tt>  <tt class="py-line"><tt class="py-docstring">      strip: array, An array of names of members to not include in the JSON.</tt> </tt>
+<a name="L329"></a><tt class="py-lineno"> 329</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L330"></a><tt class="py-lineno"> 330</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L331"></a><tt class="py-lineno"> 331</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
+<a name="L332"></a><tt class="py-lineno"> 332</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
+<a name="L333"></a><tt class="py-lineno"> 333</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L334"></a><tt class="py-lineno"> 334</tt>  <tt class="py-line">    <tt class="py-name">t</tt> <tt class="py-op">=</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
+<a name="L335"></a><tt class="py-lineno"> 335</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
+<a name="L336"></a><tt class="py-lineno"> 336</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">strip</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L337"></a><tt class="py-lineno"> 337</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">member</tt> <tt class="py-keyword">in</tt> <tt class="py-name">strip</tt><tt class="py-op">:</tt> </tt>
+<a name="L338"></a><tt class="py-lineno"> 338</tt>  <tt class="py-line">        <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-name">member</tt><tt class="py-op">]</tt> </tt>
+<a name="L339"></a><tt class="py-lineno"> 339</tt>  <tt class="py-line">    <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_class'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt> </tt>
+<a name="L340"></a><tt class="py-lineno"> 340</tt>  <tt class="py-line">    <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_module'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">t</tt><tt class="py-op">.</tt><tt class="py-name">__module__</tt> </tt>
+<a name="L341"></a><tt class="py-lineno"> 341</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L342"></a><tt class="py-lineno"> 342</tt>  <tt class="py-line"> </tt>
+<a name="MediaUpload.to_json"></a><div id="MediaUpload.to_json-def"><a name="L343"></a><tt class="py-lineno"> 343</tt> <a class="py-toggle" href="#" id="MediaUpload.to_json-toggle" onclick="return toggle('MediaUpload.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#to_json">to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.to_json-expanded"><a name="L344"></a><tt class="py-lineno"> 344</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create a JSON representation of an instance of MediaUpload.</tt> </tt>
+<a name="L345"></a><tt class="py-lineno"> 345</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L346"></a><tt class="py-lineno"> 346</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L347"></a><tt class="py-lineno"> 347</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
+<a name="L348"></a><tt class="py-lineno"> 348</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
+<a name="L349"></a><tt class="py-lineno"> 349</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L350"></a><tt class="py-lineno"> 350</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name" targets="Method googleapiclient.http.MediaUpload._to_json()=googleapiclient.http.MediaUpload-class.html#_to_json"><a title="googleapiclient.http.MediaUpload._to_json" class="py-name" href="#" onclick="return doclink('link-38', '_to_json', 'link-38');">_to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L351"></a><tt class="py-lineno"> 351</tt>  <tt class="py-line"> </tt>
+<a name="L352"></a><tt class="py-lineno"> 352</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">classmethod</tt> </tt>
+<a name="MediaUpload.new_from_json"></a><div id="MediaUpload.new_from_json-def"><a name="L353"></a><tt class="py-lineno"> 353</tt> <a class="py-toggle" href="#" id="MediaUpload.new_from_json-toggle" onclick="return toggle('MediaUpload.new_from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaUpload-class.html#new_from_json">new_from_json</a><tt class="py-op">(</tt><tt class="py-param">cls</tt><tt class="py-op">,</tt> <tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaUpload.new_from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaUpload.new_from_json-expanded"><a name="L354"></a><tt class="py-lineno"> 354</tt>  <tt class="py-line">    <tt class="py-docstring">"""Utility class method to instantiate a MediaUpload subclass from a JSON</tt> </tt>
+<a name="L355"></a><tt class="py-lineno"> 355</tt>  <tt class="py-line"><tt class="py-docstring">    representation produced by to_json().</tt> </tt>
+<a name="L356"></a><tt class="py-lineno"> 356</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L357"></a><tt class="py-lineno"> 357</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L358"></a><tt class="py-lineno"> 358</tt>  <tt class="py-line"><tt class="py-docstring">      s: string, JSON from to_json().</tt> </tt>
+<a name="L359"></a><tt class="py-lineno"> 359</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L360"></a><tt class="py-lineno"> 360</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L361"></a><tt class="py-lineno"> 361</tt>  <tt class="py-line"><tt class="py-docstring">      An instance of the subclass of MediaUpload that was serialized with</tt> </tt>
+<a name="L362"></a><tt class="py-lineno"> 362</tt>  <tt class="py-line"><tt class="py-docstring">      to_json().</tt> </tt>
+<a name="L363"></a><tt class="py-lineno"> 363</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L364"></a><tt class="py-lineno"> 364</tt>  <tt class="py-line">    <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L365"></a><tt class="py-lineno"> 365</tt>  <tt class="py-line">    <tt class="py-comment"># Find and call the right classmethod from_json() to restore the object.</tt> </tt>
+<a name="L366"></a><tt class="py-lineno"> 366</tt>  <tt class="py-line">    <tt class="py-name">module</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'_module'</tt><tt class="py-op">]</tt> </tt>
+<a name="L367"></a><tt class="py-lineno"> 367</tt>  <tt class="py-line">    <tt class="py-name">m</tt> <tt class="py-op">=</tt> <tt class="py-name">__import__</tt><tt class="py-op">(</tt><tt class="py-name">module</tt><tt class="py-op">,</tt> <tt class="py-name">fromlist</tt><tt class="py-op">=</tt><tt class="py-name">module</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L368"></a><tt class="py-lineno"> 368</tt>  <tt class="py-line">    <tt class="py-name">kls</tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">m</tt><tt class="py-op">,</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'_class'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L369"></a><tt class="py-lineno"> 369</tt>  <tt class="py-line">    <tt id="link-39" class="py-name" targets="Static Method googleapiclient.http.HttpRequest.from_json()=googleapiclient.http.HttpRequest-class.html#from_json,Static Method googleapiclient.http.MediaFileUpload.from_json()=googleapiclient.http.MediaFileUpload-class.html#from_json"><a title="googleapiclient.http.HttpRequest.from_json
+googleapiclient.http.MediaFileUpload.from_json" class="py-name" href="#" onclick="return doclink('link-39', 'from_json', 'link-39');">from_json</a></tt> <tt class="py-op">=</tt> <tt class="py-name">getattr</tt><tt class="py-op">(</tt><tt class="py-name">kls</tt><tt class="py-op">,</tt> <tt class="py-string">'from_json'</tt><tt class="py-op">)</tt> </tt>
+<a name="L370"></a><tt class="py-lineno"> 370</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-40" class="py-name"><a title="googleapiclient.http.HttpRequest.from_json
+googleapiclient.http.MediaFileUpload.from_json" class="py-name" href="#" onclick="return doclink('link-40', 'from_json', 'link-39');">from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L371"></a><tt class="py-lineno"> 371</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseUpload"></a><div id="MediaIoBaseUpload-def"><a name="L372"></a><tt class="py-lineno"> 372</tt>  <tt class="py-line"> </tt>
+<a name="L373"></a><tt class="py-lineno"> 373</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload-toggle" onclick="return toggle('MediaIoBaseUpload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a><tt class="py-op">(</tt><tt class="py-base-class">MediaUpload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaIoBaseUpload-expanded"><a name="L374"></a><tt class="py-lineno"> 374</tt>  <tt class="py-line">  <tt class="py-docstring">"""A MediaUpload for a io.Base objects.</tt> </tt>
+<a name="L375"></a><tt class="py-lineno"> 375</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L376"></a><tt class="py-lineno"> 376</tt>  <tt class="py-line"><tt class="py-docstring">  Note that the Python file object is compatible with io.Base and can be used</tt> </tt>
+<a name="L377"></a><tt class="py-lineno"> 377</tt>  <tt class="py-line"><tt class="py-docstring">  with this class also.</tt> </tt>
+<a name="L378"></a><tt class="py-lineno"> 378</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L379"></a><tt class="py-lineno"> 379</tt>  <tt class="py-line"><tt class="py-docstring">    fh = BytesIO('...Some data to upload...')</tt> </tt>
+<a name="L380"></a><tt class="py-lineno"> 380</tt>  <tt class="py-line"><tt class="py-docstring">    media = MediaIoBaseUpload(fh, mimetype='image/png',</tt> </tt>
+<a name="L381"></a><tt class="py-lineno"> 381</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize=1024*1024, resumable=True)</tt> </tt>
+<a name="L382"></a><tt class="py-lineno"> 382</tt>  <tt class="py-line"><tt class="py-docstring">    farm.animals().insert(</tt> </tt>
+<a name="L383"></a><tt class="py-lineno"> 383</tt>  <tt class="py-line"><tt class="py-docstring">        id='cow',</tt> </tt>
+<a name="L384"></a><tt class="py-lineno"> 384</tt>  <tt class="py-line"><tt class="py-docstring">        name='cow.png',</tt> </tt>
+<a name="L385"></a><tt class="py-lineno"> 385</tt>  <tt class="py-line"><tt class="py-docstring">        media_body=media).execute()</tt> </tt>
+<a name="L386"></a><tt class="py-lineno"> 386</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L387"></a><tt class="py-lineno"> 387</tt>  <tt class="py-line"><tt class="py-docstring">  Depending on the platform you are working on, you may pass -1 as the</tt> </tt>
+<a name="L388"></a><tt class="py-lineno"> 388</tt>  <tt class="py-line"><tt class="py-docstring">  chunksize, which indicates that the entire file should be uploaded in a single</tt> </tt>
+<a name="L389"></a><tt class="py-lineno"> 389</tt>  <tt class="py-line"><tt class="py-docstring">  request. If the underlying platform supports streams, such as Python 2.6 or</tt> </tt>
+<a name="L390"></a><tt class="py-lineno"> 390</tt>  <tt class="py-line"><tt class="py-docstring">  later, then this can be very efficient as it avoids multiple connections, and</tt> </tt>
+<a name="L391"></a><tt class="py-lineno"> 391</tt>  <tt class="py-line"><tt class="py-docstring">  also avoids loading the entire file into memory before sending it. Note that</tt> </tt>
+<a name="L392"></a><tt class="py-lineno"> 392</tt>  <tt class="py-line"><tt class="py-docstring">  Google App Engine has a 5MB limit on request size, so you should never set</tt> </tt>
+<a name="L393"></a><tt class="py-lineno"> 393</tt>  <tt class="py-line"><tt class="py-docstring">  your chunksize larger than 5MB, or to -1.</tt> </tt>
+<a name="L394"></a><tt class="py-lineno"> 394</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L395"></a><tt class="py-lineno"> 395</tt>  <tt class="py-line"> </tt>
+<a name="L396"></a><tt class="py-lineno"> 396</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
+<a name="MediaIoBaseUpload.__init__"></a><div id="MediaIoBaseUpload.__init__-def"><a name="L397"></a><tt class="py-lineno"> 397</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.__init__-toggle" onclick="return toggle('MediaIoBaseUpload.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">mimetype</tt><tt class="py-op">,</tt> <tt class="py-param">chunksize</tt><tt class="py-op">=</tt><tt id="link-41" class="py-name"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-41', 'DEFAULT_CHUNK_SIZE', 'link-26');">DEFAULT_CHUNK_SIZE</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L398"></a><tt class="py-lineno"> 398</tt>  <tt class="py-line">      <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.__init__-expanded"><a name="L399"></a><tt class="py-lineno"> 399</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
+<a name="L400"></a><tt class="py-lineno"> 400</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L401"></a><tt class="py-lineno"> 401</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L402"></a><tt class="py-lineno"> 402</tt>  <tt class="py-line"><tt class="py-docstring">      fd: io.Base or file object, The source of the bytes to upload. MUST be</tt> </tt>
+<a name="L403"></a><tt class="py-lineno"> 403</tt>  <tt class="py-line"><tt class="py-docstring">        opened in blocking mode, do not use streams opened in non-blocking mode.</tt> </tt>
+<a name="L404"></a><tt class="py-lineno"> 404</tt>  <tt class="py-line"><tt class="py-docstring">        The given stream must be seekable, that is, it must be able to call</tt> </tt>
+<a name="L405"></a><tt class="py-lineno"> 405</tt>  <tt class="py-line"><tt class="py-docstring">        seek() on fd.</tt> </tt>
+<a name="L406"></a><tt class="py-lineno"> 406</tt>  <tt class="py-line"><tt class="py-docstring">      mimetype: string, Mime-type of the file.</tt> </tt>
+<a name="L407"></a><tt class="py-lineno"> 407</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize: int, File will be uploaded in chunks of this many bytes. Only</tt> </tt>
+<a name="L408"></a><tt class="py-lineno"> 408</tt>  <tt class="py-line"><tt class="py-docstring">        used if resumable=True. Pass in a value of -1 if the file is to be</tt> </tt>
+<a name="L409"></a><tt class="py-lineno"> 409</tt>  <tt class="py-line"><tt class="py-docstring">        uploaded as a single chunk. Note that Google App Engine has a 5MB limit</tt> </tt>
+<a name="L410"></a><tt class="py-lineno"> 410</tt>  <tt class="py-line"><tt class="py-docstring">        on request size, so you should never set your chunksize larger than 5MB,</tt> </tt>
+<a name="L411"></a><tt class="py-lineno"> 411</tt>  <tt class="py-line"><tt class="py-docstring">        or to -1.</tt> </tt>
+<a name="L412"></a><tt class="py-lineno"> 412</tt>  <tt class="py-line"><tt class="py-docstring">      resumable: bool, True if this is a resumable upload. False means upload</tt> </tt>
+<a name="L413"></a><tt class="py-lineno"> 413</tt>  <tt class="py-line"><tt class="py-docstring">        in a single request.</tt> </tt>
+<a name="L414"></a><tt class="py-lineno"> 414</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L415"></a><tt class="py-lineno"> 415</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-42" class="py-name" targets="Class googleapiclient.http.MediaIoBaseUpload=googleapiclient.http.MediaIoBaseUpload-class.html"><a title="googleapiclient.http.MediaIoBaseUpload" class="py-name" href="#" onclick="return doclink('link-42', 'MediaIoBaseUpload', 'link-42');">MediaIoBaseUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Method googleapiclient.channel.Channel.__init__()=googleapiclient.channel.Channel-class.html#__init__,Method googleapiclient.channel.Notification.__init__()=googleapiclient.channel.Notification-class.html#__init__,Method googleapiclient.discovery.Resource.__init__()=googleapiclient.discovery.Resource-class.html#__init__,Method googleapiclient.discovery.ResourceMethodParameters.__init__()=googleapiclient.discovery.ResourceMethodParameters-class.html#__init__,Method googleapiclient.discovery_cache.appengine_memcache.Cache.__init__()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#__init__,Method googleapiclient.discovery_cache.file_cache.Cache.__init__()=googleapiclient.discovery_cache.file_cache.Cache-class.html#__init__,Method googleapiclient.errors.BatchError.__init__()=googleapiclient.errors.BatchError-class.html#__init__,Method googleapiclient.errors.HttpError.__init__()=googleapiclient.errors.HttpError-class.html#__init__,Method googleapiclient.errors.UnexpectedBodyError.__init__()=googleapiclient.errors.UnexpectedBodyError-class.html#__init__,Method googleapiclient.errors.UnexpectedMethodError.__init__()=googleapiclient.errors.UnexpectedMethodError-class.html#__init__,Method googleapiclient.http.BatchHttpRequest.__init__()=googleapiclient.http.BatchHttpRequest-class.html#__init__,Method googleapiclient.http.HttpMock.__init__()=googleapiclient.http.HttpMock-class.html#__init__,Method googleapiclient.http.HttpMockSequence.__init__()=googleapiclient.http.HttpMockSequence-class.html#__init__,Method googleapiclient.http.HttpRequest.__init__()=googleapiclient.http.HttpRequest-class.html#__init__,Method googleapiclient.http.HttpRequestMock.__init__()=googleapiclient.http.HttpRequestMock-class.html#__init__,Method googleapiclient.http.MediaDownloadProgress.__init__()=googleapiclient.http.MediaDownloadProgress-class.html#__init__,Method googleapiclient.http.MediaFileUpload.__init__()=googleapiclient.http.MediaFileUpload-class.html#__init__,Method googleapiclient.http.MediaInMemoryUpload.__init__()=googleapiclient.http.MediaInMemoryUpload-class.html#__init__,Method googleapiclient.http.MediaIoBaseDownload.__init__()=googleapiclient.http.MediaIoBaseDownload-class.html#__init__,Method googleapiclient.http.MediaIoBaseUpload.__init__()=googleapiclient.http.MediaIoBaseUpload-class.html#__init__,Method googleapiclient.http.MediaUploadProgress.__init__()=googleapiclient.http.MediaUploadProgress-class.html#__init__,Method googleapiclient.http.RequestMockBuilder.__init__()=googleapiclient.http.RequestMockBuilder-class.html#__init__,Method googleapiclient.http._StreamSlice.__init__()=googleapiclient.http._StreamSlice-class.html#__init__,Method googleapiclient.model.JsonModel.__init__()=googleapiclient.model.JsonModel-class.html#__init__,Method googleapiclient.model.ProtocolBufferModel.__init__()=googleapiclient.model.ProtocolBufferModel-class.html#__init__,Method googleapiclient.schema.Schemas.__init__()=googleapiclient.schema.Schemas-class.html#__init__,Method googleapiclient.schema._SchemaToStruct.__init__()=googleapiclient.schema._SchemaToStruct-class.html#__init__"><a title="googleapiclient.channel.Channel.__init__
+googleapiclient.channel.Notification.__init__
+googleapiclient.discovery.Resource.__init__
+googleapiclient.discovery.ResourceMethodParameters.__init__
+googleapiclient.discovery_cache.appengine_memcache.Cache.__init__
+googleapiclient.discovery_cache.file_cache.Cache.__init__
+googleapiclient.errors.BatchError.__init__
+googleapiclient.errors.HttpError.__init__
+googleapiclient.errors.UnexpectedBodyError.__init__
+googleapiclient.errors.UnexpectedMethodError.__init__
+googleapiclient.http.BatchHttpRequest.__init__
+googleapiclient.http.HttpMock.__init__
+googleapiclient.http.HttpMockSequence.__init__
+googleapiclient.http.HttpRequest.__init__
+googleapiclient.http.HttpRequestMock.__init__
+googleapiclient.http.MediaDownloadProgress.__init__
+googleapiclient.http.MediaFileUpload.__init__
+googleapiclient.http.MediaInMemoryUpload.__init__
+googleapiclient.http.MediaIoBaseDownload.__init__
+googleapiclient.http.MediaIoBaseUpload.__init__
+googleapiclient.http.MediaUploadProgress.__init__
+googleapiclient.http.RequestMockBuilder.__init__
+googleapiclient.http._StreamSlice.__init__
+googleapiclient.model.JsonModel.__init__
+googleapiclient.model.ProtocolBufferModel.__init__
+googleapiclient.schema.Schemas.__init__
+googleapiclient.schema._SchemaToStruct.__init__" class="py-name" href="#" onclick="return doclink('link-43', '__init__', 'link-43');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L416"></a><tt class="py-lineno"> 416</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt> <tt class="py-op">=</tt> <tt class="py-name">fd</tt> </tt>
+<a name="L417"></a><tt class="py-lineno"> 417</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mimetype</tt> <tt class="py-op">=</tt> <tt id="link-44" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.mimetype()=googleapiclient.http.MediaIoBaseUpload-class.html#mimetype,Method googleapiclient.http.MediaUpload.mimetype()=googleapiclient.http.MediaUpload-class.html#mimetype"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-44', 'mimetype', 'link-44');">mimetype</a></tt> </tt>
+<a name="L418"></a><tt class="py-lineno"> 418</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-op">(</tt><tt id="link-45" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.chunksize()=googleapiclient.http.MediaIoBaseUpload-class.html#chunksize,Method googleapiclient.http.MediaUpload.chunksize()=googleapiclient.http.MediaUpload-class.html#chunksize"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-45', 'chunksize', 'link-45');">chunksize</a></tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> <tt class="py-keyword">or</tt> <tt id="link-46" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-46', 'chunksize', 'link-45');">chunksize</a></tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L419"></a><tt class="py-lineno"> 419</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-47" class="py-name"><a title="googleapiclient.errors.InvalidChunkSizeError" class="py-name" href="#" onclick="return doclink('link-47', 'InvalidChunkSizeError', 'link-12');">InvalidChunkSizeError</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L420"></a><tt class="py-lineno"> 420</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> <tt class="py-op">=</tt> <tt id="link-48" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-48', 'chunksize', 'link-45');">chunksize</a></tt> </tt>
+<a name="L421"></a><tt class="py-lineno"> 421</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resumable</tt> <tt class="py-op">=</tt> <tt id="link-49" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.resumable()=googleapiclient.http.MediaIoBaseUpload-class.html#resumable,Method googleapiclient.http.MediaUpload.resumable()=googleapiclient.http.MediaUpload-class.html#resumable"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-49', 'resumable', 'link-49');">resumable</a></tt> </tt>
+<a name="L422"></a><tt class="py-lineno"> 422</tt>  <tt class="py-line"> </tt>
+<a name="L423"></a><tt class="py-lineno"> 423</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">SEEK_END</tt><tt class="py-op">)</tt> </tt>
+<a name="L424"></a><tt class="py-lineno"> 424</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_size</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt class="py-name">tell</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L425"></a><tt class="py-lineno"> 425</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseUpload.chunksize"></a><div id="MediaIoBaseUpload.chunksize-def"><a name="L426"></a><tt class="py-lineno"> 426</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.chunksize-toggle" onclick="return toggle('MediaIoBaseUpload.chunksize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#chunksize">chunksize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload.chunksize-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.chunksize-expanded"><a name="L427"></a><tt class="py-lineno"> 427</tt>  <tt class="py-line">    <tt class="py-docstring">"""Chunk size for resumable uploads.</tt> </tt>
+<a name="L428"></a><tt class="py-lineno"> 428</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L429"></a><tt class="py-lineno"> 429</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L430"></a><tt class="py-lineno"> 430</tt>  <tt class="py-line"><tt class="py-docstring">      Chunk size in bytes.</tt> </tt>
+<a name="L431"></a><tt class="py-lineno"> 431</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L432"></a><tt class="py-lineno"> 432</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> </tt>
+</div><a name="L433"></a><tt class="py-lineno"> 433</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseUpload.mimetype"></a><div id="MediaIoBaseUpload.mimetype-def"><a name="L434"></a><tt class="py-lineno"> 434</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.mimetype-toggle" onclick="return toggle('MediaIoBaseUpload.mimetype');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#mimetype">mimetype</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload.mimetype-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.mimetype-expanded"><a name="L435"></a><tt class="py-lineno"> 435</tt>  <tt class="py-line">    <tt class="py-docstring">"""Mime type of the body.</tt> </tt>
+<a name="L436"></a><tt class="py-lineno"> 436</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L437"></a><tt class="py-lineno"> 437</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L438"></a><tt class="py-lineno"> 438</tt>  <tt class="py-line"><tt class="py-docstring">      Mime type.</tt> </tt>
+<a name="L439"></a><tt class="py-lineno"> 439</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L440"></a><tt class="py-lineno"> 440</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_mimetype</tt> </tt>
+</div><a name="L441"></a><tt class="py-lineno"> 441</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseUpload.size"></a><div id="MediaIoBaseUpload.size-def"><a name="L442"></a><tt class="py-lineno"> 442</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.size-toggle" onclick="return toggle('MediaIoBaseUpload.size');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#size">size</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload.size-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.size-expanded"><a name="L443"></a><tt class="py-lineno"> 443</tt>  <tt class="py-line">    <tt class="py-docstring">"""Size of upload.</tt> </tt>
+<a name="L444"></a><tt class="py-lineno"> 444</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L445"></a><tt class="py-lineno"> 445</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L446"></a><tt class="py-lineno"> 446</tt>  <tt class="py-line"><tt class="py-docstring">      Size of the body, or None of the size is unknown.</tt> </tt>
+<a name="L447"></a><tt class="py-lineno"> 447</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L448"></a><tt class="py-lineno"> 448</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_size</tt> </tt>
+</div><a name="L449"></a><tt class="py-lineno"> 449</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseUpload.resumable"></a><div id="MediaIoBaseUpload.resumable-def"><a name="L450"></a><tt class="py-lineno"> 450</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.resumable-toggle" onclick="return toggle('MediaIoBaseUpload.resumable');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#resumable">resumable</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload.resumable-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.resumable-expanded"><a name="L451"></a><tt class="py-lineno"> 451</tt>  <tt class="py-line">    <tt class="py-docstring">"""Whether this upload is resumable.</tt> </tt>
+<a name="L452"></a><tt class="py-lineno"> 452</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L453"></a><tt class="py-lineno"> 453</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L454"></a><tt class="py-lineno"> 454</tt>  <tt class="py-line"><tt class="py-docstring">      True if resumable upload or False.</tt> </tt>
+<a name="L455"></a><tt class="py-lineno"> 455</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L456"></a><tt class="py-lineno"> 456</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_resumable</tt> </tt>
+</div><a name="L457"></a><tt class="py-lineno"> 457</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseUpload.getbytes"></a><div id="MediaIoBaseUpload.getbytes-def"><a name="L458"></a><tt class="py-lineno"> 458</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.getbytes-toggle" onclick="return toggle('MediaIoBaseUpload.getbytes');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#getbytes">getbytes</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">begin</tt><tt class="py-op">,</tt> <tt class="py-param">length</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload.getbytes-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.getbytes-expanded"><a name="L459"></a><tt class="py-lineno"> 459</tt>  <tt class="py-line">    <tt class="py-docstring">"""Get bytes from the media.</tt> </tt>
+<a name="L460"></a><tt class="py-lineno"> 460</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L461"></a><tt class="py-lineno"> 461</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L462"></a><tt class="py-lineno"> 462</tt>  <tt class="py-line"><tt class="py-docstring">      begin: int, offset from beginning of file.</tt> </tt>
+<a name="L463"></a><tt class="py-lineno"> 463</tt>  <tt class="py-line"><tt class="py-docstring">      length: int, number of bytes to read, starting at begin.</tt> </tt>
+<a name="L464"></a><tt class="py-lineno"> 464</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L465"></a><tt class="py-lineno"> 465</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L466"></a><tt class="py-lineno"> 466</tt>  <tt class="py-line"><tt class="py-docstring">      A string of bytes read. May be shorted than length if EOF was reached</tt> </tt>
+<a name="L467"></a><tt class="py-lineno"> 467</tt>  <tt class="py-line"><tt class="py-docstring">      first.</tt> </tt>
+<a name="L468"></a><tt class="py-lineno"> 468</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L469"></a><tt class="py-lineno"> 469</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-name">begin</tt><tt class="py-op">)</tt> </tt>
+<a name="L470"></a><tt class="py-lineno"> 470</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name" targets="Method googleapiclient.http._StreamSlice.read()=googleapiclient.http._StreamSlice-class.html#read"><a title="googleapiclient.http._StreamSlice.read" class="py-name" href="#" onclick="return doclink('link-50', 'read', 'link-50');">read</a></tt><tt class="py-op">(</tt><tt class="py-name">length</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L471"></a><tt class="py-lineno"> 471</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseUpload.has_stream"></a><div id="MediaIoBaseUpload.has_stream-def"><a name="L472"></a><tt class="py-lineno"> 472</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.has_stream-toggle" onclick="return toggle('MediaIoBaseUpload.has_stream');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#has_stream">has_stream</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload.has_stream-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.has_stream-expanded"><a name="L473"></a><tt class="py-lineno"> 473</tt>  <tt class="py-line">    <tt class="py-docstring">"""Does the underlying upload support a streaming interface.</tt> </tt>
+<a name="L474"></a><tt class="py-lineno"> 474</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L475"></a><tt class="py-lineno"> 475</tt>  <tt class="py-line"><tt class="py-docstring">    Streaming means it is an io.IOBase subclass that supports seek, i.e.</tt> </tt>
+<a name="L476"></a><tt class="py-lineno"> 476</tt>  <tt class="py-line"><tt class="py-docstring">    seekable() returns True.</tt> </tt>
+<a name="L477"></a><tt class="py-lineno"> 477</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L478"></a><tt class="py-lineno"> 478</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L479"></a><tt class="py-lineno"> 479</tt>  <tt class="py-line"><tt class="py-docstring">      True if the call to stream() will return an instance of a seekable io.Base</tt> </tt>
+<a name="L480"></a><tt class="py-lineno"> 480</tt>  <tt class="py-line"><tt class="py-docstring">      subclass.</tt> </tt>
+<a name="L481"></a><tt class="py-lineno"> 481</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L482"></a><tt class="py-lineno"> 482</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L483"></a><tt class="py-lineno"> 483</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseUpload.stream"></a><div id="MediaIoBaseUpload.stream-def"><a name="L484"></a><tt class="py-lineno"> 484</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.stream-toggle" onclick="return toggle('MediaIoBaseUpload.stream');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#stream">stream</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload.stream-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.stream-expanded"><a name="L485"></a><tt class="py-lineno"> 485</tt>  <tt class="py-line">    <tt class="py-docstring">"""A stream interface to the data being uploaded.</tt> </tt>
+<a name="L486"></a><tt class="py-lineno"> 486</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L487"></a><tt class="py-lineno"> 487</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L488"></a><tt class="py-lineno"> 488</tt>  <tt class="py-line"><tt class="py-docstring">      The returned value is an io.IOBase subclass that supports seek, i.e.</tt> </tt>
+<a name="L489"></a><tt class="py-lineno"> 489</tt>  <tt class="py-line"><tt class="py-docstring">      seekable() returns True.</tt> </tt>
+<a name="L490"></a><tt class="py-lineno"> 490</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L491"></a><tt class="py-lineno"> 491</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt> </tt>
+</div><a name="L492"></a><tt class="py-lineno"> 492</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseUpload.to_json"></a><div id="MediaIoBaseUpload.to_json-def"><a name="L493"></a><tt class="py-lineno"> 493</tt> <a class="py-toggle" href="#" id="MediaIoBaseUpload.to_json-toggle" onclick="return toggle('MediaIoBaseUpload.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseUpload-class.html#to_json">to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseUpload.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseUpload.to_json-expanded"><a name="L494"></a><tt class="py-lineno"> 494</tt>  <tt class="py-line">    <tt class="py-docstring">"""This upload type is not serializable."""</tt> </tt>
+<a name="L495"></a><tt class="py-lineno"> 495</tt>  <tt class="py-line">    <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">'MediaIoBaseUpload is not serializable.'</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L496"></a><tt class="py-lineno"> 496</tt>  <tt class="py-line"> </tt>
+<a name="MediaFileUpload"></a><div id="MediaFileUpload-def"><a name="L497"></a><tt class="py-lineno"> 497</tt>  <tt class="py-line"> </tt>
+<a name="L498"></a><tt class="py-lineno"> 498</tt> <a class="py-toggle" href="#" id="MediaFileUpload-toggle" onclick="return toggle('MediaFileUpload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaFileUpload-class.html">MediaFileUpload</a><tt class="py-op">(</tt><tt class="py-base-class">MediaIoBaseUpload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaFileUpload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaFileUpload-expanded"><a name="L499"></a><tt class="py-lineno"> 499</tt>  <tt class="py-line">  <tt class="py-docstring">"""A MediaUpload for a file.</tt> </tt>
+<a name="L500"></a><tt class="py-lineno"> 500</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L501"></a><tt class="py-lineno"> 501</tt>  <tt class="py-line"><tt class="py-docstring">  Construct a MediaFileUpload and pass as the media_body parameter of the</tt> </tt>
+<a name="L502"></a><tt class="py-lineno"> 502</tt>  <tt class="py-line"><tt class="py-docstring">  method. For example, if we had a service that allowed uploading images:</tt> </tt>
+<a name="L503"></a><tt class="py-lineno"> 503</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L504"></a><tt class="py-lineno"> 504</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L505"></a><tt class="py-lineno"> 505</tt>  <tt class="py-line"><tt class="py-docstring">    media = MediaFileUpload('cow.png', mimetype='image/png',</tt> </tt>
+<a name="L506"></a><tt class="py-lineno"> 506</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize=1024*1024, resumable=True)</tt> </tt>
+<a name="L507"></a><tt class="py-lineno"> 507</tt>  <tt class="py-line"><tt class="py-docstring">    farm.animals().insert(</tt> </tt>
+<a name="L508"></a><tt class="py-lineno"> 508</tt>  <tt class="py-line"><tt class="py-docstring">        id='cow',</tt> </tt>
+<a name="L509"></a><tt class="py-lineno"> 509</tt>  <tt class="py-line"><tt class="py-docstring">        name='cow.png',</tt> </tt>
+<a name="L510"></a><tt class="py-lineno"> 510</tt>  <tt class="py-line"><tt class="py-docstring">        media_body=media).execute()</tt> </tt>
+<a name="L511"></a><tt class="py-lineno"> 511</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L512"></a><tt class="py-lineno"> 512</tt>  <tt class="py-line"><tt class="py-docstring">  Depending on the platform you are working on, you may pass -1 as the</tt> </tt>
+<a name="L513"></a><tt class="py-lineno"> 513</tt>  <tt class="py-line"><tt class="py-docstring">  chunksize, which indicates that the entire file should be uploaded in a single</tt> </tt>
+<a name="L514"></a><tt class="py-lineno"> 514</tt>  <tt class="py-line"><tt class="py-docstring">  request. If the underlying platform supports streams, such as Python 2.6 or</tt> </tt>
+<a name="L515"></a><tt class="py-lineno"> 515</tt>  <tt class="py-line"><tt class="py-docstring">  later, then this can be very efficient as it avoids multiple connections, and</tt> </tt>
+<a name="L516"></a><tt class="py-lineno"> 516</tt>  <tt class="py-line"><tt class="py-docstring">  also avoids loading the entire file into memory before sending it. Note that</tt> </tt>
+<a name="L517"></a><tt class="py-lineno"> 517</tt>  <tt class="py-line"><tt class="py-docstring">  Google App Engine has a 5MB limit on request size, so you should never set</tt> </tt>
+<a name="L518"></a><tt class="py-lineno"> 518</tt>  <tt class="py-line"><tt class="py-docstring">  your chunksize larger than 5MB, or to -1.</tt> </tt>
+<a name="L519"></a><tt class="py-lineno"> 519</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L520"></a><tt class="py-lineno"> 520</tt>  <tt class="py-line"> </tt>
+<a name="L521"></a><tt class="py-lineno"> 521</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="MediaFileUpload.__init__"></a><div id="MediaFileUpload.__init__-def"><a name="L522"></a><tt class="py-lineno"> 522</tt> <a class="py-toggle" href="#" id="MediaFileUpload.__init__-toggle" onclick="return toggle('MediaFileUpload.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaFileUpload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">,</tt> <tt class="py-param">mimetype</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">chunksize</tt><tt class="py-op">=</tt><tt id="link-51" class="py-name"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-51', 'DEFAULT_CHUNK_SIZE', 'link-26');">DEFAULT_CHUNK_SIZE</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L523"></a><tt class="py-lineno"> 523</tt>  <tt class="py-line">               <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaFileUpload.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaFileUpload.__init__-expanded"><a name="L524"></a><tt class="py-lineno"> 524</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
+<a name="L525"></a><tt class="py-lineno"> 525</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L526"></a><tt class="py-lineno"> 526</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L527"></a><tt class="py-lineno"> 527</tt>  <tt class="py-line"><tt class="py-docstring">      filename: string, Name of the file.</tt> </tt>
+<a name="L528"></a><tt class="py-lineno"> 528</tt>  <tt class="py-line"><tt class="py-docstring">      mimetype: string, Mime-type of the file. If None then a mime-type will be</tt> </tt>
+<a name="L529"></a><tt class="py-lineno"> 529</tt>  <tt class="py-line"><tt class="py-docstring">        guessed from the file extension.</tt> </tt>
+<a name="L530"></a><tt class="py-lineno"> 530</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize: int, File will be uploaded in chunks of this many bytes. Only</tt> </tt>
+<a name="L531"></a><tt class="py-lineno"> 531</tt>  <tt class="py-line"><tt class="py-docstring">        used if resumable=True. Pass in a value of -1 if the file is to be</tt> </tt>
+<a name="L532"></a><tt class="py-lineno"> 532</tt>  <tt class="py-line"><tt class="py-docstring">        uploaded in a single chunk. Note that Google App Engine has a 5MB limit</tt> </tt>
+<a name="L533"></a><tt class="py-lineno"> 533</tt>  <tt class="py-line"><tt class="py-docstring">        on request size, so you should never set your chunksize larger than 5MB,</tt> </tt>
+<a name="L534"></a><tt class="py-lineno"> 534</tt>  <tt class="py-line"><tt class="py-docstring">        or to -1.</tt> </tt>
+<a name="L535"></a><tt class="py-lineno"> 535</tt>  <tt class="py-line"><tt class="py-docstring">      resumable: bool, True if this is a resumable upload. False means upload</tt> </tt>
+<a name="L536"></a><tt class="py-lineno"> 536</tt>  <tt class="py-line"><tt class="py-docstring">        in a single request.</tt> </tt>
+<a name="L537"></a><tt class="py-lineno"> 537</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L538"></a><tt class="py-lineno"> 538</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_filename</tt> <tt class="py-op">=</tt> <tt class="py-name">filename</tt> </tt>
+<a name="L539"></a><tt class="py-lineno"> 539</tt>  <tt class="py-line">    <tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_filename</tt><tt class="py-op">,</tt> <tt class="py-string">'rb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L540"></a><tt class="py-lineno"> 540</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-52" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-52', 'mimetype', 'link-44');">mimetype</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L541"></a><tt class="py-lineno"> 541</tt>  <tt class="py-line">      <tt class="py-comment"># No mimetype provided, make a guess.</tt> </tt>
+<a name="L542"></a><tt class="py-lineno"> 542</tt>  <tt class="py-line">      <tt id="link-53" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-53', 'mimetype', 'link-44');">mimetype</a></tt><tt class="py-op">,</tt> <tt class="py-name">_</tt> <tt class="py-op">=</tt> <tt class="py-name">mimetypes</tt><tt class="py-op">.</tt><tt class="py-name">guess_type</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">)</tt> </tt>
+<a name="L543"></a><tt class="py-lineno"> 543</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt id="link-54" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-54', 'mimetype', 'link-44');">mimetype</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L544"></a><tt class="py-lineno"> 544</tt>  <tt class="py-line">        <tt class="py-comment"># Guess failed, use octet-stream.</tt> </tt>
+<a name="L545"></a><tt class="py-lineno"> 545</tt>  <tt class="py-line">        <tt id="link-55" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-55', 'mimetype', 'link-44');">mimetype</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/octet-stream'</tt> </tt>
+<a name="L546"></a><tt class="py-lineno"> 546</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-56" class="py-name" targets="Class googleapiclient.http.MediaFileUpload=googleapiclient.http.MediaFileUpload-class.html"><a title="googleapiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-56', 'MediaFileUpload', 'link-56');">MediaFileUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="googleapiclient.channel.Channel.__init__
+googleapiclient.channel.Notification.__init__
+googleapiclient.discovery.Resource.__init__
+googleapiclient.discovery.ResourceMethodParameters.__init__
+googleapiclient.discovery_cache.appengine_memcache.Cache.__init__
+googleapiclient.discovery_cache.file_cache.Cache.__init__
+googleapiclient.errors.BatchError.__init__
+googleapiclient.errors.HttpError.__init__
+googleapiclient.errors.UnexpectedBodyError.__init__
+googleapiclient.errors.UnexpectedMethodError.__init__
+googleapiclient.http.BatchHttpRequest.__init__
+googleapiclient.http.HttpMock.__init__
+googleapiclient.http.HttpMockSequence.__init__
+googleapiclient.http.HttpRequest.__init__
+googleapiclient.http.HttpRequestMock.__init__
+googleapiclient.http.MediaDownloadProgress.__init__
+googleapiclient.http.MediaFileUpload.__init__
+googleapiclient.http.MediaInMemoryUpload.__init__
+googleapiclient.http.MediaIoBaseDownload.__init__
+googleapiclient.http.MediaIoBaseUpload.__init__
+googleapiclient.http.MediaUploadProgress.__init__
+googleapiclient.http.RequestMockBuilder.__init__
+googleapiclient.http._StreamSlice.__init__
+googleapiclient.model.JsonModel.__init__
+googleapiclient.model.ProtocolBufferModel.__init__
+googleapiclient.schema.Schemas.__init__
+googleapiclient.schema._SchemaToStruct.__init__" class="py-name" href="#" onclick="return doclink('link-57', '__init__', 'link-43');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt id="link-58" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-58', 'mimetype', 'link-44');">mimetype</a></tt><tt class="py-op">,</tt> <tt id="link-59" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-59', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">=</tt><tt id="link-60" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-60', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L547"></a><tt class="py-lineno"> 547</tt>  <tt class="py-line">                                          <tt id="link-61" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-61', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">=</tt><tt id="link-62" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-62', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L548"></a><tt class="py-lineno"> 548</tt>  <tt class="py-line"> </tt>
+<a name="MediaFileUpload.to_json"></a><div id="MediaFileUpload.to_json-def"><a name="L549"></a><tt class="py-lineno"> 549</tt> <a class="py-toggle" href="#" id="MediaFileUpload.to_json-toggle" onclick="return toggle('MediaFileUpload.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaFileUpload-class.html#to_json">to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaFileUpload.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaFileUpload.to_json-expanded"><a name="L550"></a><tt class="py-lineno"> 550</tt>  <tt class="py-line">    <tt class="py-docstring">"""Creating a JSON representation of an instance of MediaFileUpload.</tt> </tt>
+<a name="L551"></a><tt class="py-lineno"> 551</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L552"></a><tt class="py-lineno"> 552</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L553"></a><tt class="py-lineno"> 553</tt>  <tt class="py-line"><tt class="py-docstring">       string, a JSON representation of this instance, suitable to pass to</tt> </tt>
+<a name="L554"></a><tt class="py-lineno"> 554</tt>  <tt class="py-line"><tt class="py-docstring">       from_json().</tt> </tt>
+<a name="L555"></a><tt class="py-lineno"> 555</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L556"></a><tt class="py-lineno"> 556</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="googleapiclient.http.MediaUpload._to_json" class="py-name" href="#" onclick="return doclink('link-63', '_to_json', 'link-38');">_to_json</a></tt><tt class="py-op">(</tt><tt class="py-name">strip</tt><tt class="py-op">=</tt><tt class="py-op">[</tt><tt class="py-string">'_fd'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L557"></a><tt class="py-lineno"> 557</tt>  <tt class="py-line"> </tt>
+<a name="L558"></a><tt class="py-lineno"> 558</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="MediaFileUpload.from_json"></a><div id="MediaFileUpload.from_json-def"><a name="L559"></a><tt class="py-lineno"> 559</tt> <a class="py-toggle" href="#" id="MediaFileUpload.from_json-toggle" onclick="return toggle('MediaFileUpload.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaFileUpload-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaFileUpload.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaFileUpload.from_json-expanded"><a name="L560"></a><tt class="py-lineno"> 560</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L561"></a><tt class="py-lineno"> 561</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-64" class="py-name"><a title="googleapiclient.http.MediaFileUpload" class="py-name" href="#" onclick="return doclink('link-64', 'MediaFileUpload', 'link-56');">MediaFileUpload</a></tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_filename'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-65" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-65', 'mimetype', 'link-44');">mimetype</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_mimetype'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L562"></a><tt class="py-lineno"> 562</tt>  <tt class="py-line">                           <tt id="link-66" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-66', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_chunksize'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt id="link-67" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-67', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_resumable'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L563"></a><tt class="py-lineno"> 563</tt>  <tt class="py-line"> </tt>
+<a name="MediaInMemoryUpload"></a><div id="MediaInMemoryUpload-def"><a name="L564"></a><tt class="py-lineno"> 564</tt>  <tt class="py-line"> </tt>
+<a name="L565"></a><tt class="py-lineno"> 565</tt> <a class="py-toggle" href="#" id="MediaInMemoryUpload-toggle" onclick="return toggle('MediaInMemoryUpload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaInMemoryUpload-class.html">MediaInMemoryUpload</a><tt class="py-op">(</tt><tt class="py-base-class">MediaIoBaseUpload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaInMemoryUpload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaInMemoryUpload-expanded"><a name="L566"></a><tt class="py-lineno"> 566</tt>  <tt class="py-line">  <tt class="py-docstring">"""MediaUpload for a chunk of bytes.</tt> </tt>
+<a name="L567"></a><tt class="py-lineno"> 567</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L568"></a><tt class="py-lineno"> 568</tt>  <tt class="py-line"><tt class="py-docstring">  DEPRECATED: Use MediaIoBaseUpload with either io.TextIOBase or StringIO for</tt> </tt>
+<a name="L569"></a><tt class="py-lineno"> 569</tt>  <tt class="py-line"><tt class="py-docstring">  the stream.</tt> </tt>
+<a name="L570"></a><tt class="py-lineno"> 570</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L571"></a><tt class="py-lineno"> 571</tt>  <tt class="py-line"> </tt>
+<a name="L572"></a><tt class="py-lineno"> 572</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="MediaInMemoryUpload.__init__"></a><div id="MediaInMemoryUpload.__init__-def"><a name="L573"></a><tt class="py-lineno"> 573</tt> <a class="py-toggle" href="#" id="MediaInMemoryUpload.__init__-toggle" onclick="return toggle('MediaInMemoryUpload.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaInMemoryUpload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">,</tt> <tt class="py-param">mimetype</tt><tt class="py-op">=</tt><tt class="py-string">'application/octet-stream'</tt><tt class="py-op">,</tt> </tt>
+<a name="L574"></a><tt class="py-lineno"> 574</tt>  <tt class="py-line">               <tt class="py-param">chunksize</tt><tt class="py-op">=</tt><tt id="link-68" class="py-name"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-68', 'DEFAULT_CHUNK_SIZE', 'link-26');">DEFAULT_CHUNK_SIZE</a></tt><tt class="py-op">,</tt> <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaInMemoryUpload.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaInMemoryUpload.__init__-expanded"><a name="L575"></a><tt class="py-lineno"> 575</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create a new MediaInMemoryUpload.</tt> </tt>
+<a name="L576"></a><tt class="py-lineno"> 576</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L577"></a><tt class="py-lineno"> 577</tt>  <tt class="py-line"><tt class="py-docstring">  DEPRECATED: Use MediaIoBaseUpload with either io.TextIOBase or StringIO for</tt> </tt>
+<a name="L578"></a><tt class="py-lineno"> 578</tt>  <tt class="py-line"><tt class="py-docstring">  the stream.</tt> </tt>
+<a name="L579"></a><tt class="py-lineno"> 579</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L580"></a><tt class="py-lineno"> 580</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L581"></a><tt class="py-lineno"> 581</tt>  <tt class="py-line"><tt class="py-docstring">    body: string, Bytes of body content.</tt> </tt>
+<a name="L582"></a><tt class="py-lineno"> 582</tt>  <tt class="py-line"><tt class="py-docstring">    mimetype: string, Mime-type of the file or default of</tt> </tt>
+<a name="L583"></a><tt class="py-lineno"> 583</tt>  <tt class="py-line"><tt class="py-docstring">      'application/octet-stream'.</tt> </tt>
+<a name="L584"></a><tt class="py-lineno"> 584</tt>  <tt class="py-line"><tt class="py-docstring">    chunksize: int, File will be uploaded in chunks of this many bytes. Only</tt> </tt>
+<a name="L585"></a><tt class="py-lineno"> 585</tt>  <tt class="py-line"><tt class="py-docstring">      used if resumable=True.</tt> </tt>
+<a name="L586"></a><tt class="py-lineno"> 586</tt>  <tt class="py-line"><tt class="py-docstring">    resumable: bool, True if this is a resumable upload. False means upload</tt> </tt>
+<a name="L587"></a><tt class="py-lineno"> 587</tt>  <tt class="py-line"><tt class="py-docstring">      in a single request.</tt> </tt>
+<a name="L588"></a><tt class="py-lineno"> 588</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L589"></a><tt class="py-lineno"> 589</tt>  <tt class="py-line">    <tt class="py-name">fd</tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt><tt id="link-69" class="py-name" targets="Method googleapiclient.channel.Channel.body()=googleapiclient.channel.Channel-class.html#body"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-69', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L590"></a><tt class="py-lineno"> 590</tt>  <tt class="py-line">    <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-70" class="py-name" targets="Class googleapiclient.http.MediaInMemoryUpload=googleapiclient.http.MediaInMemoryUpload-class.html"><a title="googleapiclient.http.MediaInMemoryUpload" class="py-name" href="#" onclick="return doclink('link-70', 'MediaInMemoryUpload', 'link-70');">MediaInMemoryUpload</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="googleapiclient.channel.Channel.__init__
+googleapiclient.channel.Notification.__init__
+googleapiclient.discovery.Resource.__init__
+googleapiclient.discovery.ResourceMethodParameters.__init__
+googleapiclient.discovery_cache.appengine_memcache.Cache.__init__
+googleapiclient.discovery_cache.file_cache.Cache.__init__
+googleapiclient.errors.BatchError.__init__
+googleapiclient.errors.HttpError.__init__
+googleapiclient.errors.UnexpectedBodyError.__init__
+googleapiclient.errors.UnexpectedMethodError.__init__
+googleapiclient.http.BatchHttpRequest.__init__
+googleapiclient.http.HttpMock.__init__
+googleapiclient.http.HttpMockSequence.__init__
+googleapiclient.http.HttpRequest.__init__
+googleapiclient.http.HttpRequestMock.__init__
+googleapiclient.http.MediaDownloadProgress.__init__
+googleapiclient.http.MediaFileUpload.__init__
+googleapiclient.http.MediaInMemoryUpload.__init__
+googleapiclient.http.MediaIoBaseDownload.__init__
+googleapiclient.http.MediaIoBaseUpload.__init__
+googleapiclient.http.MediaUploadProgress.__init__
+googleapiclient.http.RequestMockBuilder.__init__
+googleapiclient.http._StreamSlice.__init__
+googleapiclient.model.JsonModel.__init__
+googleapiclient.model.ProtocolBufferModel.__init__
+googleapiclient.schema.Schemas.__init__
+googleapiclient.schema._SchemaToStruct.__init__" class="py-name" href="#" onclick="return doclink('link-71', '__init__', 'link-43');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">fd</tt><tt class="py-op">,</tt> <tt id="link-72" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-72', 'mimetype', 'link-44');">mimetype</a></tt><tt class="py-op">,</tt> <tt id="link-73" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-73', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">=</tt><tt id="link-74" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-74', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L591"></a><tt class="py-lineno"> 591</tt>  <tt class="py-line">                                              <tt id="link-75" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-75', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">=</tt><tt id="link-76" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-76', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L592"></a><tt class="py-lineno"> 592</tt>  <tt class="py-line"> </tt>
+<a name="MediaIoBaseDownload"></a><div id="MediaIoBaseDownload-def"><a name="L593"></a><tt class="py-lineno"> 593</tt>  <tt class="py-line"> </tt>
+<a name="L594"></a><tt class="py-lineno"> 594</tt> <a class="py-toggle" href="#" id="MediaIoBaseDownload-toggle" onclick="return toggle('MediaIoBaseDownload');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseDownload-class.html">MediaIoBaseDownload</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseDownload-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="MediaIoBaseDownload-expanded"><a name="L595"></a><tt class="py-lineno"> 595</tt>  <tt class="py-line">  <tt class="py-docstring">""""Download media resources.</tt> </tt>
+<a name="L596"></a><tt class="py-lineno"> 596</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L597"></a><tt class="py-lineno"> 597</tt>  <tt class="py-line"><tt class="py-docstring">  Note that the Python file object is compatible with io.Base and can be used</tt> </tt>
+<a name="L598"></a><tt class="py-lineno"> 598</tt>  <tt class="py-line"><tt class="py-docstring">  with this class also.</tt> </tt>
+<a name="L599"></a><tt class="py-lineno"> 599</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L600"></a><tt class="py-lineno"> 600</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L601"></a><tt class="py-lineno"> 601</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
+<a name="L602"></a><tt class="py-lineno"> 602</tt>  <tt class="py-line"><tt class="py-docstring">    request = farms.animals().get_media(id='cow')</tt> </tt>
+<a name="L603"></a><tt class="py-lineno"> 603</tt>  <tt class="py-line"><tt class="py-docstring">    fh = io.FileIO('cow.png', mode='wb')</tt> </tt>
+<a name="L604"></a><tt class="py-lineno"> 604</tt>  <tt class="py-line"><tt class="py-docstring">    downloader = MediaIoBaseDownload(fh, request, chunksize=1024*1024)</tt> </tt>
+<a name="L605"></a><tt class="py-lineno"> 605</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L606"></a><tt class="py-lineno"> 606</tt>  <tt class="py-line"><tt class="py-docstring">    done = False</tt> </tt>
+<a name="L607"></a><tt class="py-lineno"> 607</tt>  <tt class="py-line"><tt class="py-docstring">    while done is False:</tt> </tt>
+<a name="L608"></a><tt class="py-lineno"> 608</tt>  <tt class="py-line"><tt class="py-docstring">      status, done = downloader.next_chunk()</tt> </tt>
+<a name="L609"></a><tt class="py-lineno"> 609</tt>  <tt class="py-line"><tt class="py-docstring">      if status:</tt> </tt>
+<a name="L610"></a><tt class="py-lineno"> 610</tt>  <tt class="py-line"><tt class="py-docstring">        print "Download %d%%." % int(status.progress() * 100)</tt> </tt>
+<a name="L611"></a><tt class="py-lineno"> 611</tt>  <tt class="py-line"><tt class="py-docstring">    print "Download Complete!"</tt> </tt>
+<a name="L612"></a><tt class="py-lineno"> 612</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L613"></a><tt class="py-lineno"> 613</tt>  <tt class="py-line"> </tt>
+<a name="L614"></a><tt class="py-lineno"> 614</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt> </tt>
+<a name="MediaIoBaseDownload.__init__"></a><div id="MediaIoBaseDownload.__init__-def"><a name="L615"></a><tt class="py-lineno"> 615</tt> <a class="py-toggle" href="#" id="MediaIoBaseDownload.__init__-toggle" onclick="return toggle('MediaIoBaseDownload.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseDownload-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fd</tt><tt class="py-op">,</tt> <tt class="py-param">request</tt><tt class="py-op">,</tt> <tt class="py-param">chunksize</tt><tt class="py-op">=</tt><tt id="link-77" class="py-name"><a title="googleapiclient.http.DEFAULT_CHUNK_SIZE" class="py-name" href="#" onclick="return doclink('link-77', 'DEFAULT_CHUNK_SIZE', 'link-26');">DEFAULT_CHUNK_SIZE</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseDownload.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseDownload.__init__-expanded"><a name="L616"></a><tt class="py-lineno"> 616</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
+<a name="L617"></a><tt class="py-lineno"> 617</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L618"></a><tt class="py-lineno"> 618</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L619"></a><tt class="py-lineno"> 619</tt>  <tt class="py-line"><tt class="py-docstring">      fd: io.Base or file object, The stream in which to write the downloaded</tt> </tt>
+<a name="L620"></a><tt class="py-lineno"> 620</tt>  <tt class="py-line"><tt class="py-docstring">        bytes.</tt> </tt>
+<a name="L621"></a><tt class="py-lineno"> 621</tt>  <tt class="py-line"><tt class="py-docstring">      request: googleapiclient.http.HttpRequest, the media request to perform in</tt> </tt>
+<a name="L622"></a><tt class="py-lineno"> 622</tt>  <tt class="py-line"><tt class="py-docstring">        chunks.</tt> </tt>
+<a name="L623"></a><tt class="py-lineno"> 623</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize: int, File will be downloaded in chunks of this many bytes.</tt> </tt>
+<a name="L624"></a><tt class="py-lineno"> 624</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L625"></a><tt class="py-lineno"> 625</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt> <tt class="py-op">=</tt> <tt class="py-name">fd</tt> </tt>
+<a name="L626"></a><tt class="py-lineno"> 626</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_request</tt> <tt class="py-op">=</tt> <tt id="link-78" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-78', 'request', 'link-34');">request</a></tt> </tt>
+<a name="L627"></a><tt class="py-lineno"> 627</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt> <tt class="py-op">=</tt> <tt id="link-79" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-79', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> </tt>
+<a name="L628"></a><tt class="py-lineno"> 628</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> <tt class="py-op">=</tt> <tt id="link-80" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-80', 'chunksize', 'link-45');">chunksize</a></tt> </tt>
+<a name="L629"></a><tt class="py-lineno"> 629</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L630"></a><tt class="py-lineno"> 630</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L631"></a><tt class="py-lineno"> 631</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_done</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L632"></a><tt class="py-lineno"> 632</tt>  <tt class="py-line"> </tt>
+<a name="L633"></a><tt class="py-lineno"> 633</tt>  <tt class="py-line">    <tt class="py-comment"># Stubs for testing.</tt> </tt>
+<a name="L634"></a><tt class="py-lineno"> 634</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt> </tt>
+<a name="L635"></a><tt class="py-lineno"> 635</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt> <tt class="py-op">=</tt> <tt class="py-name">random</tt><tt class="py-op">.</tt><tt class="py-name">random</tt> </tt>
+</div><a name="L636"></a><tt class="py-lineno"> 636</tt>  <tt class="py-line"> </tt>
+<a name="L637"></a><tt class="py-lineno"> 637</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="MediaIoBaseDownload.next_chunk"></a><div id="MediaIoBaseDownload.next_chunk-def"><a name="L638"></a><tt class="py-lineno"> 638</tt> <a class="py-toggle" href="#" id="MediaIoBaseDownload.next_chunk-toggle" onclick="return toggle('MediaIoBaseDownload.next_chunk');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.MediaIoBaseDownload-class.html#next_chunk">next_chunk</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">num_retries</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaIoBaseDownload.next_chunk-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="MediaIoBaseDownload.next_chunk-expanded"><a name="L639"></a><tt class="py-lineno"> 639</tt>  <tt class="py-line">    <tt class="py-docstring">"""Get the next chunk of the download.</tt> </tt>
+<a name="L640"></a><tt class="py-lineno"> 640</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L641"></a><tt class="py-lineno"> 641</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L642"></a><tt class="py-lineno"> 642</tt>  <tt class="py-line"><tt class="py-docstring">      num_retries: Integer, number of times to retry 500's with randomized</tt> </tt>
+<a name="L643"></a><tt class="py-lineno"> 643</tt>  <tt class="py-line"><tt class="py-docstring">            exponential backoff. If all retries fail, the raised HttpError</tt> </tt>
+<a name="L644"></a><tt class="py-lineno"> 644</tt>  <tt class="py-line"><tt class="py-docstring">            represents the last request. If zero (default), we attempt the</tt> </tt>
+<a name="L645"></a><tt class="py-lineno"> 645</tt>  <tt class="py-line"><tt class="py-docstring">            request only once.</tt> </tt>
+<a name="L646"></a><tt class="py-lineno"> 646</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L647"></a><tt class="py-lineno"> 647</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L648"></a><tt class="py-lineno"> 648</tt>  <tt class="py-line"><tt class="py-docstring">      (status, done): (MediaDownloadStatus, boolean)</tt> </tt>
+<a name="L649"></a><tt class="py-lineno"> 649</tt>  <tt class="py-line"><tt class="py-docstring">         The value of 'done' will be True when the media has been fully</tt> </tt>
+<a name="L650"></a><tt class="py-lineno"> 650</tt>  <tt class="py-line"><tt class="py-docstring">         downloaded.</tt> </tt>
+<a name="L651"></a><tt class="py-lineno"> 651</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L652"></a><tt class="py-lineno"> 652</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L653"></a><tt class="py-lineno"> 653</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if the response was not a 2xx.</tt> </tt>
+<a name="L654"></a><tt class="py-lineno"> 654</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
+<a name="L655"></a><tt class="py-lineno"> 655</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L656"></a><tt class="py-lineno"> 656</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L657"></a><tt class="py-lineno"> 657</tt>  <tt class="py-line">        <tt class="py-string">'range'</tt><tt class="py-op">:</tt> <tt class="py-string">'bytes=%d-%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
+<a name="L658"></a><tt class="py-lineno"> 658</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt><tt class="py-op">)</tt> </tt>
+<a name="L659"></a><tt class="py-lineno"> 659</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
+<a name="L660"></a><tt class="py-lineno"> 660</tt>  <tt class="py-line">    <tt id="link-81" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-81', 'http', 'link-33');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_request</tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-82', 'http', 'link-33');">http</a></tt> </tt>
+<a name="L661"></a><tt class="py-lineno"> 661</tt>  <tt class="py-line"> </tt>
+<a name="L662"></a><tt class="py-lineno"> 662</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-83" class="py-name" targets="Function googleapiclient.http._retry_request()=googleapiclient.http-module.html#_retry_request"><a title="googleapiclient.http._retry_request" class="py-name" href="#" onclick="return doclink('link-83', '_retry_request', 'link-83');">_retry_request</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L663"></a><tt class="py-lineno"> 663</tt>  <tt class="py-line">        <tt id="link-84" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-84', 'http', 'link-33');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">num_retries</tt><tt class="py-op">,</tt> <tt class="py-string">'media download'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L664"></a><tt class="py-lineno"> 664</tt>  <tt class="py-line">        <tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L665"></a><tt class="py-lineno"> 665</tt>  <tt class="py-line"> </tt>
+<a name="L666"></a><tt class="py-lineno"> 666</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-number">200</tt><tt class="py-op">,</tt> <tt class="py-number">206</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L667"></a><tt class="py-lineno"> 667</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'content-location'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt> <tt class="py-keyword">and</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-location'</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt><tt class="py-op">:</tt> </tt>
+<a name="L668"></a><tt class="py-lineno"> 668</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-location'</tt><tt class="py-op">]</tt> </tt>
+<a name="L669"></a><tt class="py-lineno"> 669</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L670"></a><tt class="py-lineno"> 670</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_fd</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L671"></a><tt class="py-lineno"> 671</tt>  <tt class="py-line"> </tt>
+<a name="L672"></a><tt class="py-lineno"> 672</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'content-range'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
+<a name="L673"></a><tt class="py-lineno"> 673</tt>  <tt class="py-line">        <tt class="py-name">content_range</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-range'</tt><tt class="py-op">]</tt> </tt>
+<a name="L674"></a><tt class="py-lineno"> 674</tt>  <tt class="py-line">        <tt class="py-name">length</tt> <tt class="py-op">=</tt> <tt class="py-name">content_range</tt><tt class="py-op">.</tt><tt class="py-name">rsplit</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L675"></a><tt class="py-lineno"> 675</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">length</tt><tt class="py-op">)</tt> </tt>
+<a name="L676"></a><tt class="py-lineno"> 676</tt>  <tt class="py-line">      <tt class="py-keyword">elif</tt> <tt class="py-string">'content-length'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
+<a name="L677"></a><tt class="py-lineno"> 677</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L678"></a><tt class="py-lineno"> 678</tt>  <tt class="py-line"> </tt>
+<a name="L679"></a><tt class="py-lineno"> 679</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt><tt class="py-op">:</tt> </tt>
+<a name="L680"></a><tt class="py-lineno"> 680</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_done</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L681"></a><tt class="py-lineno"> 681</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-85" class="py-name" targets="Class googleapiclient.http.MediaDownloadProgress=googleapiclient.http.MediaDownloadProgress-class.html"><a title="googleapiclient.http.MediaDownloadProgress" class="py-name" href="#" onclick="return doclink('link-85', 'MediaDownloadProgress', 'link-85');">MediaDownloadProgress</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_progress</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_total_size</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_done</tt> </tt>
+<a name="L682"></a><tt class="py-lineno"> 682</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L683"></a><tt class="py-lineno"> 683</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-86" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-86', 'HttpError', 'link-9');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_uri</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L684"></a><tt class="py-lineno"> 684</tt>  <tt class="py-line"> </tt>
+<a name="_StreamSlice"></a><div id="_StreamSlice-def"><a name="L685"></a><tt class="py-lineno"> 685</tt>  <tt class="py-line"> </tt>
+<a name="L686"></a><tt class="py-lineno"> 686</tt> <a class="py-toggle" href="#" id="_StreamSlice-toggle" onclick="return toggle('_StreamSlice');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http._StreamSlice-class.html">_StreamSlice</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_StreamSlice-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="_StreamSlice-expanded"><a name="L687"></a><tt class="py-lineno"> 687</tt>  <tt class="py-line">  <tt class="py-docstring">"""Truncated stream.</tt> </tt>
+<a name="L688"></a><tt class="py-lineno"> 688</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L689"></a><tt class="py-lineno"> 689</tt>  <tt class="py-line"><tt class="py-docstring">  Takes a stream and presents a stream that is a slice of the original stream.</tt> </tt>
+<a name="L690"></a><tt class="py-lineno"> 690</tt>  <tt class="py-line"><tt class="py-docstring">  This is used when uploading media in chunks. In later versions of Python a</tt> </tt>
+<a name="L691"></a><tt class="py-lineno"> 691</tt>  <tt class="py-line"><tt class="py-docstring">  stream can be passed to httplib in place of the string of data to send. The</tt> </tt>
+<a name="L692"></a><tt class="py-lineno"> 692</tt>  <tt class="py-line"><tt class="py-docstring">  problem is that httplib just blindly reads to the end of the stream. This</tt> </tt>
+<a name="L693"></a><tt class="py-lineno"> 693</tt>  <tt class="py-line"><tt class="py-docstring">  wrapper presents a virtual stream that only reads to the end of the chunk.</tt> </tt>
+<a name="L694"></a><tt class="py-lineno"> 694</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
 <a name="L695"></a><tt class="py-lineno"> 695</tt>  <tt class="py-line"> </tt>
-<a name="L696"></a><tt class="py-lineno"> 696</tt>  <tt class="py-line">    <tt class="py-comment"># The resumable URI to send chunks to.</tt> </tt>
-<a name="L697"></a><tt class="py-lineno"> 697</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L698"></a><tt class="py-lineno"> 698</tt>  <tt class="py-line"> </tt>
-<a name="L699"></a><tt class="py-lineno"> 699</tt>  <tt class="py-line">    <tt class="py-comment"># The bytes that have been uploaded.</tt> </tt>
-<a name="L700"></a><tt class="py-lineno"> 700</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L701"></a><tt class="py-lineno"> 701</tt>  <tt class="py-line"> </tt>
-<a name="L702"></a><tt class="py-lineno"> 702</tt>  <tt class="py-line">    <tt class="py-comment"># Stubs for testing.</tt> </tt>
-<a name="L703"></a><tt class="py-lineno"> 703</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt> <tt class="py-op">=</tt> <tt class="py-name">random</tt><tt class="py-op">.</tt><tt class="py-name">random</tt> </tt>
-<a name="L704"></a><tt class="py-lineno"> 704</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt> </tt>
-</div><a name="L705"></a><tt class="py-lineno"> 705</tt>  <tt class="py-line"> </tt>
-<a name="L706"></a><tt class="py-lineno"> 706</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="HttpRequest.execute"></a><div id="HttpRequest.execute-def"><a name="L707"></a><tt class="py-lineno"> 707</tt> <a class="py-toggle" href="#" id="HttpRequest.execute-toggle" onclick="return toggle('HttpRequest.execute');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#execute">execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">num_retries</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequest.execute-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.execute-expanded"><a name="L708"></a><tt class="py-lineno"> 708</tt>  <tt class="py-line">    <tt class="py-docstring">"""Execute the request.</tt> </tt>
-<a name="L709"></a><tt class="py-lineno"> 709</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L710"></a><tt class="py-lineno"> 710</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L711"></a><tt class="py-lineno"> 711</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used in place of the</tt> </tt>
-<a name="L712"></a><tt class="py-lineno"> 712</tt>  <tt class="py-line"><tt class="py-docstring">            one the HttpRequest request object was constructed with.</tt> </tt>
-<a name="L713"></a><tt class="py-lineno"> 713</tt>  <tt class="py-line"><tt class="py-docstring">      num_retries: Integer, number of times to retry 500's with randomized</tt> </tt>
-<a name="L714"></a><tt class="py-lineno"> 714</tt>  <tt class="py-line"><tt class="py-docstring">            exponential backoff. If all retries fail, the raised HttpError</tt> </tt>
-<a name="L715"></a><tt class="py-lineno"> 715</tt>  <tt class="py-line"><tt class="py-docstring">            represents the last request. If zero (default), we attempt the</tt> </tt>
-<a name="L716"></a><tt class="py-lineno"> 716</tt>  <tt class="py-line"><tt class="py-docstring">            request only once.</tt> </tt>
-<a name="L717"></a><tt class="py-lineno"> 717</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L718"></a><tt class="py-lineno"> 718</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L719"></a><tt class="py-lineno"> 719</tt>  <tt class="py-line"><tt class="py-docstring">      A deserialized object model of the response body as determined</tt> </tt>
-<a name="L720"></a><tt class="py-lineno"> 720</tt>  <tt class="py-line"><tt class="py-docstring">      by the postproc.</tt> </tt>
-<a name="L721"></a><tt class="py-lineno"> 721</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L722"></a><tt class="py-lineno"> 722</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L723"></a><tt class="py-lineno"> 723</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if the response was not a 2xx.</tt> </tt>
-<a name="L724"></a><tt class="py-lineno"> 724</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
-<a name="L725"></a><tt class="py-lineno"> 725</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L726"></a><tt class="py-lineno"> 726</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-89" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-89', 'http', 'link-25');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L727"></a><tt class="py-lineno"> 727</tt>  <tt class="py-line">      <tt id="link-90" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-90', 'http', 'link-25');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-91', 'http', 'link-25');">http</a></tt> </tt>
+<a name="_StreamSlice.__init__"></a><div id="_StreamSlice.__init__-def"><a name="L696"></a><tt class="py-lineno"> 696</tt> <a class="py-toggle" href="#" id="_StreamSlice.__init__-toggle" onclick="return toggle('_StreamSlice.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http._StreamSlice-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">stream</tt><tt class="py-op">,</tt> <tt class="py-param">begin</tt><tt class="py-op">,</tt> <tt class="py-param">chunksize</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_StreamSlice.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="_StreamSlice.__init__-expanded"><a name="L697"></a><tt class="py-lineno"> 697</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor.</tt> </tt>
+<a name="L698"></a><tt class="py-lineno"> 698</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L699"></a><tt class="py-lineno"> 699</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L700"></a><tt class="py-lineno"> 700</tt>  <tt class="py-line"><tt class="py-docstring">      stream: (io.Base, file object), the stream to wrap.</tt> </tt>
+<a name="L701"></a><tt class="py-lineno"> 701</tt>  <tt class="py-line"><tt class="py-docstring">      begin: int, the seek position the chunk begins at.</tt> </tt>
+<a name="L702"></a><tt class="py-lineno"> 702</tt>  <tt class="py-line"><tt class="py-docstring">      chunksize: int, the size of the chunk.</tt> </tt>
+<a name="L703"></a><tt class="py-lineno"> 703</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L704"></a><tt class="py-lineno"> 704</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_stream</tt> <tt class="py-op">=</tt> <tt id="link-87" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.stream()=googleapiclient.http.MediaIoBaseUpload-class.html#stream,Method googleapiclient.http.MediaUpload.stream()=googleapiclient.http.MediaUpload-class.html#stream"><a title="googleapiclient.http.MediaIoBaseUpload.stream
+googleapiclient.http.MediaUpload.stream" class="py-name" href="#" onclick="return doclink('link-87', 'stream', 'link-87');">stream</a></tt> </tt>
+<a name="L705"></a><tt class="py-lineno"> 705</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_begin</tt> <tt class="py-op">=</tt> <tt class="py-name">begin</tt> </tt>
+<a name="L706"></a><tt class="py-lineno"> 706</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> <tt class="py-op">=</tt> <tt id="link-88" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-88', 'chunksize', 'link-45');">chunksize</a></tt> </tt>
+<a name="L707"></a><tt class="py-lineno"> 707</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_stream</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-name">begin</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L708"></a><tt class="py-lineno"> 708</tt>  <tt class="py-line"> </tt>
+<a name="_StreamSlice.read"></a><div id="_StreamSlice.read-def"><a name="L709"></a><tt class="py-lineno"> 709</tt> <a class="py-toggle" href="#" id="_StreamSlice.read-toggle" onclick="return toggle('_StreamSlice.read');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http._StreamSlice-class.html#read">read</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">n</tt><tt class="py-op">=</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_StreamSlice.read-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="_StreamSlice.read-expanded"><a name="L710"></a><tt class="py-lineno"> 710</tt>  <tt class="py-line">    <tt class="py-docstring">"""Read n bytes.</tt> </tt>
+<a name="L711"></a><tt class="py-lineno"> 711</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L712"></a><tt class="py-lineno"> 712</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L713"></a><tt class="py-lineno"> 713</tt>  <tt class="py-line"><tt class="py-docstring">      n, int, the number of bytes to read.</tt> </tt>
+<a name="L714"></a><tt class="py-lineno"> 714</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L715"></a><tt class="py-lineno"> 715</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L716"></a><tt class="py-lineno"> 716</tt>  <tt class="py-line"><tt class="py-docstring">      A string of length 'n', or less if EOF is reached.</tt> </tt>
+<a name="L717"></a><tt class="py-lineno"> 717</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L718"></a><tt class="py-lineno"> 718</tt>  <tt class="py-line">    <tt class="py-comment"># The data left available to read sits in [cur, end)</tt> </tt>
+<a name="L719"></a><tt class="py-lineno"> 719</tt>  <tt class="py-line">    <tt class="py-name">cur</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_stream</tt><tt class="py-op">.</tt><tt class="py-name">tell</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L720"></a><tt class="py-lineno"> 720</tt>  <tt class="py-line">    <tt class="py-name">end</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_begin</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_chunksize</tt> </tt>
+<a name="L721"></a><tt class="py-lineno"> 721</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">n</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt> <tt class="py-keyword">or</tt> <tt class="py-name">cur</tt> <tt class="py-op">+</tt> <tt class="py-name">n</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">end</tt><tt class="py-op">:</tt> </tt>
+<a name="L722"></a><tt class="py-lineno"> 722</tt>  <tt class="py-line">      <tt class="py-name">n</tt> <tt class="py-op">=</tt> <tt class="py-name">end</tt> <tt class="py-op">-</tt> <tt class="py-name">cur</tt> </tt>
+<a name="L723"></a><tt class="py-lineno"> 723</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_stream</tt><tt class="py-op">.</tt><tt id="link-89" class="py-name"><a title="googleapiclient.http._StreamSlice.read" class="py-name" href="#" onclick="return doclink('link-89', 'read', 'link-50');">read</a></tt><tt class="py-op">(</tt><tt class="py-name">n</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L724"></a><tt class="py-lineno"> 724</tt>  <tt class="py-line"> </tt>
+<a name="HttpRequest"></a><div id="HttpRequest-def"><a name="L725"></a><tt class="py-lineno"> 725</tt>  <tt class="py-line"> </tt>
+<a name="L726"></a><tt class="py-lineno"> 726</tt> <a class="py-toggle" href="#" id="HttpRequest-toggle" onclick="return toggle('HttpRequest');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html">HttpRequest</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequest-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HttpRequest-expanded"><a name="L727"></a><tt class="py-lineno"> 727</tt>  <tt class="py-line">  <tt class="py-docstring">"""Encapsulates a single HTTP request."""</tt> </tt>
 <a name="L728"></a><tt class="py-lineno"> 728</tt>  <tt class="py-line"> </tt>
-<a name="L729"></a><tt class="py-lineno"> 729</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-92', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L730"></a><tt class="py-lineno"> 730</tt>  <tt class="py-line">      <tt id="link-93" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-93', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L731"></a><tt class="py-lineno"> 731</tt>  <tt class="py-line">      <tt class="py-keyword">while</tt> <tt id="link-94" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-94', 'body', 'link-58');">body</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L732"></a><tt class="py-lineno"> 732</tt>  <tt class="py-line">        <tt class="py-name">_</tt><tt class="py-op">,</tt> <tt id="link-95" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-95', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-96" class="py-name" targets="Method googleapiclient.http.HttpRequest.next_chunk()=googleapiclient.http.HttpRequest-class.html#next_chunk,Method googleapiclient.http.MediaIoBaseDownload.next_chunk()=googleapiclient.http.MediaIoBaseDownload-class.html#next_chunk"><a title="googleapiclient.http.HttpRequest.next_chunk
-googleapiclient.http.MediaIoBaseDownload.next_chunk" class="py-name" href="#" onclick="return doclink('link-96', 'next_chunk', 'link-96');">next_chunk</a></tt><tt class="py-op">(</tt><tt id="link-97" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-97', 'http', 'link-25');">http</a></tt><tt class="py-op">=</tt><tt id="link-98" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-98', 'http', 'link-25');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">num_retries</tt><tt class="py-op">=</tt><tt class="py-name">num_retries</tt><tt class="py-op">)</tt> </tt>
-<a name="L733"></a><tt class="py-lineno"> 733</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-99" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-99', 'body', 'link-58');">body</a></tt> </tt>
-<a name="L734"></a><tt class="py-lineno"> 734</tt>  <tt class="py-line"> </tt>
-<a name="L735"></a><tt class="py-lineno"> 735</tt>  <tt class="py-line">    <tt class="py-comment"># Non-resumable case.</tt> </tt>
-<a name="L736"></a><tt class="py-lineno"> 736</tt>  <tt class="py-line"> </tt>
-<a name="L737"></a><tt class="py-lineno"> 737</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'content-length'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
-<a name="L738"></a><tt class="py-lineno"> 738</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">body_size</tt><tt class="py-op">)</tt> </tt>
-<a name="L739"></a><tt class="py-lineno"> 739</tt>  <tt class="py-line">    <tt class="py-comment"># If the request URI is too long then turn it into a POST request.</tt> </tt>
-<a name="L740"></a><tt class="py-lineno"> 740</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt id="link-100" class="py-name"><a title="googleapiclient.http.MAX_URI_LENGTH" class="py-name" href="#" onclick="return doclink('link-100', 'MAX_URI_LENGTH', 'link-24');">MAX_URI_LENGTH</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">==</tt> <tt class="py-string">'GET'</tt><tt class="py-op">:</tt> </tt>
-<a name="L741"></a><tt class="py-lineno"> 741</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-string">'POST'</tt> </tt>
-<a name="L742"></a><tt class="py-lineno"> 742</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'x-http-method-override'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'GET'</tt> </tt>
-<a name="L743"></a><tt class="py-lineno"> 743</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'application/x-www-form-urlencoded'</tt> </tt>
-<a name="L744"></a><tt class="py-lineno"> 744</tt>  <tt class="py-line">      <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L745"></a><tt class="py-lineno"> 745</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">urlunparse</tt><tt class="py-op">(</tt> </tt>
-<a name="L746"></a><tt class="py-lineno"> 746</tt>  <tt class="py-line">          <tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">scheme</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">netloc</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line">           <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L748"></a><tt class="py-lineno"> 748</tt>  <tt class="py-line">          <tt class="py-op">)</tt> </tt>
-<a name="L749"></a><tt class="py-lineno"> 749</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-101', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">query</tt> </tt>
-<a name="L750"></a><tt class="py-lineno"> 750</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-102', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L751"></a><tt class="py-lineno"> 751</tt>  <tt class="py-line"> </tt>
-<a name="L752"></a><tt class="py-lineno"> 752</tt>  <tt class="py-line">    <tt class="py-comment"># Handle retries for server-side errors.</tt> </tt>
-<a name="L753"></a><tt class="py-lineno"> 753</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-103" class="py-name"><a title="googleapiclient.http._retry_request" class="py-name" href="#" onclick="return doclink('link-103', '_retry_request', 'link-72');">_retry_request</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L754"></a><tt class="py-lineno"> 754</tt>  <tt class="py-line">          <tt id="link-104" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-104', 'http', 'link-25');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">num_retries</tt><tt class="py-op">,</tt> <tt class="py-string">'request'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L755"></a><tt class="py-lineno"> 755</tt>  <tt class="py-line">          <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-105" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-105', 'body', 'link-58');">body</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-106', 'body', 'link-58');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L756"></a><tt class="py-lineno"> 756</tt>  <tt class="py-line"> </tt>
-<a name="L757"></a><tt class="py-lineno"> 757</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">callback</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_callbacks</tt><tt class="py-op">:</tt> </tt>
-<a name="L758"></a><tt class="py-lineno"> 758</tt>  <tt class="py-line">      <tt class="py-name">callback</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt> </tt>
-<a name="L759"></a><tt class="py-lineno"> 759</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">300</tt><tt class="py-op">:</tt> </tt>
-<a name="L760"></a><tt class="py-lineno"> 760</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-107" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-107', 'HttpError', 'link-7');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L761"></a><tt class="py-lineno"> 761</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L762"></a><tt class="py-lineno"> 762</tt>  <tt class="py-line"> </tt>
-<a name="L763"></a><tt class="py-lineno"> 763</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="HttpRequest.add_response_callback"></a><div id="HttpRequest.add_response_callback-def"><a name="L764"></a><tt class="py-lineno"> 764</tt> <a class="py-toggle" href="#" id="HttpRequest.add_response_callback-toggle" onclick="return toggle('HttpRequest.add_response_callback');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#add_response_callback">add_response_callback</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">cb</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequest.add_response_callback-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.add_response_callback-expanded"><a name="L765"></a><tt class="py-lineno"> 765</tt>  <tt class="py-line">    <tt class="py-docstring">"""add_response_headers_callback</tt> </tt>
-<a name="L766"></a><tt class="py-lineno"> 766</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L767"></a><tt class="py-lineno"> 767</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L768"></a><tt class="py-lineno"> 768</tt>  <tt class="py-line"><tt class="py-docstring">      cb: Callback to be called on receiving the response headers, of signature:</tt> </tt>
-<a name="L769"></a><tt class="py-lineno"> 769</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L770"></a><tt class="py-lineno"> 770</tt>  <tt class="py-line"><tt class="py-docstring">      def cb(resp):</tt> </tt>
-<a name="L771"></a><tt class="py-lineno"> 771</tt>  <tt class="py-line"><tt class="py-docstring">        # Where resp is an instance of httplib2.Response</tt> </tt>
-<a name="L772"></a><tt class="py-lineno"> 772</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L773"></a><tt class="py-lineno"> 773</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_callbacks</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">cb</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L774"></a><tt class="py-lineno"> 774</tt>  <tt class="py-line"> </tt>
-<a name="L775"></a><tt class="py-lineno"> 775</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="HttpRequest.next_chunk"></a><div id="HttpRequest.next_chunk-def"><a name="L776"></a><tt class="py-lineno"> 776</tt> <a class="py-toggle" href="#" id="HttpRequest.next_chunk-toggle" onclick="return toggle('HttpRequest.next_chunk');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#next_chunk">next_chunk</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">num_retries</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequest.next_chunk-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.next_chunk-expanded"><a name="L777"></a><tt class="py-lineno"> 777</tt>  <tt class="py-line">    <tt class="py-docstring">"""Execute the next step of a resumable upload.</tt> </tt>
-<a name="L778"></a><tt class="py-lineno"> 778</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L779"></a><tt class="py-lineno"> 779</tt>  <tt class="py-line"><tt class="py-docstring">    Can only be used if the method being executed supports media uploads and</tt> </tt>
-<a name="L780"></a><tt class="py-lineno"> 780</tt>  <tt class="py-line"><tt class="py-docstring">    the MediaUpload object passed in was flagged as using resumable upload.</tt> </tt>
+<a name="L729"></a><tt class="py-lineno"> 729</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt> </tt>
+<a name="HttpRequest.__init__"></a><div id="HttpRequest.__init__-def"><a name="L730"></a><tt class="py-lineno"> 730</tt> <a class="py-toggle" href="#" id="HttpRequest.__init__-toggle" onclick="return toggle('HttpRequest.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">postproc</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L731"></a><tt class="py-lineno"> 731</tt>  <tt class="py-line">               <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> </tt>
+<a name="L732"></a><tt class="py-lineno"> 732</tt>  <tt class="py-line">               <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L733"></a><tt class="py-lineno"> 733</tt>  <tt class="py-line">               <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L734"></a><tt class="py-lineno"> 734</tt>  <tt class="py-line">               <tt class="py-param">methodId</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L735"></a><tt class="py-lineno"> 735</tt>  <tt class="py-line">               <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequest.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.__init__-expanded"><a name="L736"></a><tt class="py-lineno"> 736</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for an HttpRequest.</tt> </tt>
+<a name="L737"></a><tt class="py-lineno"> 737</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L738"></a><tt class="py-lineno"> 738</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L739"></a><tt class="py-lineno"> 739</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, the transport object to use to make a request</tt> </tt>
+<a name="L740"></a><tt class="py-lineno"> 740</tt>  <tt class="py-line"><tt class="py-docstring">      postproc: callable, called on the HTTP response and content to transform</tt> </tt>
+<a name="L741"></a><tt class="py-lineno"> 741</tt>  <tt class="py-line"><tt class="py-docstring">                it into a data object before returning, or raising an exception</tt> </tt>
+<a name="L742"></a><tt class="py-lineno"> 742</tt>  <tt class="py-line"><tt class="py-docstring">                on an error.</tt> </tt>
+<a name="L743"></a><tt class="py-lineno"> 743</tt>  <tt class="py-line"><tt class="py-docstring">      uri: string, the absolute URI to send the request to</tt> </tt>
+<a name="L744"></a><tt class="py-lineno"> 744</tt>  <tt class="py-line"><tt class="py-docstring">      method: string, the HTTP method to use</tt> </tt>
+<a name="L745"></a><tt class="py-lineno"> 745</tt>  <tt class="py-line"><tt class="py-docstring">      body: string, the request body of the HTTP request,</tt> </tt>
+<a name="L746"></a><tt class="py-lineno"> 746</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, the HTTP request headers</tt> </tt>
+<a name="L747"></a><tt class="py-lineno"> 747</tt>  <tt class="py-line"><tt class="py-docstring">      methodId: string, a unique identifier for the API method being called.</tt> </tt>
+<a name="L748"></a><tt class="py-lineno"> 748</tt>  <tt class="py-line"><tt class="py-docstring">      resumable: MediaUpload, None if this is not a resumbale request.</tt> </tt>
+<a name="L749"></a><tt class="py-lineno"> 749</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L750"></a><tt class="py-lineno"> 750</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
+<a name="L751"></a><tt class="py-lineno"> 751</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">method</tt> </tt>
+<a name="L752"></a><tt class="py-lineno"> 752</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-90', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-91" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-91', 'body', 'link-69');">body</a></tt> </tt>
+<a name="L753"></a><tt class="py-lineno"> 753</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">or</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L754"></a><tt class="py-lineno"> 754</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">methodId</tt> <tt class="py-op">=</tt> <tt class="py-name">methodId</tt> </tt>
+<a name="L755"></a><tt class="py-lineno"> 755</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-92', 'http', 'link-33');">http</a></tt> <tt class="py-op">=</tt> <tt id="link-93" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-93', 'http', 'link-33');">http</a></tt> </tt>
+<a name="L756"></a><tt class="py-lineno"> 756</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt> <tt class="py-op">=</tt> <tt class="py-name">postproc</tt> </tt>
+<a name="L757"></a><tt class="py-lineno"> 757</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-94', 'resumable', 'link-49');">resumable</a></tt> <tt class="py-op">=</tt> <tt id="link-95" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-95', 'resumable', 'link-49');">resumable</a></tt> </tt>
+<a name="L758"></a><tt class="py-lineno"> 758</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_callbacks</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L759"></a><tt class="py-lineno"> 759</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L760"></a><tt class="py-lineno"> 760</tt>  <tt class="py-line"> </tt>
+<a name="L761"></a><tt class="py-lineno"> 761</tt>  <tt class="py-line">    <tt class="py-comment"># Pull the multipart boundary out of the content-type header.</tt> </tt>
+<a name="L762"></a><tt class="py-lineno"> 762</tt>  <tt class="py-line">    <tt class="py-name">major</tt><tt class="py-op">,</tt> <tt class="py-name">minor</tt><tt class="py-op">,</tt> <tt class="py-name">params</tt> <tt class="py-op">=</tt> <tt id="link-96" class="py-name"><a title="googleapiclient.mimeparse" class="py-name" href="#" onclick="return doclink('link-96', 'mimeparse', 'link-3');">mimeparse</a></tt><tt class="py-op">.</tt><tt id="link-97" class="py-name" targets="Function googleapiclient.mimeparse.parse_mime_type()=googleapiclient.mimeparse-module.html#parse_mime_type"><a title="googleapiclient.mimeparse.parse_mime_type" class="py-name" href="#" onclick="return doclink('link-97', 'parse_mime_type', 'link-97');">parse_mime_type</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L763"></a><tt class="py-lineno"> 763</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">.</tt><tt id="link-98" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.discovery_cache.base.Cache.get
+googleapiclient.discovery_cache.file_cache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-98', 'get', 'link-36');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'content-type'</tt><tt class="py-op">,</tt> <tt class="py-string">'application/json'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L764"></a><tt class="py-lineno"> 764</tt>  <tt class="py-line"> </tt>
+<a name="L765"></a><tt class="py-lineno"> 765</tt>  <tt class="py-line">    <tt class="py-comment"># The size of the non-media part of the request.</tt> </tt>
+<a name="L766"></a><tt class="py-lineno"> 766</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">body_size</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-99', 'body', 'link-69');">body</a></tt> <tt class="py-keyword">or</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L767"></a><tt class="py-lineno"> 767</tt>  <tt class="py-line"> </tt>
+<a name="L768"></a><tt class="py-lineno"> 768</tt>  <tt class="py-line">    <tt class="py-comment"># The resumable URI to send chunks to.</tt> </tt>
+<a name="L769"></a><tt class="py-lineno"> 769</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L770"></a><tt class="py-lineno"> 770</tt>  <tt class="py-line"> </tt>
+<a name="L771"></a><tt class="py-lineno"> 771</tt>  <tt class="py-line">    <tt class="py-comment"># The bytes that have been uploaded.</tt> </tt>
+<a name="L772"></a><tt class="py-lineno"> 772</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L773"></a><tt class="py-lineno"> 773</tt>  <tt class="py-line"> </tt>
+<a name="L774"></a><tt class="py-lineno"> 774</tt>  <tt class="py-line">    <tt class="py-comment"># Stubs for testing.</tt> </tt>
+<a name="L775"></a><tt class="py-lineno"> 775</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt> <tt class="py-op">=</tt> <tt class="py-name">random</tt><tt class="py-op">.</tt><tt class="py-name">random</tt> </tt>
+<a name="L776"></a><tt class="py-lineno"> 776</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt> <tt class="py-op">=</tt> <tt class="py-name">time</tt><tt class="py-op">.</tt><tt class="py-name">sleep</tt> </tt>
+</div><a name="L777"></a><tt class="py-lineno"> 777</tt>  <tt class="py-line"> </tt>
+<a name="L778"></a><tt class="py-lineno"> 778</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="HttpRequest.execute"></a><div id="HttpRequest.execute-def"><a name="L779"></a><tt class="py-lineno"> 779</tt> <a class="py-toggle" href="#" id="HttpRequest.execute-toggle" onclick="return toggle('HttpRequest.execute');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#execute">execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">num_retries</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequest.execute-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.execute-expanded"><a name="L780"></a><tt class="py-lineno"> 780</tt>  <tt class="py-line">    <tt class="py-docstring">"""Execute the request.</tt> </tt>
 <a name="L781"></a><tt class="py-lineno"> 781</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L782"></a><tt class="py-lineno"> 782</tt>  <tt class="py-line"><tt class="py-docstring">    Example:</tt> </tt>
-<a name="L783"></a><tt class="py-lineno"> 783</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L784"></a><tt class="py-lineno"> 784</tt>  <tt class="py-line"><tt class="py-docstring">      media = MediaFileUpload('cow.png', mimetype='image/png',</tt> </tt>
-<a name="L785"></a><tt class="py-lineno"> 785</tt>  <tt class="py-line"><tt class="py-docstring">                              chunksize=1000, resumable=True)</tt> </tt>
-<a name="L786"></a><tt class="py-lineno"> 786</tt>  <tt class="py-line"><tt class="py-docstring">      request = farm.animals().insert(</tt> </tt>
-<a name="L787"></a><tt class="py-lineno"> 787</tt>  <tt class="py-line"><tt class="py-docstring">          id='cow',</tt> </tt>
-<a name="L788"></a><tt class="py-lineno"> 788</tt>  <tt class="py-line"><tt class="py-docstring">          name='cow.png',</tt> </tt>
-<a name="L789"></a><tt class="py-lineno"> 789</tt>  <tt class="py-line"><tt class="py-docstring">          media_body=media)</tt> </tt>
-<a name="L790"></a><tt class="py-lineno"> 790</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L791"></a><tt class="py-lineno"> 791</tt>  <tt class="py-line"><tt class="py-docstring">      response = None</tt> </tt>
-<a name="L792"></a><tt class="py-lineno"> 792</tt>  <tt class="py-line"><tt class="py-docstring">      while response is None:</tt> </tt>
-<a name="L793"></a><tt class="py-lineno"> 793</tt>  <tt class="py-line"><tt class="py-docstring">        status, response = request.next_chunk()</tt> </tt>
-<a name="L794"></a><tt class="py-lineno"> 794</tt>  <tt class="py-line"><tt class="py-docstring">        if status:</tt> </tt>
-<a name="L795"></a><tt class="py-lineno"> 795</tt>  <tt class="py-line"><tt class="py-docstring">          print "Upload %d%% complete." % int(status.progress() * 100)</tt> </tt>
-<a name="L796"></a><tt class="py-lineno"> 796</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L797"></a><tt class="py-lineno"> 797</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L798"></a><tt class="py-lineno"> 798</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L799"></a><tt class="py-lineno"> 799</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used in place of the</tt> </tt>
-<a name="L800"></a><tt class="py-lineno"> 800</tt>  <tt class="py-line"><tt class="py-docstring">            one the HttpRequest request object was constructed with.</tt> </tt>
-<a name="L801"></a><tt class="py-lineno"> 801</tt>  <tt class="py-line"><tt class="py-docstring">      num_retries: Integer, number of times to retry 500's with randomized</tt> </tt>
-<a name="L802"></a><tt class="py-lineno"> 802</tt>  <tt class="py-line"><tt class="py-docstring">            exponential backoff. If all retries fail, the raised HttpError</tt> </tt>
-<a name="L803"></a><tt class="py-lineno"> 803</tt>  <tt class="py-line"><tt class="py-docstring">            represents the last request. If zero (default), we attempt the</tt> </tt>
-<a name="L804"></a><tt class="py-lineno"> 804</tt>  <tt class="py-line"><tt class="py-docstring">            request only once.</tt> </tt>
-<a name="L805"></a><tt class="py-lineno"> 805</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L806"></a><tt class="py-lineno"> 806</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L807"></a><tt class="py-lineno"> 807</tt>  <tt class="py-line"><tt class="py-docstring">      (status, body): (ResumableMediaStatus, object)</tt> </tt>
-<a name="L808"></a><tt class="py-lineno"> 808</tt>  <tt class="py-line"><tt class="py-docstring">         The body will be None until the resumable media is fully uploaded.</tt> </tt>
-<a name="L809"></a><tt class="py-lineno"> 809</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L810"></a><tt class="py-lineno"> 810</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L811"></a><tt class="py-lineno"> 811</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if the response was not a 2xx.</tt> </tt>
-<a name="L812"></a><tt class="py-lineno"> 812</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
-<a name="L813"></a><tt class="py-lineno"> 813</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L814"></a><tt class="py-lineno"> 814</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-108" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-108', 'http', 'link-25');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L815"></a><tt class="py-lineno"> 815</tt>  <tt class="py-line">      <tt id="link-109" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-109', 'http', 'link-25');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-110', 'http', 'link-25');">http</a></tt> </tt>
-<a name="L816"></a><tt class="py-lineno"> 816</tt>  <tt class="py-line"> </tt>
-<a name="L817"></a><tt class="py-lineno"> 817</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-111" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-111', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-112" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.size()=googleapiclient.http.MediaIoBaseUpload-class.html#size,Method googleapiclient.http.MediaUpload.size()=googleapiclient.http.MediaUpload-class.html#size"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-112', 'size', 'link-112');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L818"></a><tt class="py-lineno"> 818</tt>  <tt class="py-line">      <tt id="link-113" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-113', 'size', 'link-112');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'*'</tt> </tt>
-<a name="L819"></a><tt class="py-lineno"> 819</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L820"></a><tt class="py-lineno"> 820</tt>  <tt class="py-line">      <tt id="link-114" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-114', 'size', 'link-112');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-115" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-115', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-116', 'size', 'link-112');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L821"></a><tt class="py-lineno"> 821</tt>  <tt class="py-line"> </tt>
-<a name="L822"></a><tt class="py-lineno"> 822</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L823"></a><tt class="py-lineno"> 823</tt>  <tt class="py-line">      <tt class="py-name">start_headers</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L824"></a><tt class="py-lineno"> 824</tt>  <tt class="py-line">      <tt class="py-name">start_headers</tt><tt class="py-op">[</tt><tt class="py-string">'X-Upload-Content-Type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-117', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-118" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
-googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-118', 'mimetype', 'link-33');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L825"></a><tt class="py-lineno"> 825</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt id="link-119" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-119', 'size', 'link-112');">size</a></tt> <tt class="py-op">!=</tt> <tt class="py-string">'*'</tt><tt class="py-op">:</tt> </tt>
-<a name="L826"></a><tt class="py-lineno"> 826</tt>  <tt class="py-line">        <tt class="py-name">start_headers</tt><tt class="py-op">[</tt><tt class="py-string">'X-Upload-Content-Length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-120" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-120', 'size', 'link-112');">size</a></tt> </tt>
-<a name="L827"></a><tt class="py-lineno"> 827</tt>  <tt class="py-line">      <tt class="py-name">start_headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">body_size</tt><tt class="py-op">)</tt> </tt>
+<a name="L782"></a><tt class="py-lineno"> 782</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L783"></a><tt class="py-lineno"> 783</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used in place of the</tt> </tt>
+<a name="L784"></a><tt class="py-lineno"> 784</tt>  <tt class="py-line"><tt class="py-docstring">            one the HttpRequest request object was constructed with.</tt> </tt>
+<a name="L785"></a><tt class="py-lineno"> 785</tt>  <tt class="py-line"><tt class="py-docstring">      num_retries: Integer, number of times to retry 500's with randomized</tt> </tt>
+<a name="L786"></a><tt class="py-lineno"> 786</tt>  <tt class="py-line"><tt class="py-docstring">            exponential backoff. If all retries fail, the raised HttpError</tt> </tt>
+<a name="L787"></a><tt class="py-lineno"> 787</tt>  <tt class="py-line"><tt class="py-docstring">            represents the last request. If zero (default), we attempt the</tt> </tt>
+<a name="L788"></a><tt class="py-lineno"> 788</tt>  <tt class="py-line"><tt class="py-docstring">            request only once.</tt> </tt>
+<a name="L789"></a><tt class="py-lineno"> 789</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L790"></a><tt class="py-lineno"> 790</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L791"></a><tt class="py-lineno"> 791</tt>  <tt class="py-line"><tt class="py-docstring">      A deserialized object model of the response body as determined</tt> </tt>
+<a name="L792"></a><tt class="py-lineno"> 792</tt>  <tt class="py-line"><tt class="py-docstring">      by the postproc.</tt> </tt>
+<a name="L793"></a><tt class="py-lineno"> 793</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L794"></a><tt class="py-lineno"> 794</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L795"></a><tt class="py-lineno"> 795</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if the response was not a 2xx.</tt> </tt>
+<a name="L796"></a><tt class="py-lineno"> 796</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
+<a name="L797"></a><tt class="py-lineno"> 797</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L798"></a><tt class="py-lineno"> 798</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-100" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-100', 'http', 'link-33');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L799"></a><tt class="py-lineno"> 799</tt>  <tt class="py-line">      <tt id="link-101" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-101', 'http', 'link-33');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-102" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-102', 'http', 'link-33');">http</a></tt> </tt>
+<a name="L800"></a><tt class="py-lineno"> 800</tt>  <tt class="py-line"> </tt>
+<a name="L801"></a><tt class="py-lineno"> 801</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-103', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L802"></a><tt class="py-lineno"> 802</tt>  <tt class="py-line">      <tt id="link-104" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-104', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L803"></a><tt class="py-lineno"> 803</tt>  <tt class="py-line">      <tt class="py-keyword">while</tt> <tt id="link-105" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-105', 'body', 'link-69');">body</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L804"></a><tt class="py-lineno"> 804</tt>  <tt class="py-line">        <tt class="py-name">_</tt><tt class="py-op">,</tt> <tt id="link-106" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-106', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-107" class="py-name" targets="Method googleapiclient.http.HttpRequest.next_chunk()=googleapiclient.http.HttpRequest-class.html#next_chunk,Method googleapiclient.http.MediaIoBaseDownload.next_chunk()=googleapiclient.http.MediaIoBaseDownload-class.html#next_chunk"><a title="googleapiclient.http.HttpRequest.next_chunk
+googleapiclient.http.MediaIoBaseDownload.next_chunk" class="py-name" href="#" onclick="return doclink('link-107', 'next_chunk', 'link-107');">next_chunk</a></tt><tt class="py-op">(</tt><tt id="link-108" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-108', 'http', 'link-33');">http</a></tt><tt class="py-op">=</tt><tt id="link-109" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-109', 'http', 'link-33');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">num_retries</tt><tt class="py-op">=</tt><tt class="py-name">num_retries</tt><tt class="py-op">)</tt> </tt>
+<a name="L805"></a><tt class="py-lineno"> 805</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-110" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-110', 'body', 'link-69');">body</a></tt> </tt>
+<a name="L806"></a><tt class="py-lineno"> 806</tt>  <tt class="py-line"> </tt>
+<a name="L807"></a><tt class="py-lineno"> 807</tt>  <tt class="py-line">    <tt class="py-comment"># Non-resumable case.</tt> </tt>
+<a name="L808"></a><tt class="py-lineno"> 808</tt>  <tt class="py-line"> </tt>
+<a name="L809"></a><tt class="py-lineno"> 809</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'content-length'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
+<a name="L810"></a><tt class="py-lineno"> 810</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">body_size</tt><tt class="py-op">)</tt> </tt>
+<a name="L811"></a><tt class="py-lineno"> 811</tt>  <tt class="py-line">    <tt class="py-comment"># If the request URI is too long then turn it into a POST request.</tt> </tt>
+<a name="L812"></a><tt class="py-lineno"> 812</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt id="link-111" class="py-name"><a title="googleapiclient.http.MAX_URI_LENGTH" class="py-name" href="#" onclick="return doclink('link-111', 'MAX_URI_LENGTH', 'link-27');">MAX_URI_LENGTH</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">==</tt> <tt class="py-string">'GET'</tt><tt class="py-op">:</tt> </tt>
+<a name="L813"></a><tt class="py-lineno"> 813</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-string">'POST'</tt> </tt>
+<a name="L814"></a><tt class="py-lineno"> 814</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'x-http-method-override'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'GET'</tt> </tt>
+<a name="L815"></a><tt class="py-lineno"> 815</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'application/x-www-form-urlencoded'</tt> </tt>
+<a name="L816"></a><tt class="py-lineno"> 816</tt>  <tt class="py-line">      <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L817"></a><tt class="py-lineno"> 817</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">urlunparse</tt><tt class="py-op">(</tt> </tt>
+<a name="L818"></a><tt class="py-lineno"> 818</tt>  <tt class="py-line">          <tt class="py-op">(</tt><tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">scheme</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">netloc</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L819"></a><tt class="py-lineno"> 819</tt>  <tt class="py-line">           <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L820"></a><tt class="py-lineno"> 820</tt>  <tt class="py-line">          <tt class="py-op">)</tt> </tt>
+<a name="L821"></a><tt class="py-lineno"> 821</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-112" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-112', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">query</tt> </tt>
+<a name="L822"></a><tt class="py-lineno"> 822</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-113" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-113', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L823"></a><tt class="py-lineno"> 823</tt>  <tt class="py-line"> </tt>
+<a name="L824"></a><tt class="py-lineno"> 824</tt>  <tt class="py-line">    <tt class="py-comment"># Handle retries for server-side errors.</tt> </tt>
+<a name="L825"></a><tt class="py-lineno"> 825</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-114" class="py-name"><a title="googleapiclient.http._retry_request" class="py-name" href="#" onclick="return doclink('link-114', '_retry_request', 'link-83');">_retry_request</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L826"></a><tt class="py-lineno"> 826</tt>  <tt class="py-line">          <tt id="link-115" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-115', 'http', 'link-33');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">num_retries</tt><tt class="py-op">,</tt> <tt class="py-string">'request'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L827"></a><tt class="py-lineno"> 827</tt>  <tt class="py-line">          <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-116" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-116', 'body', 'link-69');">body</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-117" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-117', 'body', 'link-69');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
 <a name="L828"></a><tt class="py-lineno"> 828</tt>  <tt class="py-line"> </tt>
-<a name="L829"></a><tt class="py-lineno"> 829</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-121" class="py-name"><a title="googleapiclient.http._retry_request" class="py-name" href="#" onclick="return doclink('link-121', '_retry_request', 'link-72');">_retry_request</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L830"></a><tt class="py-lineno"> 830</tt>  <tt class="py-line">          <tt id="link-122" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-122', 'http', 'link-25');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">num_retries</tt><tt class="py-op">,</tt> <tt class="py-string">'resumable URI request'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt><tt class="py-op">,</tt> </tt>
-<a name="L831"></a><tt class="py-lineno"> 831</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt><tt class="py-op">,</tt> <tt id="link-123" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-123', 'body', 'link-58');">body</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-124', 'body', 'link-58');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">start_headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L832"></a><tt class="py-lineno"> 832</tt>  <tt class="py-line"> </tt>
-<a name="L833"></a><tt class="py-lineno"> 833</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'location'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
-<a name="L834"></a><tt class="py-lineno"> 834</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'location'</tt><tt class="py-op">]</tt> </tt>
-<a name="L835"></a><tt class="py-lineno"> 835</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L836"></a><tt class="py-lineno"> 836</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-125" class="py-name"><a title="googleapiclient.errors.ResumableUploadError" class="py-name" href="#" onclick="return doclink('link-125', 'ResumableUploadError', 'link-13');">ResumableUploadError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L837"></a><tt class="py-lineno"> 837</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt><tt class="py-op">:</tt> </tt>
-<a name="L838"></a><tt class="py-lineno"> 838</tt>  <tt class="py-line">      <tt class="py-comment"># If we are in an error state then query the server for current state of</tt> </tt>
-<a name="L839"></a><tt class="py-lineno"> 839</tt>  <tt class="py-line">      <tt class="py-comment"># the upload by sending an empty PUT and reading the 'range' header in</tt> </tt>
-<a name="L840"></a><tt class="py-lineno"> 840</tt>  <tt class="py-line">      <tt class="py-comment"># the response.</tt> </tt>
-<a name="L841"></a><tt class="py-lineno"> 841</tt>  <tt class="py-line">      <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L842"></a><tt class="py-lineno"> 842</tt>  <tt class="py-line">          <tt class="py-string">'Content-Range'</tt><tt class="py-op">:</tt> <tt class="py-string">'bytes */%s'</tt> <tt class="py-op">%</tt> <tt id="link-126" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-126', 'size', 'link-112');">size</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L843"></a><tt class="py-lineno"> 843</tt>  <tt class="py-line">          <tt class="py-string">'content-length'</tt><tt class="py-op">:</tt> <tt class="py-string">'0'</tt> </tt>
-<a name="L844"></a><tt class="py-lineno"> 844</tt>  <tt class="py-line">          <tt class="py-op">}</tt> </tt>
-<a name="L845"></a><tt class="py-lineno"> 845</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-127" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-127', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-128', 'request', 'link-26');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt><tt class="py-op">,</tt> <tt class="py-string">'PUT'</tt><tt class="py-op">,</tt> </tt>
-<a name="L846"></a><tt class="py-lineno"> 846</tt>  <tt class="py-line">                                   <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L847"></a><tt class="py-lineno"> 847</tt>  <tt class="py-line">      <tt class="py-name">status</tt><tt class="py-op">,</tt> <tt id="link-129" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-129', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-130" class="py-name" targets="Method googleapiclient.http.HttpRequest._process_response()=googleapiclient.http.HttpRequest-class.html#_process_response"><a title="googleapiclient.http.HttpRequest._process_response" class="py-name" href="#" onclick="return doclink('link-130', '_process_response', 'link-130');">_process_response</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L848"></a><tt class="py-lineno"> 848</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt id="link-131" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-131', 'body', 'link-58');">body</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L849"></a><tt class="py-lineno"> 849</tt>  <tt class="py-line">        <tt class="py-comment"># The upload was complete.</tt> </tt>
-<a name="L850"></a><tt class="py-lineno"> 850</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">status</tt><tt class="py-op">,</tt> <tt id="link-132" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-132', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L851"></a><tt class="py-lineno"> 851</tt>  <tt class="py-line"> </tt>
-<a name="L852"></a><tt class="py-lineno"> 852</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-133" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-133', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-134" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.has_stream()=googleapiclient.http.MediaIoBaseUpload-class.html#has_stream,Method googleapiclient.http.MediaUpload.has_stream()=googleapiclient.http.MediaUpload-class.html#has_stream"><a title="googleapiclient.http.MediaIoBaseUpload.has_stream
-googleapiclient.http.MediaUpload.has_stream" class="py-name" href="#" onclick="return doclink('link-134', 'has_stream', 'link-134');">has_stream</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L853"></a><tt class="py-lineno"> 853</tt>  <tt class="py-line">      <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-135', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-136" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.stream
-googleapiclient.http.MediaUpload.stream" class="py-name" href="#" onclick="return doclink('link-136', 'stream', 'link-76');">stream</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L854"></a><tt class="py-lineno"> 854</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-137', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-138" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-138', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
-<a name="L855"></a><tt class="py-lineno"> 855</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">)</tt> </tt>
-<a name="L856"></a><tt class="py-lineno"> 856</tt>  <tt class="py-line">        <tt class="py-name">chunk_end</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-139', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-140" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-140', 'size', 'link-112');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L857"></a><tt class="py-lineno"> 857</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L858"></a><tt class="py-lineno"> 858</tt>  <tt class="py-line">        <tt class="py-comment"># Doing chunking with a stream, so wrap a slice of the stream.</tt> </tt>
-<a name="L859"></a><tt class="py-lineno"> 859</tt>  <tt class="py-line">        <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt id="link-141" class="py-name" targets="Class googleapiclient.http._StreamSlice=googleapiclient.http._StreamSlice-class.html"><a title="googleapiclient.http._StreamSlice" class="py-name" href="#" onclick="return doclink('link-141', '_StreamSlice', 'link-141');">_StreamSlice</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">,</tt> </tt>
-<a name="L860"></a><tt class="py-lineno"> 860</tt>  <tt class="py-line">                            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-142', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-143', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L861"></a><tt class="py-lineno"> 861</tt>  <tt class="py-line">        <tt class="py-name">chunk_end</tt> <tt class="py-op">=</tt> <tt class="py-name">min</tt><tt class="py-op">(</tt> </tt>
-<a name="L862"></a><tt class="py-lineno"> 862</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-144', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-145" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-145', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> </tt>
-<a name="L863"></a><tt class="py-lineno"> 863</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-146', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-147" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-147', 'size', 'link-112');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L864"></a><tt class="py-lineno"> 864</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L865"></a><tt class="py-lineno"> 865</tt>  <tt class="py-line">      <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-148', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-149" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.getbytes()=googleapiclient.http.MediaIoBaseUpload-class.html#getbytes,Method googleapiclient.http.MediaUpload.getbytes()=googleapiclient.http.MediaUpload-class.html#getbytes"><a title="googleapiclient.http.MediaIoBaseUpload.getbytes
-googleapiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-149', 'getbytes', 'link-149');">getbytes</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L866"></a><tt class="py-lineno"> 866</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-150', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-151', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L867"></a><tt class="py-lineno"> 867</tt>  <tt class="py-line"> </tt>
-<a name="L868"></a><tt class="py-lineno"> 868</tt>  <tt class="py-line">      <tt class="py-comment"># A short read implies that we are at EOF, so finish the upload.</tt> </tt>
-<a name="L869"></a><tt class="py-lineno"> 869</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-152', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
-googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-153', 'chunksize', 'link-34');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L870"></a><tt class="py-lineno"> 870</tt>  <tt class="py-line">        <tt id="link-154" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-154', 'size', 'link-112');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">+</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L871"></a><tt class="py-lineno"> 871</tt>  <tt class="py-line"> </tt>
-<a name="L872"></a><tt class="py-lineno"> 872</tt>  <tt class="py-line">      <tt class="py-name">chunk_end</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">+</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L873"></a><tt class="py-lineno"> 873</tt>  <tt class="py-line"> </tt>
-<a name="L874"></a><tt class="py-lineno"> 874</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L875"></a><tt class="py-lineno"> 875</tt>  <tt class="py-line">        <tt class="py-string">'Content-Range'</tt><tt class="py-op">:</tt> <tt class="py-string">'bytes %d-%d/%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
-<a name="L876"></a><tt class="py-lineno"> 876</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-name">chunk_end</tt><tt class="py-op">,</tt> <tt id="link-155" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-155', 'size', 'link-112');">size</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L877"></a><tt class="py-lineno"> 877</tt>  <tt class="py-line">        <tt class="py-comment"># Must set the content-length header here because httplib can't</tt> </tt>
-<a name="L878"></a><tt class="py-lineno"> 878</tt>  <tt class="py-line">        <tt class="py-comment"># calculate the size when working with _StreamSlice.</tt> </tt>
-<a name="L879"></a><tt class="py-lineno"> 879</tt>  <tt class="py-line">        <tt class="py-string">'Content-Length'</tt><tt class="py-op">:</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">chunk_end</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L880"></a><tt class="py-lineno"> 880</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
-<a name="L881"></a><tt class="py-lineno"> 881</tt>  <tt class="py-line"> </tt>
-<a name="L882"></a><tt class="py-lineno"> 882</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">retry_num</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">num_retries</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L883"></a><tt class="py-lineno"> 883</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">retry_num</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L884"></a><tt class="py-lineno"> 884</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-number">2</tt><tt class="py-op">**</tt><tt class="py-name">retry_num</tt><tt class="py-op">)</tt> </tt>
-<a name="L885"></a><tt class="py-lineno"> 885</tt>  <tt class="py-line">        <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt> </tt>
-<a name="L886"></a><tt class="py-lineno"> 886</tt>  <tt class="py-line">            <tt class="py-string">'Retry #%d for media upload: %s %s, following status: %d'</tt> </tt>
-<a name="L887"></a><tt class="py-lineno"> 887</tt>  <tt class="py-line">            <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">retry_num</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L829"></a><tt class="py-lineno"> 829</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">callback</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_callbacks</tt><tt class="py-op">:</tt> </tt>
+<a name="L830"></a><tt class="py-lineno"> 830</tt>  <tt class="py-line">      <tt class="py-name">callback</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt> </tt>
+<a name="L831"></a><tt class="py-lineno"> 831</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">300</tt><tt class="py-op">:</tt> </tt>
+<a name="L832"></a><tt class="py-lineno"> 832</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-118" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-118', 'HttpError', 'link-9');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L833"></a><tt class="py-lineno"> 833</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L834"></a><tt class="py-lineno"> 834</tt>  <tt class="py-line"> </tt>
+<a name="L835"></a><tt class="py-lineno"> 835</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="HttpRequest.add_response_callback"></a><div id="HttpRequest.add_response_callback-def"><a name="L836"></a><tt class="py-lineno"> 836</tt> <a class="py-toggle" href="#" id="HttpRequest.add_response_callback-toggle" onclick="return toggle('HttpRequest.add_response_callback');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#add_response_callback">add_response_callback</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">cb</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequest.add_response_callback-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.add_response_callback-expanded"><a name="L837"></a><tt class="py-lineno"> 837</tt>  <tt class="py-line">    <tt class="py-docstring">"""add_response_headers_callback</tt> </tt>
+<a name="L838"></a><tt class="py-lineno"> 838</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L839"></a><tt class="py-lineno"> 839</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L840"></a><tt class="py-lineno"> 840</tt>  <tt class="py-line"><tt class="py-docstring">      cb: Callback to be called on receiving the response headers, of signature:</tt> </tt>
+<a name="L841"></a><tt class="py-lineno"> 841</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L842"></a><tt class="py-lineno"> 842</tt>  <tt class="py-line"><tt class="py-docstring">      def cb(resp):</tt> </tt>
+<a name="L843"></a><tt class="py-lineno"> 843</tt>  <tt class="py-line"><tt class="py-docstring">        # Where resp is an instance of httplib2.Response</tt> </tt>
+<a name="L844"></a><tt class="py-lineno"> 844</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L845"></a><tt class="py-lineno"> 845</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_callbacks</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">cb</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L846"></a><tt class="py-lineno"> 846</tt>  <tt class="py-line"> </tt>
+<a name="L847"></a><tt class="py-lineno"> 847</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="HttpRequest.next_chunk"></a><div id="HttpRequest.next_chunk-def"><a name="L848"></a><tt class="py-lineno"> 848</tt> <a class="py-toggle" href="#" id="HttpRequest.next_chunk-toggle" onclick="return toggle('HttpRequest.next_chunk');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#next_chunk">next_chunk</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">num_retries</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequest.next_chunk-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.next_chunk-expanded"><a name="L849"></a><tt class="py-lineno"> 849</tt>  <tt class="py-line">    <tt class="py-docstring">"""Execute the next step of a resumable upload.</tt> </tt>
+<a name="L850"></a><tt class="py-lineno"> 850</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L851"></a><tt class="py-lineno"> 851</tt>  <tt class="py-line"><tt class="py-docstring">    Can only be used if the method being executed supports media uploads and</tt> </tt>
+<a name="L852"></a><tt class="py-lineno"> 852</tt>  <tt class="py-line"><tt class="py-docstring">    the MediaUpload object passed in was flagged as using resumable upload.</tt> </tt>
+<a name="L853"></a><tt class="py-lineno"> 853</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L854"></a><tt class="py-lineno"> 854</tt>  <tt class="py-line"><tt class="py-docstring">    Example:</tt> </tt>
+<a name="L855"></a><tt class="py-lineno"> 855</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L856"></a><tt class="py-lineno"> 856</tt>  <tt class="py-line"><tt class="py-docstring">      media = MediaFileUpload('cow.png', mimetype='image/png',</tt> </tt>
+<a name="L857"></a><tt class="py-lineno"> 857</tt>  <tt class="py-line"><tt class="py-docstring">                              chunksize=1000, resumable=True)</tt> </tt>
+<a name="L858"></a><tt class="py-lineno"> 858</tt>  <tt class="py-line"><tt class="py-docstring">      request = farm.animals().insert(</tt> </tt>
+<a name="L859"></a><tt class="py-lineno"> 859</tt>  <tt class="py-line"><tt class="py-docstring">          id='cow',</tt> </tt>
+<a name="L860"></a><tt class="py-lineno"> 860</tt>  <tt class="py-line"><tt class="py-docstring">          name='cow.png',</tt> </tt>
+<a name="L861"></a><tt class="py-lineno"> 861</tt>  <tt class="py-line"><tt class="py-docstring">          media_body=media)</tt> </tt>
+<a name="L862"></a><tt class="py-lineno"> 862</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L863"></a><tt class="py-lineno"> 863</tt>  <tt class="py-line"><tt class="py-docstring">      response = None</tt> </tt>
+<a name="L864"></a><tt class="py-lineno"> 864</tt>  <tt class="py-line"><tt class="py-docstring">      while response is None:</tt> </tt>
+<a name="L865"></a><tt class="py-lineno"> 865</tt>  <tt class="py-line"><tt class="py-docstring">        status, response = request.next_chunk()</tt> </tt>
+<a name="L866"></a><tt class="py-lineno"> 866</tt>  <tt class="py-line"><tt class="py-docstring">        if status:</tt> </tt>
+<a name="L867"></a><tt class="py-lineno"> 867</tt>  <tt class="py-line"><tt class="py-docstring">          print "Upload %d%% complete." % int(status.progress() * 100)</tt> </tt>
+<a name="L868"></a><tt class="py-lineno"> 868</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L869"></a><tt class="py-lineno"> 869</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L870"></a><tt class="py-lineno"> 870</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L871"></a><tt class="py-lineno"> 871</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used in place of the</tt> </tt>
+<a name="L872"></a><tt class="py-lineno"> 872</tt>  <tt class="py-line"><tt class="py-docstring">            one the HttpRequest request object was constructed with.</tt> </tt>
+<a name="L873"></a><tt class="py-lineno"> 873</tt>  <tt class="py-line"><tt class="py-docstring">      num_retries: Integer, number of times to retry 500's with randomized</tt> </tt>
+<a name="L874"></a><tt class="py-lineno"> 874</tt>  <tt class="py-line"><tt class="py-docstring">            exponential backoff. If all retries fail, the raised HttpError</tt> </tt>
+<a name="L875"></a><tt class="py-lineno"> 875</tt>  <tt class="py-line"><tt class="py-docstring">            represents the last request. If zero (default), we attempt the</tt> </tt>
+<a name="L876"></a><tt class="py-lineno"> 876</tt>  <tt class="py-line"><tt class="py-docstring">            request only once.</tt> </tt>
+<a name="L877"></a><tt class="py-lineno"> 877</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L878"></a><tt class="py-lineno"> 878</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L879"></a><tt class="py-lineno"> 879</tt>  <tt class="py-line"><tt class="py-docstring">      (status, body): (ResumableMediaStatus, object)</tt> </tt>
+<a name="L880"></a><tt class="py-lineno"> 880</tt>  <tt class="py-line"><tt class="py-docstring">         The body will be None until the resumable media is fully uploaded.</tt> </tt>
+<a name="L881"></a><tt class="py-lineno"> 881</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L882"></a><tt class="py-lineno"> 882</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L883"></a><tt class="py-lineno"> 883</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if the response was not a 2xx.</tt> </tt>
+<a name="L884"></a><tt class="py-lineno"> 884</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
+<a name="L885"></a><tt class="py-lineno"> 885</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L886"></a><tt class="py-lineno"> 886</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-119" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-119', 'http', 'link-33');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L887"></a><tt class="py-lineno"> 887</tt>  <tt class="py-line">      <tt id="link-120" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-120', 'http', 'link-33');">http</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-121" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-121', 'http', 'link-33');">http</a></tt> </tt>
 <a name="L888"></a><tt class="py-lineno"> 888</tt>  <tt class="py-line"> </tt>
-<a name="L889"></a><tt class="py-lineno"> 889</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L890"></a><tt class="py-lineno"> 890</tt>  <tt class="py-line">        <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-156" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-156', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="googleapiclient.http.HttpMock.request
+<a name="L889"></a><tt class="py-lineno"> 889</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-122', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-123" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.size()=googleapiclient.http.MediaIoBaseUpload-class.html#size,Method googleapiclient.http.MediaUpload.size()=googleapiclient.http.MediaUpload-class.html#size"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-123', 'size', 'link-123');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L890"></a><tt class="py-lineno"> 890</tt>  <tt class="py-line">      <tt id="link-124" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-124', 'size', 'link-123');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'*'</tt> </tt>
+<a name="L891"></a><tt class="py-lineno"> 891</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L892"></a><tt class="py-lineno"> 892</tt>  <tt class="py-line">      <tt id="link-125" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-125', 'size', 'link-123');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-126" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-126', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-127" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-127', 'size', 'link-123');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L893"></a><tt class="py-lineno"> 893</tt>  <tt class="py-line"> </tt>
+<a name="L894"></a><tt class="py-lineno"> 894</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L895"></a><tt class="py-lineno"> 895</tt>  <tt class="py-line">      <tt class="py-name">start_headers</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L896"></a><tt class="py-lineno"> 896</tt>  <tt class="py-line">      <tt class="py-name">start_headers</tt><tt class="py-op">[</tt><tt class="py-string">'X-Upload-Content-Type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-128" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-128', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-129" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.mimetype
+googleapiclient.http.MediaUpload.mimetype" class="py-name" href="#" onclick="return doclink('link-129', 'mimetype', 'link-44');">mimetype</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L897"></a><tt class="py-lineno"> 897</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt id="link-130" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-130', 'size', 'link-123');">size</a></tt> <tt class="py-op">!=</tt> <tt class="py-string">'*'</tt><tt class="py-op">:</tt> </tt>
+<a name="L898"></a><tt class="py-lineno"> 898</tt>  <tt class="py-line">        <tt class="py-name">start_headers</tt><tt class="py-op">[</tt><tt class="py-string">'X-Upload-Content-Length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-131" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-131', 'size', 'link-123');">size</a></tt> </tt>
+<a name="L899"></a><tt class="py-lineno"> 899</tt>  <tt class="py-line">      <tt class="py-name">start_headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">body_size</tt><tt class="py-op">)</tt> </tt>
+<a name="L900"></a><tt class="py-lineno"> 900</tt>  <tt class="py-line"> </tt>
+<a name="L901"></a><tt class="py-lineno"> 901</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-132" class="py-name"><a title="googleapiclient.http._retry_request" class="py-name" href="#" onclick="return doclink('link-132', '_retry_request', 'link-83');">_retry_request</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L902"></a><tt class="py-lineno"> 902</tt>  <tt class="py-line">          <tt id="link-133" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-133', 'http', 'link-33');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">num_retries</tt><tt class="py-op">,</tt> <tt class="py-string">'resumable URI request'</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt><tt class="py-op">,</tt> </tt>
+<a name="L903"></a><tt class="py-lineno"> 903</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt><tt class="py-op">,</tt> <tt id="link-134" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-134', 'body', 'link-69');">body</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-135', 'body', 'link-69');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">start_headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L904"></a><tt class="py-lineno"> 904</tt>  <tt class="py-line"> </tt>
+<a name="L905"></a><tt class="py-lineno"> 905</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">200</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'location'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
+<a name="L906"></a><tt class="py-lineno"> 906</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'location'</tt><tt class="py-op">]</tt> </tt>
+<a name="L907"></a><tt class="py-lineno"> 907</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L908"></a><tt class="py-lineno"> 908</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> <tt id="link-136" class="py-name"><a title="googleapiclient.errors.ResumableUploadError" class="py-name" href="#" onclick="return doclink('link-136', 'ResumableUploadError', 'link-15');">ResumableUploadError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L909"></a><tt class="py-lineno"> 909</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt><tt class="py-op">:</tt> </tt>
+<a name="L910"></a><tt class="py-lineno"> 910</tt>  <tt class="py-line">      <tt class="py-comment"># If we are in an error state then query the server for current state of</tt> </tt>
+<a name="L911"></a><tt class="py-lineno"> 911</tt>  <tt class="py-line">      <tt class="py-comment"># the upload by sending an empty PUT and reading the 'range' header in</tt> </tt>
+<a name="L912"></a><tt class="py-lineno"> 912</tt>  <tt class="py-line">      <tt class="py-comment"># the response.</tt> </tt>
+<a name="L913"></a><tt class="py-lineno"> 913</tt>  <tt class="py-line">      <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L914"></a><tt class="py-lineno"> 914</tt>  <tt class="py-line">          <tt class="py-string">'Content-Range'</tt><tt class="py-op">:</tt> <tt class="py-string">'bytes */%s'</tt> <tt class="py-op">%</tt> <tt id="link-137" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-137', 'size', 'link-123');">size</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L915"></a><tt class="py-lineno"> 915</tt>  <tt class="py-line">          <tt class="py-string">'content-length'</tt><tt class="py-op">:</tt> <tt class="py-string">'0'</tt> </tt>
+<a name="L916"></a><tt class="py-lineno"> 916</tt>  <tt class="py-line">          <tt class="py-op">}</tt> </tt>
+<a name="L917"></a><tt class="py-lineno"> 917</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-138" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-138', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-157', 'request', 'link-26');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-string">'PUT'</tt><tt class="py-op">,</tt> </tt>
-<a name="L891"></a><tt class="py-lineno"> 891</tt>  <tt class="py-line">                                     <tt id="link-158" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-158', 'body', 'link-58');">body</a></tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> </tt>
-<a name="L892"></a><tt class="py-lineno"> 892</tt>  <tt class="py-line">                                     <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L893"></a><tt class="py-lineno"> 893</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L894"></a><tt class="py-lineno"> 894</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L895"></a><tt class="py-lineno"> 895</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> </tt>
-<a name="L896"></a><tt class="py-lineno"> 896</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">500</tt><tt class="py-op">:</tt> </tt>
-<a name="L897"></a><tt class="py-lineno"> 897</tt>  <tt class="py-line">        <tt class="py-keyword">break</tt> </tt>
-<a name="L898"></a><tt class="py-lineno"> 898</tt>  <tt class="py-line"> </tt>
-<a name="L899"></a><tt class="py-lineno"> 899</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-159" class="py-name"><a title="googleapiclient.http.HttpRequest._process_response" class="py-name" href="#" onclick="return doclink('link-159', '_process_response', 'link-130');">_process_response</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L900"></a><tt class="py-lineno"> 900</tt>  <tt class="py-line"> </tt>
-<a name="HttpRequest._process_response"></a><div id="HttpRequest._process_response-def"><a name="L901"></a><tt class="py-lineno"> 901</tt> <a class="py-toggle" href="#" id="HttpRequest._process_response-toggle" onclick="return toggle('HttpRequest._process_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#_process_response">_process_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequest._process_response-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest._process_response-expanded"><a name="L902"></a><tt class="py-lineno"> 902</tt>  <tt class="py-line">    <tt class="py-docstring">"""Process the response from a single chunk upload.</tt> </tt>
-<a name="L903"></a><tt class="py-lineno"> 903</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L904"></a><tt class="py-lineno"> 904</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L905"></a><tt class="py-lineno"> 905</tt>  <tt class="py-line"><tt class="py-docstring">      resp: httplib2.Response, the response object.</tt> </tt>
-<a name="L906"></a><tt class="py-lineno"> 906</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the content of the response.</tt> </tt>
-<a name="L907"></a><tt class="py-lineno"> 907</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L908"></a><tt class="py-lineno"> 908</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L909"></a><tt class="py-lineno"> 909</tt>  <tt class="py-line"><tt class="py-docstring">      (status, body): (ResumableMediaStatus, object)</tt> </tt>
-<a name="L910"></a><tt class="py-lineno"> 910</tt>  <tt class="py-line"><tt class="py-docstring">         The body will be None until the resumable media is fully uploaded.</tt> </tt>
-<a name="L911"></a><tt class="py-lineno"> 911</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L912"></a><tt class="py-lineno"> 912</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L913"></a><tt class="py-lineno"> 913</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if the response was not a 2xx or a 308.</tt> </tt>
-<a name="L914"></a><tt class="py-lineno"> 914</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L915"></a><tt class="py-lineno"> 915</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-number">200</tt><tt class="py-op">,</tt> <tt class="py-number">201</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L916"></a><tt class="py-lineno"> 916</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L917"></a><tt class="py-lineno"> 917</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L918"></a><tt class="py-lineno"> 918</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">308</tt><tt class="py-op">:</tt> </tt>
-<a name="L919"></a><tt class="py-lineno"> 919</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L920"></a><tt class="py-lineno"> 920</tt>  <tt class="py-line">      <tt class="py-comment"># A "308 Resume Incomplete" indicates we are not done.</tt> </tt>
-<a name="L921"></a><tt class="py-lineno"> 921</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'range'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
-<a name="L922"></a><tt class="py-lineno"> 922</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'location'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
-<a name="L923"></a><tt class="py-lineno"> 923</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'location'</tt><tt class="py-op">]</tt> </tt>
-<a name="L924"></a><tt class="py-lineno"> 924</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L925"></a><tt class="py-lineno"> 925</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L926"></a><tt class="py-lineno"> 926</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-160" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-160', 'HttpError', 'link-7');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L927"></a><tt class="py-lineno"> 927</tt>  <tt class="py-line"> </tt>
-<a name="L928"></a><tt class="py-lineno"> 928</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt id="link-161" class="py-name" targets="Class googleapiclient.http.MediaUploadProgress=googleapiclient.http.MediaUploadProgress-class.html"><a title="googleapiclient.http.MediaUploadProgress" class="py-name" href="#" onclick="return doclink('link-161', 'MediaUploadProgress', 'link-161');">MediaUploadProgress</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-162', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
-googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-163', 'size', 'link-112');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L929"></a><tt class="py-lineno"> 929</tt>  <tt class="py-line">            <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L930"></a><tt class="py-lineno"> 930</tt>  <tt class="py-line"> </tt>
-<a name="HttpRequest.to_json"></a><div id="HttpRequest.to_json-def"><a name="L931"></a><tt class="py-lineno"> 931</tt> <a class="py-toggle" href="#" id="HttpRequest.to_json-toggle" onclick="return toggle('HttpRequest.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#to_json">to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequest.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.to_json-expanded"><a name="L932"></a><tt class="py-lineno"> 932</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns a JSON representation of the HttpRequest."""</tt> </tt>
-<a name="L933"></a><tt class="py-lineno"> 933</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
-<a name="L934"></a><tt class="py-lineno"> 934</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L935"></a><tt class="py-lineno"> 935</tt>  <tt class="py-line">      <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-164" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-164', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-165" class="py-name" targets="Method googleapiclient.http.HttpRequest.to_json()=googleapiclient.http.HttpRequest-class.html#to_json,Method googleapiclient.http.MediaFileUpload.to_json()=googleapiclient.http.MediaFileUpload-class.html#to_json,Method googleapiclient.http.MediaIoBaseUpload.to_json()=googleapiclient.http.MediaIoBaseUpload-class.html#to_json,Method googleapiclient.http.MediaUpload.to_json()=googleapiclient.http.MediaUpload-class.html#to_json"><a title="googleapiclient.http.HttpRequest.to_json
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-139', 'request', 'link-34');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt><tt class="py-op">,</tt> <tt class="py-string">'PUT'</tt><tt class="py-op">,</tt> </tt>
+<a name="L918"></a><tt class="py-lineno"> 918</tt>  <tt class="py-line">                                   <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L919"></a><tt class="py-lineno"> 919</tt>  <tt class="py-line">      <tt class="py-name">status</tt><tt class="py-op">,</tt> <tt id="link-140" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-140', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name" targets="Method googleapiclient.http.HttpRequest._process_response()=googleapiclient.http.HttpRequest-class.html#_process_response"><a title="googleapiclient.http.HttpRequest._process_response" class="py-name" href="#" onclick="return doclink('link-141', '_process_response', 'link-141');">_process_response</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L920"></a><tt class="py-lineno"> 920</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt id="link-142" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-142', 'body', 'link-69');">body</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L921"></a><tt class="py-lineno"> 921</tt>  <tt class="py-line">        <tt class="py-comment"># The upload was complete.</tt> </tt>
+<a name="L922"></a><tt class="py-lineno"> 922</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">status</tt><tt class="py-op">,</tt> <tt id="link-143" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-143', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L923"></a><tt class="py-lineno"> 923</tt>  <tt class="py-line"> </tt>
+<a name="L924"></a><tt class="py-lineno"> 924</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-144', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-145" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.has_stream()=googleapiclient.http.MediaIoBaseUpload-class.html#has_stream,Method googleapiclient.http.MediaUpload.has_stream()=googleapiclient.http.MediaUpload-class.html#has_stream"><a title="googleapiclient.http.MediaIoBaseUpload.has_stream
+googleapiclient.http.MediaUpload.has_stream" class="py-name" href="#" onclick="return doclink('link-145', 'has_stream', 'link-145');">has_stream</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L925"></a><tt class="py-lineno"> 925</tt>  <tt class="py-line">      <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-146', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-147" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.stream
+googleapiclient.http.MediaUpload.stream" class="py-name" href="#" onclick="return doclink('link-147', 'stream', 'link-87');">stream</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L926"></a><tt class="py-lineno"> 926</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-148', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-149', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
+<a name="L927"></a><tt class="py-lineno"> 927</tt>  <tt class="py-line">        <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">)</tt> </tt>
+<a name="L928"></a><tt class="py-lineno"> 928</tt>  <tt class="py-line">        <tt class="py-name">chunk_end</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-150', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-151', 'size', 'link-123');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
+<a name="L929"></a><tt class="py-lineno"> 929</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L930"></a><tt class="py-lineno"> 930</tt>  <tt class="py-line">        <tt class="py-comment"># Doing chunking with a stream, so wrap a slice of the stream.</tt> </tt>
+<a name="L931"></a><tt class="py-lineno"> 931</tt>  <tt class="py-line">        <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt id="link-152" class="py-name" targets="Class googleapiclient.http._StreamSlice=googleapiclient.http._StreamSlice-class.html"><a title="googleapiclient.http._StreamSlice" class="py-name" href="#" onclick="return doclink('link-152', '_StreamSlice', 'link-152');">_StreamSlice</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">,</tt> </tt>
+<a name="L932"></a><tt class="py-lineno"> 932</tt>  <tt class="py-line">                            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-153', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-154" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-154', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L933"></a><tt class="py-lineno"> 933</tt>  <tt class="py-line">        <tt class="py-name">chunk_end</tt> <tt class="py-op">=</tt> <tt class="py-name">min</tt><tt class="py-op">(</tt> </tt>
+<a name="L934"></a><tt class="py-lineno"> 934</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">+</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-155', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-156', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">,</tt> </tt>
+<a name="L935"></a><tt class="py-lineno"> 935</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-157', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-158" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-158', 'size', 'link-123');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L936"></a><tt class="py-lineno"> 936</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L937"></a><tt class="py-lineno"> 937</tt>  <tt class="py-line">      <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-159" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-159', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-160" class="py-name" targets="Method googleapiclient.http.MediaIoBaseUpload.getbytes()=googleapiclient.http.MediaIoBaseUpload-class.html#getbytes,Method googleapiclient.http.MediaUpload.getbytes()=googleapiclient.http.MediaUpload-class.html#getbytes"><a title="googleapiclient.http.MediaIoBaseUpload.getbytes
+googleapiclient.http.MediaUpload.getbytes" class="py-name" href="#" onclick="return doclink('link-160', 'getbytes', 'link-160');">getbytes</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L938"></a><tt class="py-lineno"> 938</tt>  <tt class="py-line">          <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-161', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-162" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-162', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L939"></a><tt class="py-lineno"> 939</tt>  <tt class="py-line"> </tt>
+<a name="L940"></a><tt class="py-lineno"> 940</tt>  <tt class="py-line">      <tt class="py-comment"># A short read implies that we are at EOF, so finish the upload.</tt> </tt>
+<a name="L941"></a><tt class="py-lineno"> 941</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-163', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-164" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.chunksize
+googleapiclient.http.MediaUpload.chunksize" class="py-name" href="#" onclick="return doclink('link-164', 'chunksize', 'link-45');">chunksize</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L942"></a><tt class="py-lineno"> 942</tt>  <tt class="py-line">        <tt id="link-165" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-165', 'size', 'link-123');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">+</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L943"></a><tt class="py-lineno"> 943</tt>  <tt class="py-line"> </tt>
+<a name="L944"></a><tt class="py-lineno"> 944</tt>  <tt class="py-line">      <tt class="py-name">chunk_end</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">+</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
+<a name="L945"></a><tt class="py-lineno"> 945</tt>  <tt class="py-line"> </tt>
+<a name="L946"></a><tt class="py-lineno"> 946</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
+<a name="L947"></a><tt class="py-lineno"> 947</tt>  <tt class="py-line">        <tt class="py-string">'Content-Range'</tt><tt class="py-op">:</tt> <tt class="py-string">'bytes %d-%d/%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt> </tt>
+<a name="L948"></a><tt class="py-lineno"> 948</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-name">chunk_end</tt><tt class="py-op">,</tt> <tt id="link-166" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-166', 'size', 'link-123');">size</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L949"></a><tt class="py-lineno"> 949</tt>  <tt class="py-line">        <tt class="py-comment"># Must set the content-length header here because httplib can't</tt> </tt>
+<a name="L950"></a><tt class="py-lineno"> 950</tt>  <tt class="py-line">        <tt class="py-comment"># calculate the size when working with _StreamSlice.</tt> </tt>
+<a name="L951"></a><tt class="py-lineno"> 951</tt>  <tt class="py-line">        <tt class="py-string">'Content-Length'</tt><tt class="py-op">:</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">chunk_end</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L952"></a><tt class="py-lineno"> 952</tt>  <tt class="py-line">        <tt class="py-op">}</tt> </tt>
+<a name="L953"></a><tt class="py-lineno"> 953</tt>  <tt class="py-line"> </tt>
+<a name="L954"></a><tt class="py-lineno"> 954</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">retry_num</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">num_retries</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L955"></a><tt class="py-lineno"> 955</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">retry_num</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L956"></a><tt class="py-lineno"> 956</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_sleep</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_rand</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-number">2</tt><tt class="py-op">**</tt><tt class="py-name">retry_num</tt><tt class="py-op">)</tt> </tt>
+<a name="L957"></a><tt class="py-lineno"> 957</tt>  <tt class="py-line">        <tt id="link-167" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-167', 'LOGGER', 'link-25');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt> </tt>
+<a name="L958"></a><tt class="py-lineno"> 958</tt>  <tt class="py-line">            <tt class="py-string">'Retry #%d for media upload: %s %s, following status: %d'</tt> </tt>
+<a name="L959"></a><tt class="py-lineno"> 959</tt>  <tt class="py-line">            <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">retry_num</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L960"></a><tt class="py-lineno"> 960</tt>  <tt class="py-line"> </tt>
+<a name="L961"></a><tt class="py-lineno"> 961</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L962"></a><tt class="py-lineno"> 962</tt>  <tt class="py-line">        <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-168" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-168', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-169" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-169', 'request', 'link-34');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-string">'PUT'</tt><tt class="py-op">,</tt> </tt>
+<a name="L963"></a><tt class="py-lineno"> 963</tt>  <tt class="py-line">                                     <tt id="link-170" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-170', 'body', 'link-69');">body</a></tt><tt class="py-op">=</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> </tt>
+<a name="L964"></a><tt class="py-lineno"> 964</tt>  <tt class="py-line">                                     <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L965"></a><tt class="py-lineno"> 965</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
+<a name="L966"></a><tt class="py-lineno"> 966</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L967"></a><tt class="py-lineno"> 967</tt>  <tt class="py-line">        <tt class="py-keyword">raise</tt> </tt>
+<a name="L968"></a><tt class="py-lineno"> 968</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">500</tt><tt class="py-op">:</tt> </tt>
+<a name="L969"></a><tt class="py-lineno"> 969</tt>  <tt class="py-line">        <tt class="py-keyword">break</tt> </tt>
+<a name="L970"></a><tt class="py-lineno"> 970</tt>  <tt class="py-line"> </tt>
+<a name="L971"></a><tt class="py-lineno"> 971</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="googleapiclient.http.HttpRequest._process_response" class="py-name" href="#" onclick="return doclink('link-171', '_process_response', 'link-141');">_process_response</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L972"></a><tt class="py-lineno"> 972</tt>  <tt class="py-line"> </tt>
+<a name="HttpRequest._process_response"></a><div id="HttpRequest._process_response-def"><a name="L973"></a><tt class="py-lineno"> 973</tt> <a class="py-toggle" href="#" id="HttpRequest._process_response-toggle" onclick="return toggle('HttpRequest._process_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#_process_response">_process_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequest._process_response-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest._process_response-expanded"><a name="L974"></a><tt class="py-lineno"> 974</tt>  <tt class="py-line">    <tt class="py-docstring">"""Process the response from a single chunk upload.</tt> </tt>
+<a name="L975"></a><tt class="py-lineno"> 975</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L976"></a><tt class="py-lineno"> 976</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L977"></a><tt class="py-lineno"> 977</tt>  <tt class="py-line"><tt class="py-docstring">      resp: httplib2.Response, the response object.</tt> </tt>
+<a name="L978"></a><tt class="py-lineno"> 978</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the content of the response.</tt> </tt>
+<a name="L979"></a><tt class="py-lineno"> 979</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L980"></a><tt class="py-lineno"> 980</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L981"></a><tt class="py-lineno"> 981</tt>  <tt class="py-line"><tt class="py-docstring">      (status, body): (ResumableMediaStatus, object)</tt> </tt>
+<a name="L982"></a><tt class="py-lineno"> 982</tt>  <tt class="py-line"><tt class="py-docstring">         The body will be None until the resumable media is fully uploaded.</tt> </tt>
+<a name="L983"></a><tt class="py-lineno"> 983</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L984"></a><tt class="py-lineno"> 984</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L985"></a><tt class="py-lineno"> 985</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if the response was not a 2xx or a 308.</tt> </tt>
+<a name="L986"></a><tt class="py-lineno"> 986</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L987"></a><tt class="py-lineno"> 987</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-keyword">in</tt> <tt class="py-op">[</tt><tt class="py-number">200</tt><tt class="py-op">,</tt> <tt class="py-number">201</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
+<a name="L988"></a><tt class="py-lineno"> 988</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L989"></a><tt class="py-lineno"> 989</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L990"></a><tt class="py-lineno"> 990</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">308</tt><tt class="py-op">:</tt> </tt>
+<a name="L991"></a><tt class="py-lineno"> 991</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="L992"></a><tt class="py-lineno"> 992</tt>  <tt class="py-line">      <tt class="py-comment"># A "308 Resume Incomplete" indicates we are not done.</tt> </tt>
+<a name="L993"></a><tt class="py-lineno"> 993</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'range'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
+<a name="L994"></a><tt class="py-lineno"> 994</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'location'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
+<a name="L995"></a><tt class="py-lineno"> 995</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'location'</tt><tt class="py-op">]</tt> </tt>
+<a name="L996"></a><tt class="py-lineno"> 996</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L997"></a><tt class="py-lineno"> 997</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_in_error_state</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+<a name="L998"></a><tt class="py-lineno"> 998</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-172" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-172', 'HttpError', 'link-9');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L999"></a><tt class="py-lineno"> 999</tt>  <tt class="py-line"> </tt>
+<a name="L1000"></a><tt class="py-lineno">1000</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt id="link-173" class="py-name" targets="Class googleapiclient.http.MediaUploadProgress=googleapiclient.http.MediaUploadProgress-class.html"><a title="googleapiclient.http.MediaUploadProgress" class="py-name" href="#" onclick="return doclink('link-173', 'MediaUploadProgress', 'link-173');">MediaUploadProgress</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resumable_progress</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-174', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-175" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.size
+googleapiclient.http.MediaUpload.size" class="py-name" href="#" onclick="return doclink('link-175', 'size', 'link-123');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L1001"></a><tt class="py-lineno">1001</tt>  <tt class="py-line">            <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1002"></a><tt class="py-lineno">1002</tt>  <tt class="py-line"> </tt>
+<a name="HttpRequest.to_json"></a><div id="HttpRequest.to_json-def"><a name="L1003"></a><tt class="py-lineno">1003</tt> <a class="py-toggle" href="#" id="HttpRequest.to_json-toggle" onclick="return toggle('HttpRequest.to_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#to_json">to_json</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequest.to_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.to_json-expanded"><a name="L1004"></a><tt class="py-lineno">1004</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns a JSON representation of the HttpRequest."""</tt> </tt>
+<a name="L1005"></a><tt class="py-lineno">1005</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">copy</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">)</tt> </tt>
+<a name="L1006"></a><tt class="py-lineno">1006</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1007"></a><tt class="py-lineno">1007</tt>  <tt class="py-line">      <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-176" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-176', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">.</tt><tt id="link-177" class="py-name" targets="Method googleapiclient.http.HttpRequest.to_json()=googleapiclient.http.HttpRequest-class.html#to_json,Method googleapiclient.http.MediaFileUpload.to_json()=googleapiclient.http.MediaFileUpload-class.html#to_json,Method googleapiclient.http.MediaIoBaseUpload.to_json()=googleapiclient.http.MediaIoBaseUpload-class.html#to_json,Method googleapiclient.http.MediaUpload.to_json()=googleapiclient.http.MediaUpload-class.html#to_json"><a title="googleapiclient.http.HttpRequest.to_json
 googleapiclient.http.MediaFileUpload.to_json
 googleapiclient.http.MediaIoBaseUpload.to_json
-googleapiclient.http.MediaUpload.to_json" class="py-name" href="#" onclick="return doclink('link-165', 'to_json', 'link-165');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L936"></a><tt class="py-lineno"> 936</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'http'</tt><tt class="py-op">]</tt> </tt>
-<a name="L937"></a><tt class="py-lineno"> 937</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'postproc'</tt><tt class="py-op">]</tt> </tt>
-<a name="L938"></a><tt class="py-lineno"> 938</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_sleep'</tt><tt class="py-op">]</tt> </tt>
-<a name="L939"></a><tt class="py-lineno"> 939</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_rand'</tt><tt class="py-op">]</tt> </tt>
-<a name="L940"></a><tt class="py-lineno"> 940</tt>  <tt class="py-line"> </tt>
-<a name="L941"></a><tt class="py-lineno"> 941</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L942"></a><tt class="py-lineno"> 942</tt>  <tt class="py-line"> </tt>
-<a name="L943"></a><tt class="py-lineno"> 943</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
-<a name="HttpRequest.from_json"></a><div id="HttpRequest.from_json-def"><a name="L944"></a><tt class="py-lineno"> 944</tt> <a class="py-toggle" href="#" id="HttpRequest.from_json-toggle" onclick="return toggle('HttpRequest.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">postproc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequest.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.from_json-expanded"><a name="L945"></a><tt class="py-lineno"> 945</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns an HttpRequest populated with info from a JSON object."""</tt> </tt>
-<a name="L946"></a><tt class="py-lineno"> 946</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
-<a name="L947"></a><tt class="py-lineno"> 947</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L948"></a><tt class="py-lineno"> 948</tt>  <tt class="py-line">      <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-166" class="py-name" targets="Class googleapiclient.http.MediaUpload=googleapiclient.http.MediaUpload-class.html"><a title="googleapiclient.http.MediaUpload" class="py-name" href="#" onclick="return doclink('link-166', 'MediaUpload', 'link-166');">MediaUpload</a></tt><tt class="py-op">.</tt><tt id="link-167" class="py-name" targets="Class Method googleapiclient.http.MediaUpload.new_from_json()=googleapiclient.http.MediaUpload-class.html#new_from_json"><a title="googleapiclient.http.MediaUpload.new_from_json" class="py-name" href="#" onclick="return doclink('link-167', 'new_from_json', 'link-167');">new_from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L949"></a><tt class="py-lineno"> 949</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-168" class="py-name" targets="Class googleapiclient.http.HttpRequest=googleapiclient.http.HttpRequest-class.html"><a title="googleapiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-168', 'HttpRequest', 'link-168');">HttpRequest</a></tt><tt class="py-op">(</tt> </tt>
-<a name="L950"></a><tt class="py-lineno"> 950</tt>  <tt class="py-line">        <tt id="link-169" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-169', 'http', 'link-25');">http</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L951"></a><tt class="py-lineno"> 951</tt>  <tt class="py-line">        <tt class="py-name">postproc</tt><tt class="py-op">,</tt> </tt>
-<a name="L952"></a><tt class="py-lineno"> 952</tt>  <tt class="py-line">        <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'uri'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L953"></a><tt class="py-lineno"> 953</tt>  <tt class="py-line">        <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'method'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L954"></a><tt class="py-lineno"> 954</tt>  <tt class="py-line">        <tt id="link-170" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-170', 'body', 'link-58');">body</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L955"></a><tt class="py-lineno"> 955</tt>  <tt class="py-line">        <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'headers'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L956"></a><tt class="py-lineno"> 956</tt>  <tt class="py-line">        <tt class="py-name">methodId</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'methodId'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L957"></a><tt class="py-lineno"> 957</tt>  <tt class="py-line">        <tt id="link-171" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-171', 'resumable', 'link-38');">resumable</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L958"></a><tt class="py-lineno"> 958</tt>  <tt class="py-line"> </tt>
-<a name="BatchHttpRequest"></a><div id="BatchHttpRequest-def"><a name="L959"></a><tt class="py-lineno"> 959</tt>  <tt class="py-line"> </tt>
-<a name="L960"></a><tt class="py-lineno"> 960</tt> <a class="py-toggle" href="#" id="BatchHttpRequest-toggle" onclick="return toggle('BatchHttpRequest');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="BatchHttpRequest-expanded"><a name="L961"></a><tt class="py-lineno"> 961</tt>  <tt class="py-line">  <tt class="py-docstring">"""Batches multiple HttpRequest objects into a single HTTP request.</tt> </tt>
-<a name="L962"></a><tt class="py-lineno"> 962</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L963"></a><tt class="py-lineno"> 963</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
-<a name="L964"></a><tt class="py-lineno"> 964</tt>  <tt class="py-line"><tt class="py-docstring">    from googleapiclient.http import BatchHttpRequest</tt> </tt>
-<a name="L965"></a><tt class="py-lineno"> 965</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L966"></a><tt class="py-lineno"> 966</tt>  <tt class="py-line"><tt class="py-docstring">    def list_animals(request_id, response, exception):</tt> </tt>
-<a name="L967"></a><tt class="py-lineno"> 967</tt>  <tt class="py-line"><tt class="py-docstring">      \"\"\"Do something with the animals list response.\"\"\"</tt> </tt>
-<a name="L968"></a><tt class="py-lineno"> 968</tt>  <tt class="py-line"><tt class="py-docstring">      if exception is not None:</tt> </tt>
-<a name="L969"></a><tt class="py-lineno"> 969</tt>  <tt class="py-line"><tt class="py-docstring">        # Do something with the exception.</tt> </tt>
-<a name="L970"></a><tt class="py-lineno"> 970</tt>  <tt class="py-line"><tt class="py-docstring">        pass</tt> </tt>
-<a name="L971"></a><tt class="py-lineno"> 971</tt>  <tt class="py-line"><tt class="py-docstring">      else:</tt> </tt>
-<a name="L972"></a><tt class="py-lineno"> 972</tt>  <tt class="py-line"><tt class="py-docstring">        # Do something with the response.</tt> </tt>
-<a name="L973"></a><tt class="py-lineno"> 973</tt>  <tt class="py-line"><tt class="py-docstring">        pass</tt> </tt>
-<a name="L974"></a><tt class="py-lineno"> 974</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L975"></a><tt class="py-lineno"> 975</tt>  <tt class="py-line"><tt class="py-docstring">    def list_farmers(request_id, response, exception):</tt> </tt>
-<a name="L976"></a><tt class="py-lineno"> 976</tt>  <tt class="py-line"><tt class="py-docstring">      \"\"\"Do something with the farmers list response.\"\"\"</tt> </tt>
-<a name="L977"></a><tt class="py-lineno"> 977</tt>  <tt class="py-line"><tt class="py-docstring">      if exception is not None:</tt> </tt>
-<a name="L978"></a><tt class="py-lineno"> 978</tt>  <tt class="py-line"><tt class="py-docstring">        # Do something with the exception.</tt> </tt>
-<a name="L979"></a><tt class="py-lineno"> 979</tt>  <tt class="py-line"><tt class="py-docstring">        pass</tt> </tt>
-<a name="L980"></a><tt class="py-lineno"> 980</tt>  <tt class="py-line"><tt class="py-docstring">      else:</tt> </tt>
-<a name="L981"></a><tt class="py-lineno"> 981</tt>  <tt class="py-line"><tt class="py-docstring">        # Do something with the response.</tt> </tt>
-<a name="L982"></a><tt class="py-lineno"> 982</tt>  <tt class="py-line"><tt class="py-docstring">        pass</tt> </tt>
-<a name="L983"></a><tt class="py-lineno"> 983</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L984"></a><tt class="py-lineno"> 984</tt>  <tt class="py-line"><tt class="py-docstring">    service = build('farm', 'v2')</tt> </tt>
-<a name="L985"></a><tt class="py-lineno"> 985</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L986"></a><tt class="py-lineno"> 986</tt>  <tt class="py-line"><tt class="py-docstring">    batch = BatchHttpRequest()</tt> </tt>
-<a name="L987"></a><tt class="py-lineno"> 987</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L988"></a><tt class="py-lineno"> 988</tt>  <tt class="py-line"><tt class="py-docstring">    batch.add(service.animals().list(), list_animals)</tt> </tt>
-<a name="L989"></a><tt class="py-lineno"> 989</tt>  <tt class="py-line"><tt class="py-docstring">    batch.add(service.farmers().list(), list_farmers)</tt> </tt>
-<a name="L990"></a><tt class="py-lineno"> 990</tt>  <tt class="py-line"><tt class="py-docstring">    batch.execute(http=http)</tt> </tt>
-<a name="L991"></a><tt class="py-lineno"> 991</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L992"></a><tt class="py-lineno"> 992</tt>  <tt class="py-line"> </tt>
-<a name="L993"></a><tt class="py-lineno"> 993</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="BatchHttpRequest.__init__"></a><div id="BatchHttpRequest.__init__-def"><a name="L994"></a><tt class="py-lineno"> 994</tt> <a class="py-toggle" href="#" id="BatchHttpRequest.__init__-toggle" onclick="return toggle('BatchHttpRequest.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">callback</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">batch_uri</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest.__init__-expanded"><a name="L995"></a><tt class="py-lineno"> 995</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for a BatchHttpRequest.</tt> </tt>
-<a name="L996"></a><tt class="py-lineno"> 996</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L997"></a><tt class="py-lineno"> 997</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L998"></a><tt class="py-lineno"> 998</tt>  <tt class="py-line"><tt class="py-docstring">      callback: callable, A callback to be called for each response, of the</tt> </tt>
-<a name="L999"></a><tt class="py-lineno"> 999</tt>  <tt class="py-line"><tt class="py-docstring">        form callback(id, response, exception). The first parameter is the</tt> </tt>
-<a name="L1000"></a><tt class="py-lineno">1000</tt>  <tt class="py-line"><tt class="py-docstring">        request id, and the second is the deserialized response object. The</tt> </tt>
-<a name="L1001"></a><tt class="py-lineno">1001</tt>  <tt class="py-line"><tt class="py-docstring">        third is an googleapiclient.errors.HttpError exception object if an HTTP error</tt> </tt>
-<a name="L1002"></a><tt class="py-lineno">1002</tt>  <tt class="py-line"><tt class="py-docstring">        occurred while processing the request, or None if no error occurred.</tt> </tt>
-<a name="L1003"></a><tt class="py-lineno">1003</tt>  <tt class="py-line"><tt class="py-docstring">      batch_uri: string, URI to send batch requests to.</tt> </tt>
-<a name="L1004"></a><tt class="py-lineno">1004</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1005"></a><tt class="py-lineno">1005</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">batch_uri</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1006"></a><tt class="py-lineno">1006</tt>  <tt class="py-line">      <tt class="py-name">batch_uri</tt> <tt class="py-op">=</tt> <tt class="py-string">'https://www.googleapis.com/batch'</tt> </tt>
-<a name="L1007"></a><tt class="py-lineno">1007</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_batch_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">batch_uri</tt> </tt>
-<a name="L1008"></a><tt class="py-lineno">1008</tt>  <tt class="py-line"> </tt>
-<a name="L1009"></a><tt class="py-lineno">1009</tt>  <tt class="py-line">    <tt class="py-comment"># Global callback to be called for each individual response in the batch.</tt> </tt>
-<a name="L1010"></a><tt class="py-lineno">1010</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback</tt> <tt class="py-op">=</tt> <tt class="py-name">callback</tt> </tt>
-<a name="L1011"></a><tt class="py-lineno">1011</tt>  <tt class="py-line"> </tt>
-<a name="L1012"></a><tt class="py-lineno">1012</tt>  <tt class="py-line">    <tt class="py-comment"># A map from id to request.</tt> </tt>
-<a name="L1013"></a><tt class="py-lineno">1013</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L1014"></a><tt class="py-lineno">1014</tt>  <tt class="py-line"> </tt>
-<a name="L1015"></a><tt class="py-lineno">1015</tt>  <tt class="py-line">    <tt class="py-comment"># A map from id to callback.</tt> </tt>
-<a name="L1016"></a><tt class="py-lineno">1016</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callbacks</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L1017"></a><tt class="py-lineno">1017</tt>  <tt class="py-line"> </tt>
-<a name="L1018"></a><tt class="py-lineno">1018</tt>  <tt class="py-line">    <tt class="py-comment"># List of request ids, in the order in which they were added.</tt> </tt>
-<a name="L1019"></a><tt class="py-lineno">1019</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L1020"></a><tt class="py-lineno">1020</tt>  <tt class="py-line"> </tt>
-<a name="L1021"></a><tt class="py-lineno">1021</tt>  <tt class="py-line">    <tt class="py-comment"># The last auto generated id.</tt> </tt>
-<a name="L1022"></a><tt class="py-lineno">1022</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L1023"></a><tt class="py-lineno">1023</tt>  <tt class="py-line"> </tt>
-<a name="L1024"></a><tt class="py-lineno">1024</tt>  <tt class="py-line">    <tt class="py-comment"># Unique ID on which to base the Content-ID headers.</tt> </tt>
-<a name="L1025"></a><tt class="py-lineno">1025</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_base_id</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1026"></a><tt class="py-lineno">1026</tt>  <tt class="py-line"> </tt>
-<a name="L1027"></a><tt class="py-lineno">1027</tt>  <tt class="py-line">    <tt class="py-comment"># A map from request id to (httplib2.Response, content) response pairs</tt> </tt>
-<a name="L1028"></a><tt class="py-lineno">1028</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_responses</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L1029"></a><tt class="py-lineno">1029</tt>  <tt class="py-line"> </tt>
-<a name="L1030"></a><tt class="py-lineno">1030</tt>  <tt class="py-line">    <tt class="py-comment"># A map of id(Credentials) that have been refreshed.</tt> </tt>
-<a name="L1031"></a><tt class="py-lineno">1031</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_refreshed_credentials</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-</div><a name="L1032"></a><tt class="py-lineno">1032</tt>  <tt class="py-line"> </tt>
-<a name="BatchHttpRequest._refresh_and_apply_credentials"></a><div id="BatchHttpRequest._refresh_and_apply_credentials-def"><a name="L1033"></a><tt class="py-lineno">1033</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._refresh_and_apply_credentials-toggle" onclick="return toggle('BatchHttpRequest._refresh_and_apply_credentials');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_refresh_and_apply_credentials">_refresh_and_apply_credentials</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest._refresh_and_apply_credentials-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._refresh_and_apply_credentials-expanded"><a name="L1034"></a><tt class="py-lineno">1034</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refresh the credentials and apply to the request.</tt> </tt>
-<a name="L1035"></a><tt class="py-lineno">1035</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1036"></a><tt class="py-lineno">1036</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1037"></a><tt class="py-lineno">1037</tt>  <tt class="py-line"><tt class="py-docstring">      request: HttpRequest, the request.</tt> </tt>
-<a name="L1038"></a><tt class="py-lineno">1038</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, the global http object for the batch.</tt> </tt>
-<a name="L1039"></a><tt class="py-lineno">1039</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1040"></a><tt class="py-lineno">1040</tt>  <tt class="py-line">    <tt class="py-comment"># For the credentials to refresh, but only once per refresh_token</tt> </tt>
-<a name="L1041"></a><tt class="py-lineno">1041</tt>  <tt class="py-line">    <tt class="py-comment"># If there is no http per the request then refresh the http passed in</tt> </tt>
-<a name="L1042"></a><tt class="py-lineno">1042</tt>  <tt class="py-line">    <tt class="py-comment"># via execute()</tt> </tt>
-<a name="L1043"></a><tt class="py-lineno">1043</tt>  <tt class="py-line">    <tt class="py-name">creds</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1044"></a><tt class="py-lineno">1044</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-172" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.MediaUpload.to_json" class="py-name" href="#" onclick="return doclink('link-177', 'to_json', 'link-177');">to_json</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1008"></a><tt class="py-lineno">1008</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'http'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1009"></a><tt class="py-lineno">1009</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'postproc'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1010"></a><tt class="py-lineno">1010</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_sleep'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1011"></a><tt class="py-lineno">1011</tt>  <tt class="py-line">    <tt class="py-keyword">del</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'_rand'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1012"></a><tt class="py-lineno">1012</tt>  <tt class="py-line"> </tt>
+<a name="L1013"></a><tt class="py-lineno">1013</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1014"></a><tt class="py-lineno">1014</tt>  <tt class="py-line"> </tt>
+<a name="L1015"></a><tt class="py-lineno">1015</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
+<a name="HttpRequest.from_json"></a><div id="HttpRequest.from_json-def"><a name="L1016"></a><tt class="py-lineno">1016</tt> <a class="py-toggle" href="#" id="HttpRequest.from_json-toggle" onclick="return toggle('HttpRequest.from_json');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequest-class.html#from_json">from_json</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">postproc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequest.from_json-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequest.from_json-expanded"><a name="L1017"></a><tt class="py-lineno">1017</tt>  <tt class="py-line">    <tt class="py-docstring">"""Returns an HttpRequest populated with info from a JSON object."""</tt> </tt>
+<a name="L1018"></a><tt class="py-lineno">1018</tt>  <tt class="py-line">    <tt class="py-name">d</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">s</tt><tt class="py-op">)</tt> </tt>
+<a name="L1019"></a><tt class="py-lineno">1019</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1020"></a><tt class="py-lineno">1020</tt>  <tt class="py-line">      <tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-178" class="py-name" targets="Class googleapiclient.http.MediaUpload=googleapiclient.http.MediaUpload-class.html"><a title="googleapiclient.http.MediaUpload" class="py-name" href="#" onclick="return doclink('link-178', 'MediaUpload', 'link-178');">MediaUpload</a></tt><tt class="py-op">.</tt><tt id="link-179" class="py-name" targets="Class Method googleapiclient.http.MediaUpload.new_from_json()=googleapiclient.http.MediaUpload-class.html#new_from_json"><a title="googleapiclient.http.MediaUpload.new_from_json" class="py-name" href="#" onclick="return doclink('link-179', 'new_from_json', 'link-179');">new_from_json</a></tt><tt class="py-op">(</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1021"></a><tt class="py-lineno">1021</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-180" class="py-name" targets="Class googleapiclient.http.HttpRequest=googleapiclient.http.HttpRequest-class.html"><a title="googleapiclient.http.HttpRequest" class="py-name" href="#" onclick="return doclink('link-180', 'HttpRequest', 'link-180');">HttpRequest</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L1022"></a><tt class="py-lineno">1022</tt>  <tt class="py-line">        <tt id="link-181" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-181', 'http', 'link-33');">http</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1023"></a><tt class="py-lineno">1023</tt>  <tt class="py-line">        <tt class="py-name">postproc</tt><tt class="py-op">,</tt> </tt>
+<a name="L1024"></a><tt class="py-lineno">1024</tt>  <tt class="py-line">        <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'uri'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L1025"></a><tt class="py-lineno">1025</tt>  <tt class="py-line">        <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'method'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L1026"></a><tt class="py-lineno">1026</tt>  <tt class="py-line">        <tt id="link-182" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-182', 'body', 'link-69');">body</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'body'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L1027"></a><tt class="py-lineno">1027</tt>  <tt class="py-line">        <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'headers'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L1028"></a><tt class="py-lineno">1028</tt>  <tt class="py-line">        <tt class="py-name">methodId</tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'methodId'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L1029"></a><tt class="py-lineno">1029</tt>  <tt class="py-line">        <tt id="link-183" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-183', 'resumable', 'link-49');">resumable</a></tt><tt class="py-op">=</tt><tt class="py-name">d</tt><tt class="py-op">[</tt><tt class="py-string">'resumable'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1030"></a><tt class="py-lineno">1030</tt>  <tt class="py-line"> </tt>
+<a name="BatchHttpRequest"></a><div id="BatchHttpRequest-def"><a name="L1031"></a><tt class="py-lineno">1031</tt>  <tt class="py-line"> </tt>
+<a name="L1032"></a><tt class="py-lineno">1032</tt> <a class="py-toggle" href="#" id="BatchHttpRequest-toggle" onclick="return toggle('BatchHttpRequest');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="BatchHttpRequest-expanded"><a name="L1033"></a><tt class="py-lineno">1033</tt>  <tt class="py-line">  <tt class="py-docstring">"""Batches multiple HttpRequest objects into a single HTTP request.</tt> </tt>
+<a name="L1034"></a><tt class="py-lineno">1034</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1035"></a><tt class="py-lineno">1035</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
+<a name="L1036"></a><tt class="py-lineno">1036</tt>  <tt class="py-line"><tt class="py-docstring">    from googleapiclient.http import BatchHttpRequest</tt> </tt>
+<a name="L1037"></a><tt class="py-lineno">1037</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1038"></a><tt class="py-lineno">1038</tt>  <tt class="py-line"><tt class="py-docstring">    def list_animals(request_id, response, exception):</tt> </tt>
+<a name="L1039"></a><tt class="py-lineno">1039</tt>  <tt class="py-line"><tt class="py-docstring">      \"\"\"Do something with the animals list response.\"\"\"</tt> </tt>
+<a name="L1040"></a><tt class="py-lineno">1040</tt>  <tt class="py-line"><tt class="py-docstring">      if exception is not None:</tt> </tt>
+<a name="L1041"></a><tt class="py-lineno">1041</tt>  <tt class="py-line"><tt class="py-docstring">        # Do something with the exception.</tt> </tt>
+<a name="L1042"></a><tt class="py-lineno">1042</tt>  <tt class="py-line"><tt class="py-docstring">        pass</tt> </tt>
+<a name="L1043"></a><tt class="py-lineno">1043</tt>  <tt class="py-line"><tt class="py-docstring">      else:</tt> </tt>
+<a name="L1044"></a><tt class="py-lineno">1044</tt>  <tt class="py-line"><tt class="py-docstring">        # Do something with the response.</tt> </tt>
+<a name="L1045"></a><tt class="py-lineno">1045</tt>  <tt class="py-line"><tt class="py-docstring">        pass</tt> </tt>
+<a name="L1046"></a><tt class="py-lineno">1046</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1047"></a><tt class="py-lineno">1047</tt>  <tt class="py-line"><tt class="py-docstring">    def list_farmers(request_id, response, exception):</tt> </tt>
+<a name="L1048"></a><tt class="py-lineno">1048</tt>  <tt class="py-line"><tt class="py-docstring">      \"\"\"Do something with the farmers list response.\"\"\"</tt> </tt>
+<a name="L1049"></a><tt class="py-lineno">1049</tt>  <tt class="py-line"><tt class="py-docstring">      if exception is not None:</tt> </tt>
+<a name="L1050"></a><tt class="py-lineno">1050</tt>  <tt class="py-line"><tt class="py-docstring">        # Do something with the exception.</tt> </tt>
+<a name="L1051"></a><tt class="py-lineno">1051</tt>  <tt class="py-line"><tt class="py-docstring">        pass</tt> </tt>
+<a name="L1052"></a><tt class="py-lineno">1052</tt>  <tt class="py-line"><tt class="py-docstring">      else:</tt> </tt>
+<a name="L1053"></a><tt class="py-lineno">1053</tt>  <tt class="py-line"><tt class="py-docstring">        # Do something with the response.</tt> </tt>
+<a name="L1054"></a><tt class="py-lineno">1054</tt>  <tt class="py-line"><tt class="py-docstring">        pass</tt> </tt>
+<a name="L1055"></a><tt class="py-lineno">1055</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1056"></a><tt class="py-lineno">1056</tt>  <tt class="py-line"><tt class="py-docstring">    service = build('farm', 'v2')</tt> </tt>
+<a name="L1057"></a><tt class="py-lineno">1057</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1058"></a><tt class="py-lineno">1058</tt>  <tt class="py-line"><tt class="py-docstring">    batch = BatchHttpRequest()</tt> </tt>
+<a name="L1059"></a><tt class="py-lineno">1059</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1060"></a><tt class="py-lineno">1060</tt>  <tt class="py-line"><tt class="py-docstring">    batch.add(service.animals().list(), list_animals)</tt> </tt>
+<a name="L1061"></a><tt class="py-lineno">1061</tt>  <tt class="py-line"><tt class="py-docstring">    batch.add(service.farmers().list(), list_farmers)</tt> </tt>
+<a name="L1062"></a><tt class="py-lineno">1062</tt>  <tt class="py-line"><tt class="py-docstring">    batch.execute(http=http)</tt> </tt>
+<a name="L1063"></a><tt class="py-lineno">1063</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1064"></a><tt class="py-lineno">1064</tt>  <tt class="py-line"> </tt>
+<a name="L1065"></a><tt class="py-lineno">1065</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="BatchHttpRequest.__init__"></a><div id="BatchHttpRequest.__init__-def"><a name="L1066"></a><tt class="py-lineno">1066</tt> <a class="py-toggle" href="#" id="BatchHttpRequest.__init__-toggle" onclick="return toggle('BatchHttpRequest.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">callback</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">batch_uri</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest.__init__-expanded"><a name="L1067"></a><tt class="py-lineno">1067</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for a BatchHttpRequest.</tt> </tt>
+<a name="L1068"></a><tt class="py-lineno">1068</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1069"></a><tt class="py-lineno">1069</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1070"></a><tt class="py-lineno">1070</tt>  <tt class="py-line"><tt class="py-docstring">      callback: callable, A callback to be called for each response, of the</tt> </tt>
+<a name="L1071"></a><tt class="py-lineno">1071</tt>  <tt class="py-line"><tt class="py-docstring">        form callback(id, response, exception). The first parameter is the</tt> </tt>
+<a name="L1072"></a><tt class="py-lineno">1072</tt>  <tt class="py-line"><tt class="py-docstring">        request id, and the second is the deserialized response object. The</tt> </tt>
+<a name="L1073"></a><tt class="py-lineno">1073</tt>  <tt class="py-line"><tt class="py-docstring">        third is an googleapiclient.errors.HttpError exception object if an HTTP error</tt> </tt>
+<a name="L1074"></a><tt class="py-lineno">1074</tt>  <tt class="py-line"><tt class="py-docstring">        occurred while processing the request, or None if no error occurred.</tt> </tt>
+<a name="L1075"></a><tt class="py-lineno">1075</tt>  <tt class="py-line"><tt class="py-docstring">      batch_uri: string, URI to send batch requests to.</tt> </tt>
+<a name="L1076"></a><tt class="py-lineno">1076</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1077"></a><tt class="py-lineno">1077</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">batch_uri</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1078"></a><tt class="py-lineno">1078</tt>  <tt class="py-line">      <tt class="py-name">batch_uri</tt> <tt class="py-op">=</tt> <tt class="py-string">'https://www.googleapis.com/batch'</tt> </tt>
+<a name="L1079"></a><tt class="py-lineno">1079</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_batch_uri</tt> <tt class="py-op">=</tt> <tt class="py-name">batch_uri</tt> </tt>
+<a name="L1080"></a><tt class="py-lineno">1080</tt>  <tt class="py-line"> </tt>
+<a name="L1081"></a><tt class="py-lineno">1081</tt>  <tt class="py-line">    <tt class="py-comment"># Global callback to be called for each individual response in the batch.</tt> </tt>
+<a name="L1082"></a><tt class="py-lineno">1082</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback</tt> <tt class="py-op">=</tt> <tt class="py-name">callback</tt> </tt>
+<a name="L1083"></a><tt class="py-lineno">1083</tt>  <tt class="py-line"> </tt>
+<a name="L1084"></a><tt class="py-lineno">1084</tt>  <tt class="py-line">    <tt class="py-comment"># A map from id to request.</tt> </tt>
+<a name="L1085"></a><tt class="py-lineno">1085</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1086"></a><tt class="py-lineno">1086</tt>  <tt class="py-line"> </tt>
+<a name="L1087"></a><tt class="py-lineno">1087</tt>  <tt class="py-line">    <tt class="py-comment"># A map from id to callback.</tt> </tt>
+<a name="L1088"></a><tt class="py-lineno">1088</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callbacks</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1089"></a><tt class="py-lineno">1089</tt>  <tt class="py-line"> </tt>
+<a name="L1090"></a><tt class="py-lineno">1090</tt>  <tt class="py-line">    <tt class="py-comment"># List of request ids, in the order in which they were added.</tt> </tt>
+<a name="L1091"></a><tt class="py-lineno">1091</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1092"></a><tt class="py-lineno">1092</tt>  <tt class="py-line"> </tt>
+<a name="L1093"></a><tt class="py-lineno">1093</tt>  <tt class="py-line">    <tt class="py-comment"># The last auto generated id.</tt> </tt>
+<a name="L1094"></a><tt class="py-lineno">1094</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
+<a name="L1095"></a><tt class="py-lineno">1095</tt>  <tt class="py-line"> </tt>
+<a name="L1096"></a><tt class="py-lineno">1096</tt>  <tt class="py-line">    <tt class="py-comment"># Unique ID on which to base the Content-ID headers.</tt> </tt>
+<a name="L1097"></a><tt class="py-lineno">1097</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_base_id</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1098"></a><tt class="py-lineno">1098</tt>  <tt class="py-line"> </tt>
+<a name="L1099"></a><tt class="py-lineno">1099</tt>  <tt class="py-line">    <tt class="py-comment"># A map from request id to (httplib2.Response, content) response pairs</tt> </tt>
+<a name="L1100"></a><tt class="py-lineno">1100</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_responses</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1101"></a><tt class="py-lineno">1101</tt>  <tt class="py-line"> </tt>
+<a name="L1102"></a><tt class="py-lineno">1102</tt>  <tt class="py-line">    <tt class="py-comment"># A map of id(Credentials) that have been refreshed.</tt> </tt>
+<a name="L1103"></a><tt class="py-lineno">1103</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_refreshed_credentials</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+</div><a name="L1104"></a><tt class="py-lineno">1104</tt>  <tt class="py-line"> </tt>
+<a name="BatchHttpRequest._refresh_and_apply_credentials"></a><div id="BatchHttpRequest._refresh_and_apply_credentials-def"><a name="L1105"></a><tt class="py-lineno">1105</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._refresh_and_apply_credentials-toggle" onclick="return toggle('BatchHttpRequest._refresh_and_apply_credentials');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_refresh_and_apply_credentials">_refresh_and_apply_credentials</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest._refresh_and_apply_credentials-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._refresh_and_apply_credentials-expanded"><a name="L1106"></a><tt class="py-lineno">1106</tt>  <tt class="py-line">    <tt class="py-docstring">"""Refresh the credentials and apply to the request.</tt> </tt>
+<a name="L1107"></a><tt class="py-lineno">1107</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1108"></a><tt class="py-lineno">1108</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1109"></a><tt class="py-lineno">1109</tt>  <tt class="py-line"><tt class="py-docstring">      request: HttpRequest, the request.</tt> </tt>
+<a name="L1110"></a><tt class="py-lineno">1110</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, the global http object for the batch.</tt> </tt>
+<a name="L1111"></a><tt class="py-lineno">1111</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1112"></a><tt class="py-lineno">1112</tt>  <tt class="py-line">    <tt class="py-comment"># For the credentials to refresh, but only once per refresh_token</tt> </tt>
+<a name="L1113"></a><tt class="py-lineno">1113</tt>  <tt class="py-line">    <tt class="py-comment"># If there is no http per the request then refresh the http passed in</tt> </tt>
+<a name="L1114"></a><tt class="py-lineno">1114</tt>  <tt class="py-line">    <tt class="py-comment"># via execute()</tt> </tt>
+<a name="L1115"></a><tt class="py-lineno">1115</tt>  <tt class="py-line">    <tt class="py-name">creds</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1116"></a><tt class="py-lineno">1116</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-184" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-172', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-173" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-173', 'http', 'link-25');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-174" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-184', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-185" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-185', 'http', 'link-33');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-186" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-174', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-175" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-175', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-176" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-186', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-187', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-188" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-176', 'request', 'link-26');">request</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L1045"></a><tt class="py-lineno">1045</tt>  <tt class="py-line">        <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1046"></a><tt class="py-lineno">1046</tt>  <tt class="py-line">      <tt class="py-name">creds</tt> <tt class="py-op">=</tt> <tt id="link-177" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-188', 'request', 'link-34');">request</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1117"></a><tt class="py-lineno">1117</tt>  <tt class="py-line">        <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1118"></a><tt class="py-lineno">1118</tt>  <tt class="py-line">      <tt class="py-name">creds</tt> <tt class="py-op">=</tt> <tt id="link-189" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-177', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-178', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-179" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-189', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-190" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-190', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-191" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-179', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">credentials</tt> </tt>
-<a name="L1047"></a><tt class="py-lineno">1047</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt id="link-180" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-180', 'http', 'link-25');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-181" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-181', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-182" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-191', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">credentials</tt> </tt>
+<a name="L1119"></a><tt class="py-lineno">1119</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt id="link-192" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-192', 'http', 'link-33');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-193" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-193', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-194" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-182', 'request', 'link-26');">request</a></tt><tt class="py-op">,</tt> <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1048"></a><tt class="py-lineno">1048</tt>  <tt class="py-line">      <tt class="py-name">creds</tt> <tt class="py-op">=</tt> <tt id="link-183" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-183', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-184" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-194', 'request', 'link-34');">request</a></tt><tt class="py-op">,</tt> <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1120"></a><tt class="py-lineno">1120</tt>  <tt class="py-line">      <tt class="py-name">creds</tt> <tt class="py-op">=</tt> <tt id="link-195" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-195', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-196" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-184', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">credentials</tt> </tt>
-<a name="L1049"></a><tt class="py-lineno">1049</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">creds</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1050"></a><tt class="py-lineno">1050</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">id</tt><tt class="py-op">(</tt><tt class="py-name">creds</tt><tt class="py-op">)</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_refreshed_credentials</tt><tt class="py-op">:</tt> </tt>
-<a name="L1051"></a><tt class="py-lineno">1051</tt>  <tt class="py-line">        <tt class="py-name">creds</tt><tt class="py-op">.</tt><tt class="py-name">refresh</tt><tt class="py-op">(</tt><tt id="link-185" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-185', 'http', 'link-25');">http</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1052"></a><tt class="py-lineno">1052</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_refreshed_credentials</tt><tt class="py-op">[</tt><tt class="py-name">id</tt><tt class="py-op">(</tt><tt class="py-name">creds</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1053"></a><tt class="py-lineno">1053</tt>  <tt class="py-line"> </tt>
-<a name="L1054"></a><tt class="py-lineno">1054</tt>  <tt class="py-line">    <tt class="py-comment"># Only apply the credentials if we are using the http object passed in,</tt> </tt>
-<a name="L1055"></a><tt class="py-lineno">1055</tt>  <tt class="py-line">    <tt class="py-comment"># otherwise apply() will get called during _serialize_request().</tt> </tt>
-<a name="L1056"></a><tt class="py-lineno">1056</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-186" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-186', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-187" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-187', 'http', 'link-25');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-188" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-188', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-189" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-189', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-190" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-190', 'request', 'link-26');">request</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L1057"></a><tt class="py-lineno">1057</tt>  <tt class="py-line">        <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1058"></a><tt class="py-lineno">1058</tt>  <tt class="py-line">      <tt class="py-name">creds</tt><tt class="py-op">.</tt><tt class="py-name">apply</tt><tt class="py-op">(</tt><tt id="link-191" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-191', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1059"></a><tt class="py-lineno">1059</tt>  <tt class="py-line"> </tt>
-<a name="BatchHttpRequest._id_to_header"></a><div id="BatchHttpRequest._id_to_header-def"><a name="L1060"></a><tt class="py-lineno">1060</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._id_to_header-toggle" onclick="return toggle('BatchHttpRequest._id_to_header');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_id_to_header">_id_to_header</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">id_</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest._id_to_header-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._id_to_header-expanded"><a name="L1061"></a><tt class="py-lineno">1061</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert an id to a Content-ID header value.</tt> </tt>
-<a name="L1062"></a><tt class="py-lineno">1062</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1063"></a><tt class="py-lineno">1063</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1064"></a><tt class="py-lineno">1064</tt>  <tt class="py-line"><tt class="py-docstring">      id_: string, identifier of individual request.</tt> </tt>
-<a name="L1065"></a><tt class="py-lineno">1065</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1066"></a><tt class="py-lineno">1066</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L1067"></a><tt class="py-lineno">1067</tt>  <tt class="py-line"><tt class="py-docstring">      A Content-ID header with the id_ encoded into it. A UUID is prepended to</tt> </tt>
-<a name="L1068"></a><tt class="py-lineno">1068</tt>  <tt class="py-line"><tt class="py-docstring">      the value because Content-ID headers are supposed to be universally</tt> </tt>
-<a name="L1069"></a><tt class="py-lineno">1069</tt>  <tt class="py-line"><tt class="py-docstring">      unique.</tt> </tt>
-<a name="L1070"></a><tt class="py-lineno">1070</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1071"></a><tt class="py-lineno">1071</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_base_id</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1072"></a><tt class="py-lineno">1072</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_base_id</tt> <tt class="py-op">=</tt> <tt class="py-name">uuid</tt><tt class="py-op">.</tt><tt class="py-name">uuid4</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1073"></a><tt class="py-lineno">1073</tt>  <tt class="py-line"> </tt>
-<a name="L1074"></a><tt class="py-lineno">1074</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'&lt;%s+%s&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_base_id</tt><tt class="py-op">,</tt> <tt class="py-name">quote</tt><tt class="py-op">(</tt><tt class="py-name">id_</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1075"></a><tt class="py-lineno">1075</tt>  <tt class="py-line"> </tt>
-<a name="BatchHttpRequest._header_to_id"></a><div id="BatchHttpRequest._header_to_id-def"><a name="L1076"></a><tt class="py-lineno">1076</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._header_to_id-toggle" onclick="return toggle('BatchHttpRequest._header_to_id');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_header_to_id">_header_to_id</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">header</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest._header_to_id-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._header_to_id-expanded"><a name="L1077"></a><tt class="py-lineno">1077</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert a Content-ID header value to an id.</tt> </tt>
-<a name="L1078"></a><tt class="py-lineno">1078</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1079"></a><tt class="py-lineno">1079</tt>  <tt class="py-line"><tt class="py-docstring">    Presumes the Content-ID header conforms to the format that _id_to_header()</tt> </tt>
-<a name="L1080"></a><tt class="py-lineno">1080</tt>  <tt class="py-line"><tt class="py-docstring">    returns.</tt> </tt>
-<a name="L1081"></a><tt class="py-lineno">1081</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1082"></a><tt class="py-lineno">1082</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1083"></a><tt class="py-lineno">1083</tt>  <tt class="py-line"><tt class="py-docstring">      header: string, Content-ID header value.</tt> </tt>
-<a name="L1084"></a><tt class="py-lineno">1084</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1085"></a><tt class="py-lineno">1085</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L1086"></a><tt class="py-lineno">1086</tt>  <tt class="py-line"><tt class="py-docstring">      The extracted id value.</tt> </tt>
-<a name="L1087"></a><tt class="py-lineno">1087</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1088"></a><tt class="py-lineno">1088</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L1089"></a><tt class="py-lineno">1089</tt>  <tt class="py-line"><tt class="py-docstring">      BatchError if the header is not in the expected format.</tt> </tt>
-<a name="L1090"></a><tt class="py-lineno">1090</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1091"></a><tt class="py-lineno">1091</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">header</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'&lt;'</tt> <tt class="py-keyword">or</tt> <tt class="py-name">header</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'&gt;'</tt><tt class="py-op">:</tt> </tt>
-<a name="L1092"></a><tt class="py-lineno">1092</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-192" class="py-name"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-192', 'BatchError', 'link-4');">BatchError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Invalid value for Content-ID: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">header</tt><tt class="py-op">)</tt> </tt>
-<a name="L1093"></a><tt class="py-lineno">1093</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'+'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">header</tt><tt class="py-op">:</tt> </tt>
-<a name="L1094"></a><tt class="py-lineno">1094</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-193" class="py-name"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-193', 'BatchError', 'link-4');">BatchError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Invalid value for Content-ID: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">header</tt><tt class="py-op">)</tt> </tt>
-<a name="L1095"></a><tt class="py-lineno">1095</tt>  <tt class="py-line">    <tt id="link-194" class="py-name" targets="Module googleapiclient.discovery_cache.base=googleapiclient.discovery_cache.base-module.html"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-194', 'base', 'link-194');">base</a></tt><tt class="py-op">,</tt> <tt class="py-name">id_</tt> <tt class="py-op">=</tt> <tt class="py-name">header</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">rsplit</tt><tt class="py-op">(</tt><tt class="py-string">'+'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L1096"></a><tt class="py-lineno">1096</tt>  <tt class="py-line"> </tt>
-<a name="L1097"></a><tt class="py-lineno">1097</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">unquote</tt><tt class="py-op">(</tt><tt class="py-name">id_</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1098"></a><tt class="py-lineno">1098</tt>  <tt class="py-line"> </tt>
-<a name="BatchHttpRequest._serialize_request"></a><div id="BatchHttpRequest._serialize_request-def"><a name="L1099"></a><tt class="py-lineno">1099</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._serialize_request-toggle" onclick="return toggle('BatchHttpRequest._serialize_request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_serialize_request">_serialize_request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest._serialize_request-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._serialize_request-expanded"><a name="L1100"></a><tt class="py-lineno">1100</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert an HttpRequest object into a string.</tt> </tt>
-<a name="L1101"></a><tt class="py-lineno">1101</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1102"></a><tt class="py-lineno">1102</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1103"></a><tt class="py-lineno">1103</tt>  <tt class="py-line"><tt class="py-docstring">      request: HttpRequest, the request to serialize.</tt> </tt>
-<a name="L1104"></a><tt class="py-lineno">1104</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1105"></a><tt class="py-lineno">1105</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L1106"></a><tt class="py-lineno">1106</tt>  <tt class="py-line"><tt class="py-docstring">      The request as a string in application/http format.</tt> </tt>
-<a name="L1107"></a><tt class="py-lineno">1107</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1108"></a><tt class="py-lineno">1108</tt>  <tt class="py-line">    <tt class="py-comment"># Construct status line</tt> </tt>
-<a name="L1109"></a><tt class="py-lineno">1109</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt id="link-195" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-195', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L1110"></a><tt class="py-lineno">1110</tt>  <tt class="py-line">    <tt class="py-name">request_line</tt> <tt class="py-op">=</tt> <tt class="py-name">urlunparse</tt><tt class="py-op">(</tt> </tt>
-<a name="L1111"></a><tt class="py-lineno">1111</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">query</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
-<a name="L1112"></a><tt class="py-lineno">1112</tt>  <tt class="py-line">        <tt class="py-op">)</tt> </tt>
-<a name="L1113"></a><tt class="py-lineno">1113</tt>  <tt class="py-line">    <tt class="py-name">status_line</tt> <tt class="py-op">=</tt> <tt id="link-196" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-196', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">request_line</tt> <tt class="py-op">+</tt> <tt class="py-string">' HTTP/1.1\n'</tt> </tt>
-<a name="L1114"></a><tt class="py-lineno">1114</tt>  <tt class="py-line">    <tt class="py-name">major</tt><tt class="py-op">,</tt> <tt class="py-name">minor</tt> <tt class="py-op">=</tt> <tt id="link-197" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-197', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">.</tt><tt id="link-198" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
-googleapiclient.discovery_cache.base.Cache.get
-googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-198', 'get', 'link-87');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'content-type'</tt><tt class="py-op">,</tt> <tt class="py-string">'application/json'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1115"></a><tt class="py-lineno">1115</tt>  <tt class="py-line">    <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-name">major</tt><tt class="py-op">,</tt> <tt class="py-name">minor</tt><tt class="py-op">)</tt> </tt>
-<a name="L1116"></a><tt class="py-lineno">1116</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt id="link-199" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-199', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1117"></a><tt class="py-lineno">1117</tt>  <tt class="py-line"> </tt>
-<a name="L1118"></a><tt class="py-lineno">1118</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-200" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-200', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-201" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-201', 'http', 'link-25');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-202" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-202', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-203" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-203', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-204" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-204', 'request', 'link-26');">request</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L1119"></a><tt class="py-lineno">1119</tt>  <tt class="py-line">        <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1120"></a><tt class="py-lineno">1120</tt>  <tt class="py-line">      <tt id="link-205" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-205', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-206" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-206', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-207" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-207', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">credentials</tt><tt class="py-op">.</tt><tt class="py-name">apply</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L1121"></a><tt class="py-lineno">1121</tt>  <tt class="py-line"> </tt>
-<a name="L1122"></a><tt class="py-lineno">1122</tt>  <tt class="py-line">    <tt class="py-comment"># MIMENonMultipart adds its own Content-Type header.</tt> </tt>
-<a name="L1123"></a><tt class="py-lineno">1123</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'content-type'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
-<a name="L1124"></a><tt class="py-lineno">1124</tt>  <tt class="py-line">      <tt class="py-keyword">del</tt> <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> </tt>
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-196', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">credentials</tt> </tt>
+<a name="L1121"></a><tt class="py-lineno">1121</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">creds</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1122"></a><tt class="py-lineno">1122</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">id</tt><tt class="py-op">(</tt><tt class="py-name">creds</tt><tt class="py-op">)</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_refreshed_credentials</tt><tt class="py-op">:</tt> </tt>
+<a name="L1123"></a><tt class="py-lineno">1123</tt>  <tt class="py-line">        <tt class="py-name">creds</tt><tt class="py-op">.</tt><tt class="py-name">refresh</tt><tt class="py-op">(</tt><tt id="link-197" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-197', 'http', 'link-33');">http</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1124"></a><tt class="py-lineno">1124</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_refreshed_credentials</tt><tt class="py-op">[</tt><tt class="py-name">id</tt><tt class="py-op">(</tt><tt class="py-name">creds</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">1</tt> </tt>
 <a name="L1125"></a><tt class="py-lineno">1125</tt>  <tt class="py-line"> </tt>
-<a name="L1126"></a><tt class="py-lineno">1126</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1127"></a><tt class="py-lineno">1127</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
-<a name="L1128"></a><tt class="py-lineno">1128</tt>  <tt class="py-line">    <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Host'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">netloc</tt> </tt>
-<a name="L1129"></a><tt class="py-lineno">1129</tt>  <tt class="py-line">    <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_unixfrom</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L1130"></a><tt class="py-lineno">1130</tt>  <tt class="py-line"> </tt>
-<a name="L1131"></a><tt class="py-lineno">1131</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-208" class="py-name"><a title="googleapiclient.http.HttpMock.request
+<a name="L1126"></a><tt class="py-lineno">1126</tt>  <tt class="py-line">    <tt class="py-comment"># Only apply the credentials if we are using the http object passed in,</tt> </tt>
+<a name="L1127"></a><tt class="py-lineno">1127</tt>  <tt class="py-line">    <tt class="py-comment"># otherwise apply() will get called during _serialize_request().</tt> </tt>
+<a name="L1128"></a><tt class="py-lineno">1128</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-198" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-208', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-209" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-209', 'body', 'link-58');">body</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1132"></a><tt class="py-lineno">1132</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt id="link-210" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-198', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-199', 'http', 'link-33');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt> <tt class="py-keyword">or</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-200" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-210', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-211" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-211', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1133"></a><tt class="py-lineno">1133</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-212" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-200', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-201" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-201', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-202" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-212', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-213" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-213', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1134"></a><tt class="py-lineno">1134</tt>  <tt class="py-line"> </tt>
-<a name="L1135"></a><tt class="py-lineno">1135</tt>  <tt class="py-line">    <tt class="py-comment"># Serialize the mime message.</tt> </tt>
-<a name="L1136"></a><tt class="py-lineno">1136</tt>  <tt class="py-line">    <tt class="py-name">fp</tt> <tt class="py-op">=</tt> <tt class="py-name">StringIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1137"></a><tt class="py-lineno">1137</tt>  <tt class="py-line">    <tt class="py-comment"># maxheaderlen=0 means don't line wrap headers.</tt> </tt>
-<a name="L1138"></a><tt class="py-lineno">1138</tt>  <tt class="py-line">    <tt class="py-name">g</tt> <tt class="py-op">=</tt> <tt class="py-name">Generator</tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">,</tt> <tt class="py-name">maxheaderlen</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L1139"></a><tt class="py-lineno">1139</tt>  <tt class="py-line">    <tt class="py-name">g</tt><tt class="py-op">.</tt><tt class="py-name">flatten</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">,</tt> <tt class="py-name">unixfrom</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
-<a name="L1140"></a><tt class="py-lineno">1140</tt>  <tt class="py-line">    <tt id="link-214" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-214', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">fp</tt><tt class="py-op">.</tt><tt class="py-name">getvalue</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1141"></a><tt class="py-lineno">1141</tt>  <tt class="py-line"> </tt>
-<a name="L1142"></a><tt class="py-lineno">1142</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">status_line</tt> <tt class="py-op">+</tt> <tt id="link-215" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-215', 'body', 'link-58');">body</a></tt> </tt>
-</div><a name="L1143"></a><tt class="py-lineno">1143</tt>  <tt class="py-line"> </tt>
-<a name="BatchHttpRequest._deserialize_response"></a><div id="BatchHttpRequest._deserialize_response-def"><a name="L1144"></a><tt class="py-lineno">1144</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._deserialize_response-toggle" onclick="return toggle('BatchHttpRequest._deserialize_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_deserialize_response">_deserialize_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest._deserialize_response-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._deserialize_response-expanded"><a name="L1145"></a><tt class="py-lineno">1145</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert string into httplib2 response and content.</tt> </tt>
-<a name="L1146"></a><tt class="py-lineno">1146</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1147"></a><tt class="py-lineno">1147</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1148"></a><tt class="py-lineno">1148</tt>  <tt class="py-line"><tt class="py-docstring">      payload: string, headers and body as a string.</tt> </tt>
-<a name="L1149"></a><tt class="py-lineno">1149</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1150"></a><tt class="py-lineno">1150</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L1151"></a><tt class="py-lineno">1151</tt>  <tt class="py-line"><tt class="py-docstring">      A pair (resp, content), such as would be returned from httplib2.request.</tt> </tt>
-<a name="L1152"></a><tt class="py-lineno">1152</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1153"></a><tt class="py-lineno">1153</tt>  <tt class="py-line">    <tt class="py-comment"># Strip off the status line</tt> </tt>
-<a name="L1154"></a><tt class="py-lineno">1154</tt>  <tt class="py-line">    <tt class="py-name">status_line</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-name">payload</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L1155"></a><tt class="py-lineno">1155</tt>  <tt class="py-line">    <tt class="py-name">protocol</tt><tt class="py-op">,</tt> <tt class="py-name">status</tt><tt class="py-op">,</tt> <tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">status_line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="L1156"></a><tt class="py-lineno">1156</tt>  <tt class="py-line"> </tt>
-<a name="L1157"></a><tt class="py-lineno">1157</tt>  <tt class="py-line">    <tt class="py-comment"># Parse the rest of the response</tt> </tt>
-<a name="L1158"></a><tt class="py-lineno">1158</tt>  <tt class="py-line">    <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">FeedParser</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1159"></a><tt class="py-lineno">1159</tt>  <tt class="py-line">    <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">feed</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
-<a name="L1160"></a><tt class="py-lineno">1160</tt>  <tt class="py-line">    <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1161"></a><tt class="py-lineno">1161</tt>  <tt class="py-line">    <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'status'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">status</tt> </tt>
-<a name="L1162"></a><tt class="py-lineno">1162</tt>  <tt class="py-line"> </tt>
-<a name="L1163"></a><tt class="py-lineno">1163</tt>  <tt class="py-line">    <tt class="py-comment"># Create httplib2.Response from the parsed headers.</tt> </tt>
-<a name="L1164"></a><tt class="py-lineno">1164</tt>  <tt class="py-line">    <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Response</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
-<a name="L1165"></a><tt class="py-lineno">1165</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">reason</tt> </tt>
-<a name="L1166"></a><tt class="py-lineno">1166</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">protocol</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1167"></a><tt class="py-lineno">1167</tt>  <tt class="py-line"> </tt>
-<a name="L1168"></a><tt class="py-lineno">1168</tt>  <tt class="py-line">    <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">payload</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n\r\n'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L1169"></a><tt class="py-lineno">1169</tt>  <tt class="py-line"> </tt>
-<a name="L1170"></a><tt class="py-lineno">1170</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
-</div><a name="L1171"></a><tt class="py-lineno">1171</tt>  <tt class="py-line"> </tt>
-<a name="BatchHttpRequest._new_id"></a><div id="BatchHttpRequest._new_id-def"><a name="L1172"></a><tt class="py-lineno">1172</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._new_id-toggle" onclick="return toggle('BatchHttpRequest._new_id');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_new_id">_new_id</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest._new_id-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._new_id-expanded"><a name="L1173"></a><tt class="py-lineno">1173</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create a new id.</tt> </tt>
-<a name="L1174"></a><tt class="py-lineno">1174</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1175"></a><tt class="py-lineno">1175</tt>  <tt class="py-line"><tt class="py-docstring">    Auto incrementing number that avoids conflicts with ids already used.</tt> </tt>
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-202', 'request', 'link-34');">request</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1129"></a><tt class="py-lineno">1129</tt>  <tt class="py-line">        <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1130"></a><tt class="py-lineno">1130</tt>  <tt class="py-line">      <tt class="py-name">creds</tt><tt class="py-op">.</tt><tt class="py-name">apply</tt><tt class="py-op">(</tt><tt id="link-203" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-203', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1131"></a><tt class="py-lineno">1131</tt>  <tt class="py-line"> </tt>
+<a name="BatchHttpRequest._id_to_header"></a><div id="BatchHttpRequest._id_to_header-def"><a name="L1132"></a><tt class="py-lineno">1132</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._id_to_header-toggle" onclick="return toggle('BatchHttpRequest._id_to_header');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_id_to_header">_id_to_header</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">id_</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest._id_to_header-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._id_to_header-expanded"><a name="L1133"></a><tt class="py-lineno">1133</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert an id to a Content-ID header value.</tt> </tt>
+<a name="L1134"></a><tt class="py-lineno">1134</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1135"></a><tt class="py-lineno">1135</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1136"></a><tt class="py-lineno">1136</tt>  <tt class="py-line"><tt class="py-docstring">      id_: string, identifier of individual request.</tt> </tt>
+<a name="L1137"></a><tt class="py-lineno">1137</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1138"></a><tt class="py-lineno">1138</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L1139"></a><tt class="py-lineno">1139</tt>  <tt class="py-line"><tt class="py-docstring">      A Content-ID header with the id_ encoded into it. A UUID is prepended to</tt> </tt>
+<a name="L1140"></a><tt class="py-lineno">1140</tt>  <tt class="py-line"><tt class="py-docstring">      the value because Content-ID headers are supposed to be universally</tt> </tt>
+<a name="L1141"></a><tt class="py-lineno">1141</tt>  <tt class="py-line"><tt class="py-docstring">      unique.</tt> </tt>
+<a name="L1142"></a><tt class="py-lineno">1142</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1143"></a><tt class="py-lineno">1143</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_base_id</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1144"></a><tt class="py-lineno">1144</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_base_id</tt> <tt class="py-op">=</tt> <tt class="py-name">uuid</tt><tt class="py-op">.</tt><tt class="py-name">uuid4</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1145"></a><tt class="py-lineno">1145</tt>  <tt class="py-line"> </tt>
+<a name="L1146"></a><tt class="py-lineno">1146</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'&lt;%s+%s&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_base_id</tt><tt class="py-op">,</tt> <tt class="py-name">quote</tt><tt class="py-op">(</tt><tt class="py-name">id_</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1147"></a><tt class="py-lineno">1147</tt>  <tt class="py-line"> </tt>
+<a name="BatchHttpRequest._header_to_id"></a><div id="BatchHttpRequest._header_to_id-def"><a name="L1148"></a><tt class="py-lineno">1148</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._header_to_id-toggle" onclick="return toggle('BatchHttpRequest._header_to_id');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_header_to_id">_header_to_id</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">header</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest._header_to_id-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._header_to_id-expanded"><a name="L1149"></a><tt class="py-lineno">1149</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert a Content-ID header value to an id.</tt> </tt>
+<a name="L1150"></a><tt class="py-lineno">1150</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1151"></a><tt class="py-lineno">1151</tt>  <tt class="py-line"><tt class="py-docstring">    Presumes the Content-ID header conforms to the format that _id_to_header()</tt> </tt>
+<a name="L1152"></a><tt class="py-lineno">1152</tt>  <tt class="py-line"><tt class="py-docstring">    returns.</tt> </tt>
+<a name="L1153"></a><tt class="py-lineno">1153</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1154"></a><tt class="py-lineno">1154</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1155"></a><tt class="py-lineno">1155</tt>  <tt class="py-line"><tt class="py-docstring">      header: string, Content-ID header value.</tt> </tt>
+<a name="L1156"></a><tt class="py-lineno">1156</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1157"></a><tt class="py-lineno">1157</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L1158"></a><tt class="py-lineno">1158</tt>  <tt class="py-line"><tt class="py-docstring">      The extracted id value.</tt> </tt>
+<a name="L1159"></a><tt class="py-lineno">1159</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1160"></a><tt class="py-lineno">1160</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L1161"></a><tt class="py-lineno">1161</tt>  <tt class="py-line"><tt class="py-docstring">      BatchError if the header is not in the expected format.</tt> </tt>
+<a name="L1162"></a><tt class="py-lineno">1162</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1163"></a><tt class="py-lineno">1163</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">header</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'&lt;'</tt> <tt class="py-keyword">or</tt> <tt class="py-name">header</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-string">'&gt;'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1164"></a><tt class="py-lineno">1164</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-204" class="py-name"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-204', 'BatchError', 'link-6');">BatchError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Invalid value for Content-ID: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">header</tt><tt class="py-op">)</tt> </tt>
+<a name="L1165"></a><tt class="py-lineno">1165</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'+'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">header</tt><tt class="py-op">:</tt> </tt>
+<a name="L1166"></a><tt class="py-lineno">1166</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-205" class="py-name"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-205', 'BatchError', 'link-6');">BatchError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Invalid value for Content-ID: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">header</tt><tt class="py-op">)</tt> </tt>
+<a name="L1167"></a><tt class="py-lineno">1167</tt>  <tt class="py-line">    <tt id="link-206" class="py-name" targets="Module googleapiclient.discovery_cache.base=googleapiclient.discovery_cache.base-module.html"><a title="googleapiclient.discovery_cache.base" class="py-name" href="#" onclick="return doclink('link-206', 'base', 'link-206');">base</a></tt><tt class="py-op">,</tt> <tt class="py-name">id_</tt> <tt class="py-op">=</tt> <tt class="py-name">header</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">rsplit</tt><tt class="py-op">(</tt><tt class="py-string">'+'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1168"></a><tt class="py-lineno">1168</tt>  <tt class="py-line"> </tt>
+<a name="L1169"></a><tt class="py-lineno">1169</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">unquote</tt><tt class="py-op">(</tt><tt class="py-name">id_</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1170"></a><tt class="py-lineno">1170</tt>  <tt class="py-line"> </tt>
+<a name="BatchHttpRequest._serialize_request"></a><div id="BatchHttpRequest._serialize_request-def"><a name="L1171"></a><tt class="py-lineno">1171</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._serialize_request-toggle" onclick="return toggle('BatchHttpRequest._serialize_request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_serialize_request">_serialize_request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest._serialize_request-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._serialize_request-expanded"><a name="L1172"></a><tt class="py-lineno">1172</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert an HttpRequest object into a string.</tt> </tt>
+<a name="L1173"></a><tt class="py-lineno">1173</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1174"></a><tt class="py-lineno">1174</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1175"></a><tt class="py-lineno">1175</tt>  <tt class="py-line"><tt class="py-docstring">      request: HttpRequest, the request to serialize.</tt> </tt>
 <a name="L1176"></a><tt class="py-lineno">1176</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
 <a name="L1177"></a><tt class="py-lineno">1177</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L1178"></a><tt class="py-lineno">1178</tt>  <tt class="py-line"><tt class="py-docstring">       string, a new unique id.</tt> </tt>
+<a name="L1178"></a><tt class="py-lineno">1178</tt>  <tt class="py-line"><tt class="py-docstring">      The request as a string in application/http format.</tt> </tt>
 <a name="L1179"></a><tt class="py-lineno">1179</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1180"></a><tt class="py-lineno">1180</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1181"></a><tt class="py-lineno">1181</tt>  <tt class="py-line">    <tt class="py-keyword">while</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">:</tt> </tt>
-<a name="L1182"></a><tt class="py-lineno">1182</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1183"></a><tt class="py-lineno">1183</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1184"></a><tt class="py-lineno">1184</tt>  <tt class="py-line"> </tt>
-<a name="L1185"></a><tt class="py-lineno">1185</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
-<a name="BatchHttpRequest.add"></a><div id="BatchHttpRequest.add-def"><a name="L1186"></a><tt class="py-lineno">1186</tt> <a class="py-toggle" href="#" id="BatchHttpRequest.add-toggle" onclick="return toggle('BatchHttpRequest.add');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#add">add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request</tt><tt class="py-op">,</tt> <tt class="py-param">callback</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">request_id</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest.add-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest.add-expanded"><a name="L1187"></a><tt class="py-lineno">1187</tt>  <tt class="py-line">    <tt class="py-docstring">"""Add a new request.</tt> </tt>
-<a name="L1188"></a><tt class="py-lineno">1188</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1189"></a><tt class="py-lineno">1189</tt>  <tt class="py-line"><tt class="py-docstring">    Every callback added will be paired with a unique id, the request_id. That</tt> </tt>
-<a name="L1190"></a><tt class="py-lineno">1190</tt>  <tt class="py-line"><tt class="py-docstring">    unique id will be passed back to the callback when the response comes back</tt> </tt>
-<a name="L1191"></a><tt class="py-lineno">1191</tt>  <tt class="py-line"><tt class="py-docstring">    from the server. The default behavior is to have the library generate it's</tt> </tt>
-<a name="L1192"></a><tt class="py-lineno">1192</tt>  <tt class="py-line"><tt class="py-docstring">    own unique id. If the caller passes in a request_id then they must ensure</tt> </tt>
-<a name="L1193"></a><tt class="py-lineno">1193</tt>  <tt class="py-line"><tt class="py-docstring">    uniqueness for each request_id, and if they are not an exception is</tt> </tt>
-<a name="L1194"></a><tt class="py-lineno">1194</tt>  <tt class="py-line"><tt class="py-docstring">    raised. Callers should either supply all request_ids or nevery supply a</tt> </tt>
-<a name="L1195"></a><tt class="py-lineno">1195</tt>  <tt class="py-line"><tt class="py-docstring">    request id, to avoid such an error.</tt> </tt>
-<a name="L1196"></a><tt class="py-lineno">1196</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1197"></a><tt class="py-lineno">1197</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1198"></a><tt class="py-lineno">1198</tt>  <tt class="py-line"><tt class="py-docstring">      request: HttpRequest, Request to add to the batch.</tt> </tt>
-<a name="L1199"></a><tt class="py-lineno">1199</tt>  <tt class="py-line"><tt class="py-docstring">      callback: callable, A callback to be called for this response, of the</tt> </tt>
-<a name="L1200"></a><tt class="py-lineno">1200</tt>  <tt class="py-line"><tt class="py-docstring">        form callback(id, response, exception). The first parameter is the</tt> </tt>
-<a name="L1201"></a><tt class="py-lineno">1201</tt>  <tt class="py-line"><tt class="py-docstring">        request id, and the second is the deserialized response object. The</tt> </tt>
-<a name="L1202"></a><tt class="py-lineno">1202</tt>  <tt class="py-line"><tt class="py-docstring">        third is an googleapiclient.errors.HttpError exception object if an HTTP error</tt> </tt>
-<a name="L1203"></a><tt class="py-lineno">1203</tt>  <tt class="py-line"><tt class="py-docstring">        occurred while processing the request, or None if no errors occurred.</tt> </tt>
-<a name="L1204"></a><tt class="py-lineno">1204</tt>  <tt class="py-line"><tt class="py-docstring">      request_id: string, A unique id for the request. The id will be passed to</tt> </tt>
-<a name="L1205"></a><tt class="py-lineno">1205</tt>  <tt class="py-line"><tt class="py-docstring">        the callback with the response.</tt> </tt>
-<a name="L1206"></a><tt class="py-lineno">1206</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1207"></a><tt class="py-lineno">1207</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L1208"></a><tt class="py-lineno">1208</tt>  <tt class="py-line"><tt class="py-docstring">      None</tt> </tt>
-<a name="L1209"></a><tt class="py-lineno">1209</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1210"></a><tt class="py-lineno">1210</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L1211"></a><tt class="py-lineno">1211</tt>  <tt class="py-line"><tt class="py-docstring">      BatchError if a media request is added to a batch.</tt> </tt>
-<a name="L1212"></a><tt class="py-lineno">1212</tt>  <tt class="py-line"><tt class="py-docstring">      KeyError is the request_id is not unique.</tt> </tt>
-<a name="L1213"></a><tt class="py-lineno">1213</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1214"></a><tt class="py-lineno">1214</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1215"></a><tt class="py-lineno">1215</tt>  <tt class="py-line">      <tt class="py-name">request_id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-216" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._new_id()=googleapiclient.http.BatchHttpRequest-class.html#_new_id"><a title="googleapiclient.http.BatchHttpRequest._new_id" class="py-name" href="#" onclick="return doclink('link-216', '_new_id', 'link-216');">_new_id</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1216"></a><tt class="py-lineno">1216</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-217" class="py-name"><a title="googleapiclient.http.HttpMock.request
+<a name="L1180"></a><tt class="py-lineno">1180</tt>  <tt class="py-line">    <tt class="py-comment"># Construct status line</tt> </tt>
+<a name="L1181"></a><tt class="py-lineno">1181</tt>  <tt class="py-line">    <tt class="py-name">parsed</tt> <tt class="py-op">=</tt> <tt class="py-name">urlparse</tt><tt class="py-op">(</tt><tt id="link-207" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-217', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-218" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
-googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-218', 'resumable', 'link-38');">resumable</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1217"></a><tt class="py-lineno">1217</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-219" class="py-name"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-219', 'BatchError', 'link-4');">BatchError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Media requests cannot be used in a batch request."</tt><tt class="py-op">)</tt> </tt>
-<a name="L1218"></a><tt class="py-lineno">1218</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">:</tt> </tt>
-<a name="L1219"></a><tt class="py-lineno">1219</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">KeyError</tt><tt class="py-op">(</tt><tt class="py-string">"A request with this ID already exists: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">request_id</tt><tt class="py-op">)</tt> </tt>
-<a name="L1220"></a><tt class="py-lineno">1220</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-220" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-207', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L1182"></a><tt class="py-lineno">1182</tt>  <tt class="py-line">    <tt class="py-name">request_line</tt> <tt class="py-op">=</tt> <tt class="py-name">urlunparse</tt><tt class="py-op">(</tt> </tt>
+<a name="L1183"></a><tt class="py-lineno">1183</tt>  <tt class="py-line">        <tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">path</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">params</tt><tt class="py-op">,</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">query</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
+<a name="L1184"></a><tt class="py-lineno">1184</tt>  <tt class="py-line">        <tt class="py-op">)</tt> </tt>
+<a name="L1185"></a><tt class="py-lineno">1185</tt>  <tt class="py-line">    <tt class="py-name">status_line</tt> <tt class="py-op">=</tt> <tt id="link-208" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-220', 'request', 'link-26');">request</a></tt> </tt>
-<a name="L1221"></a><tt class="py-lineno">1221</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callbacks</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">callback</tt> </tt>
-<a name="L1222"></a><tt class="py-lineno">1222</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1223"></a><tt class="py-lineno">1223</tt>  <tt class="py-line"> </tt>
-<a name="BatchHttpRequest._execute"></a><div id="BatchHttpRequest._execute-def"><a name="L1224"></a><tt class="py-lineno">1224</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._execute-toggle" onclick="return toggle('BatchHttpRequest._execute');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_execute">_execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">order</tt><tt class="py-op">,</tt> <tt class="py-param">requests</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest._execute-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._execute-expanded"><a name="L1225"></a><tt class="py-lineno">1225</tt>  <tt class="py-line">    <tt class="py-docstring">"""Serialize batch request, send to server, process response.</tt> </tt>
-<a name="L1226"></a><tt class="py-lineno">1226</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1227"></a><tt class="py-lineno">1227</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1228"></a><tt class="py-lineno">1228</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used to make the request with.</tt> </tt>
-<a name="L1229"></a><tt class="py-lineno">1229</tt>  <tt class="py-line"><tt class="py-docstring">      order: list, list of request ids in the order they were added to the</tt> </tt>
-<a name="L1230"></a><tt class="py-lineno">1230</tt>  <tt class="py-line"><tt class="py-docstring">        batch.</tt> </tt>
-<a name="L1231"></a><tt class="py-lineno">1231</tt>  <tt class="py-line"><tt class="py-docstring">      request: list, list of request objects to send.</tt> </tt>
-<a name="L1232"></a><tt class="py-lineno">1232</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1233"></a><tt class="py-lineno">1233</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L1234"></a><tt class="py-lineno">1234</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
-<a name="L1235"></a><tt class="py-lineno">1235</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.BatchError if the response is the wrong format.</tt> </tt>
-<a name="L1236"></a><tt class="py-lineno">1236</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1237"></a><tt class="py-lineno">1237</tt>  <tt class="py-line">    <tt class="py-name">message</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMEMultipart</tt><tt class="py-op">(</tt><tt class="py-string">'mixed'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1238"></a><tt class="py-lineno">1238</tt>  <tt class="py-line">    <tt class="py-comment"># Message should not write out it's own headers.</tt> </tt>
-<a name="L1239"></a><tt class="py-lineno">1239</tt>  <tt class="py-line">    <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">,</tt> <tt class="py-string">'_write_headers'</tt><tt class="py-op">,</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L1240"></a><tt class="py-lineno">1240</tt>  <tt class="py-line"> </tt>
-<a name="L1241"></a><tt class="py-lineno">1241</tt>  <tt class="py-line">    <tt class="py-comment"># Add all the individual requests.</tt> </tt>
-<a name="L1242"></a><tt class="py-lineno">1242</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">order</tt><tt class="py-op">:</tt> </tt>
-<a name="L1243"></a><tt class="py-lineno">1243</tt>  <tt class="py-line">      <tt id="link-221" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-208', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">request_line</tt> <tt class="py-op">+</tt> <tt class="py-string">' HTTP/1.1\n'</tt> </tt>
+<a name="L1186"></a><tt class="py-lineno">1186</tt>  <tt class="py-line">    <tt class="py-name">major</tt><tt class="py-op">,</tt> <tt class="py-name">minor</tt> <tt class="py-op">=</tt> <tt id="link-209" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-221', 'request', 'link-26');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
-<a name="L1244"></a><tt class="py-lineno">1244</tt>  <tt class="py-line"> </tt>
-<a name="L1245"></a><tt class="py-lineno">1245</tt>  <tt class="py-line">      <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-string">'application'</tt><tt class="py-op">,</tt> <tt class="py-string">'http'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1246"></a><tt class="py-lineno">1246</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Content-Transfer-Encoding'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'binary'</tt> </tt>
-<a name="L1247"></a><tt class="py-lineno">1247</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Content-ID'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-222" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._id_to_header()=googleapiclient.http.BatchHttpRequest-class.html#_id_to_header"><a title="googleapiclient.http.BatchHttpRequest._id_to_header" class="py-name" href="#" onclick="return doclink('link-222', '_id_to_header', 'link-222');">_id_to_header</a></tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">)</tt> </tt>
-<a name="L1248"></a><tt class="py-lineno">1248</tt>  <tt class="py-line"> </tt>
-<a name="L1249"></a><tt class="py-lineno">1249</tt>  <tt class="py-line">      <tt id="link-223" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-223', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-224" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._serialize_request()=googleapiclient.http.BatchHttpRequest-class.html#_serialize_request"><a title="googleapiclient.http.BatchHttpRequest._serialize_request" class="py-name" href="#" onclick="return doclink('link-224', '_serialize_request', 'link-224');">_serialize_request</a></tt><tt class="py-op">(</tt><tt id="link-225" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-225', 'request', 'link-26');">request</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1250"></a><tt class="py-lineno">1250</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt id="link-226" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-226', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1251"></a><tt class="py-lineno">1251</tt>  <tt class="py-line">      <tt class="py-name">message</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
-<a name="L1252"></a><tt class="py-lineno">1252</tt>  <tt class="py-line"> </tt>
-<a name="L1253"></a><tt class="py-lineno">1253</tt>  <tt class="py-line">    <tt class="py-comment"># encode the body: note that we can't use `as_string`, because</tt> </tt>
-<a name="L1254"></a><tt class="py-lineno">1254</tt>  <tt class="py-line">    <tt class="py-comment"># it plays games with `From ` lines.</tt> </tt>
-<a name="L1255"></a><tt class="py-lineno">1255</tt>  <tt class="py-line">    <tt class="py-name">fp</tt> <tt class="py-op">=</tt> <tt class="py-name">StringIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1256"></a><tt class="py-lineno">1256</tt>  <tt class="py-line">    <tt class="py-name">g</tt> <tt class="py-op">=</tt> <tt class="py-name">Generator</tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">,</tt> <tt class="py-name">mangle_from_</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
-<a name="L1257"></a><tt class="py-lineno">1257</tt>  <tt class="py-line">    <tt class="py-name">g</tt><tt class="py-op">.</tt><tt class="py-name">flatten</tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">,</tt> <tt class="py-name">unixfrom</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
-<a name="L1258"></a><tt class="py-lineno">1258</tt>  <tt class="py-line">    <tt id="link-227" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-227', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">fp</tt><tt class="py-op">.</tt><tt class="py-name">getvalue</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1259"></a><tt class="py-lineno">1259</tt>  <tt class="py-line"> </tt>
-<a name="L1260"></a><tt class="py-lineno">1260</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L1261"></a><tt class="py-lineno">1261</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'multipart/mixed; '</tt> </tt>
-<a name="L1262"></a><tt class="py-lineno">1262</tt>  <tt class="py-line">                               <tt class="py-string">'boundary="%s"'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">message</tt><tt class="py-op">.</tt><tt class="py-name">get_boundary</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1263"></a><tt class="py-lineno">1263</tt>  <tt class="py-line"> </tt>
-<a name="L1264"></a><tt class="py-lineno">1264</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-228" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-228', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-229" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-229', 'request', 'link-26');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_batch_uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt id="link-230" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-230', 'body', 'link-58');">body</a></tt><tt class="py-op">=</tt><tt id="link-231" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-231', 'body', 'link-58');">body</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L1265"></a><tt class="py-lineno">1265</tt>  <tt class="py-line">                                 <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L1266"></a><tt class="py-lineno">1266</tt>  <tt class="py-line"> </tt>
-<a name="L1267"></a><tt class="py-lineno">1267</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">300</tt><tt class="py-op">:</tt> </tt>
-<a name="L1268"></a><tt class="py-lineno">1268</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-232" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-232', 'HttpError', 'link-7');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_batch_uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L1269"></a><tt class="py-lineno">1269</tt>  <tt class="py-line"> </tt>
-<a name="L1270"></a><tt class="py-lineno">1270</tt>  <tt class="py-line">    <tt class="py-comment"># Prepend with a content-type header so FeedParser can handle it.</tt> </tt>
-<a name="L1271"></a><tt class="py-lineno">1271</tt>  <tt class="py-line">    <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-string">'content-type: %s\r\n\r\n'</tt> <tt class="py-op">%</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> </tt>
-<a name="L1272"></a><tt class="py-lineno">1272</tt>  <tt class="py-line">    <tt class="py-comment"># PY3's FeedParser only accepts unicode. So we should decode content</tt> </tt>
-<a name="L1273"></a><tt class="py-lineno">1273</tt>  <tt class="py-line">    <tt class="py-comment"># here, and encode each payload again.</tt> </tt>
-<a name="L1274"></a><tt class="py-lineno">1274</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">PY3</tt><tt class="py-op">:</tt> </tt>
-<a name="L1275"></a><tt class="py-lineno">1275</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1276"></a><tt class="py-lineno">1276</tt>  <tt class="py-line">    <tt class="py-name">for_parser</tt> <tt class="py-op">=</tt> <tt class="py-name">header</tt> <tt class="py-op">+</tt> <tt class="py-name">content</tt> </tt>
-<a name="L1277"></a><tt class="py-lineno">1277</tt>  <tt class="py-line"> </tt>
-<a name="L1278"></a><tt class="py-lineno">1278</tt>  <tt class="py-line">    <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">FeedParser</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1279"></a><tt class="py-lineno">1279</tt>  <tt class="py-line">    <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">feed</tt><tt class="py-op">(</tt><tt class="py-name">for_parser</tt><tt class="py-op">)</tt> </tt>
-<a name="L1280"></a><tt class="py-lineno">1280</tt>  <tt class="py-line">    <tt class="py-name">mime_response</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1281"></a><tt class="py-lineno">1281</tt>  <tt class="py-line"> </tt>
-<a name="L1282"></a><tt class="py-lineno">1282</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">mime_response</tt><tt class="py-op">.</tt><tt class="py-name">is_multipart</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1283"></a><tt class="py-lineno">1283</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-233" class="py-name"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-233', 'BatchError', 'link-4');">BatchError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Response not in multipart/mixed format."</tt><tt class="py-op">,</tt> <tt class="py-name">resp</tt><tt class="py-op">=</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> </tt>
-<a name="L1284"></a><tt class="py-lineno">1284</tt>  <tt class="py-line">                       <tt class="py-name">content</tt><tt class="py-op">=</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L1285"></a><tt class="py-lineno">1285</tt>  <tt class="py-line"> </tt>
-<a name="L1286"></a><tt class="py-lineno">1286</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">part</tt> <tt class="py-keyword">in</tt> <tt class="py-name">mime_response</tt><tt class="py-op">.</tt><tt class="py-name">get_payload</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1287"></a><tt class="py-lineno">1287</tt>  <tt class="py-line">      <tt class="py-name">request_id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._header_to_id()=googleapiclient.http.BatchHttpRequest-class.html#_header_to_id"><a title="googleapiclient.http.BatchHttpRequest._header_to_id" class="py-name" href="#" onclick="return doclink('link-234', '_header_to_id', 'link-234');">_header_to_id</a></tt><tt class="py-op">(</tt><tt class="py-name">part</tt><tt class="py-op">[</tt><tt class="py-string">'Content-ID'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L1288"></a><tt class="py-lineno">1288</tt>  <tt class="py-line">      <tt id="link-235" class="py-name" targets="Method googleapiclient.model.BaseModel.response()=googleapiclient.model.BaseModel-class.html#response,Method googleapiclient.model.Model.response()=googleapiclient.model.Model-class.html#response"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-235', 'response', 'link-235');">response</a></tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-236" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._deserialize_response()=googleapiclient.http.BatchHttpRequest-class.html#_deserialize_response"><a title="googleapiclient.http.BatchHttpRequest._deserialize_response" class="py-name" href="#" onclick="return doclink('link-236', '_deserialize_response', 'link-236');">_deserialize_response</a></tt><tt class="py-op">(</tt><tt class="py-name">part</tt><tt class="py-op">.</tt><tt class="py-name">get_payload</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1289"></a><tt class="py-lineno">1289</tt>  <tt class="py-line">      <tt class="py-comment"># We encode content here to emulate normal http response.</tt> </tt>
-<a name="L1290"></a><tt class="py-lineno">1290</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">text_type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1291"></a><tt class="py-lineno">1291</tt>  <tt class="py-line">        <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1292"></a><tt class="py-lineno">1292</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_responses</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-237" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-237', 'response', 'link-235');">response</a></tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1293"></a><tt class="py-lineno">1293</tt>  <tt class="py-line"> </tt>
-<a name="L1294"></a><tt class="py-lineno">1294</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="BatchHttpRequest.execute"></a><div id="BatchHttpRequest.execute-def"><a name="L1295"></a><tt class="py-lineno">1295</tt> <a class="py-toggle" href="#" id="BatchHttpRequest.execute-toggle" onclick="return toggle('BatchHttpRequest.execute');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#execute">execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BatchHttpRequest.execute-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest.execute-expanded"><a name="L1296"></a><tt class="py-lineno">1296</tt>  <tt class="py-line">    <tt class="py-docstring">"""Execute all the requests as a single batched HTTP request.</tt> </tt>
-<a name="L1297"></a><tt class="py-lineno">1297</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1298"></a><tt class="py-lineno">1298</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1299"></a><tt class="py-lineno">1299</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used in place of the one the</tt> </tt>
-<a name="L1300"></a><tt class="py-lineno">1300</tt>  <tt class="py-line"><tt class="py-docstring">        HttpRequest request object was constructed with. If one isn't supplied</tt> </tt>
-<a name="L1301"></a><tt class="py-lineno">1301</tt>  <tt class="py-line"><tt class="py-docstring">        then use a http object from the requests in this batch.</tt> </tt>
-<a name="L1302"></a><tt class="py-lineno">1302</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1303"></a><tt class="py-lineno">1303</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L1304"></a><tt class="py-lineno">1304</tt>  <tt class="py-line"><tt class="py-docstring">      None</tt> </tt>
-<a name="L1305"></a><tt class="py-lineno">1305</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1306"></a><tt class="py-lineno">1306</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L1307"></a><tt class="py-lineno">1307</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
-<a name="L1308"></a><tt class="py-lineno">1308</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.BatchError if the response is the wrong format.</tt> </tt>
-<a name="L1309"></a><tt class="py-lineno">1309</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1310"></a><tt class="py-lineno">1310</tt>  <tt class="py-line">    <tt class="py-comment"># If we have no requests return</tt> </tt>
-<a name="L1311"></a><tt class="py-lineno">1311</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L1312"></a><tt class="py-lineno">1312</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1313"></a><tt class="py-lineno">1313</tt>  <tt class="py-line"> </tt>
-<a name="L1314"></a><tt class="py-lineno">1314</tt>  <tt class="py-line">    <tt class="py-comment"># If http is not supplied use the first valid one given in the requests.</tt> </tt>
-<a name="L1315"></a><tt class="py-lineno">1315</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-238" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-238', 'http', 'link-25');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1316"></a><tt class="py-lineno">1316</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">:</tt> </tt>
-<a name="L1317"></a><tt class="py-lineno">1317</tt>  <tt class="py-line">        <tt id="link-239" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-239', 'request', 'link-26');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
-<a name="L1318"></a><tt class="py-lineno">1318</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-240" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-240', 'request', 'link-26');">request</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1319"></a><tt class="py-lineno">1319</tt>  <tt class="py-line">          <tt id="link-241" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-241', 'http', 'link-25');">http</a></tt> <tt class="py-op">=</tt> <tt id="link-242" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-242', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt id="link-243" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-243', 'http', 'link-25');">http</a></tt> </tt>
-<a name="L1320"></a><tt class="py-lineno">1320</tt>  <tt class="py-line">          <tt class="py-keyword">break</tt> </tt>
-<a name="L1321"></a><tt class="py-lineno">1321</tt>  <tt class="py-line"> </tt>
-<a name="L1322"></a><tt class="py-lineno">1322</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-244" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-244', 'http', 'link-25');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1323"></a><tt class="py-lineno">1323</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Missing a valid http object."</tt><tt class="py-op">)</tt> </tt>
-<a name="L1324"></a><tt class="py-lineno">1324</tt>  <tt class="py-line"> </tt>
-<a name="L1325"></a><tt class="py-lineno">1325</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-245" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._execute()=googleapiclient.http.BatchHttpRequest-class.html#_execute"><a title="googleapiclient.http.BatchHttpRequest._execute" class="py-name" href="#" onclick="return doclink('link-245', '_execute', 'link-245');">_execute</a></tt><tt class="py-op">(</tt><tt id="link-246" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-246', 'http', 'link-25');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">)</tt> </tt>
-<a name="L1326"></a><tt class="py-lineno">1326</tt>  <tt class="py-line"> </tt>
-<a name="L1327"></a><tt class="py-lineno">1327</tt>  <tt class="py-line">    <tt class="py-comment"># Loop over all the requests and check for 401s. For each 401 request the</tt> </tt>
-<a name="L1328"></a><tt class="py-lineno">1328</tt>  <tt class="py-line">    <tt class="py-comment"># credentials should be refreshed and then sent again in a separate batch.</tt> </tt>
-<a name="L1329"></a><tt class="py-lineno">1329</tt>  <tt class="py-line">    <tt class="py-name">redo_requests</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L1330"></a><tt class="py-lineno">1330</tt>  <tt class="py-line">    <tt class="py-name">redo_order</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L1331"></a><tt class="py-lineno">1331</tt>  <tt class="py-line"> </tt>
-<a name="L1332"></a><tt class="py-lineno">1332</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">:</tt> </tt>
-<a name="L1333"></a><tt class="py-lineno">1333</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_responses</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
-<a name="L1334"></a><tt class="py-lineno">1334</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'status'</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'401'</tt><tt class="py-op">:</tt> </tt>
-<a name="L1335"></a><tt class="py-lineno">1335</tt>  <tt class="py-line">        <tt class="py-name">redo_order</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">)</tt> </tt>
-<a name="L1336"></a><tt class="py-lineno">1336</tt>  <tt class="py-line">        <tt id="link-247" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-247', 'request', 'link-26');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
-<a name="L1337"></a><tt class="py-lineno">1337</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-248" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._refresh_and_apply_credentials()=googleapiclient.http.BatchHttpRequest-class.html#_refresh_and_apply_credentials"><a title="googleapiclient.http.BatchHttpRequest._refresh_and_apply_credentials" class="py-name" href="#" onclick="return doclink('link-248', '_refresh_and_apply_credentials', 'link-248');">_refresh_and_apply_credentials</a></tt><tt class="py-op">(</tt><tt id="link-249" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-249', 'request', 'link-26');">request</a></tt><tt class="py-op">,</tt> <tt id="link-250" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-250', 'http', 'link-25');">http</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1338"></a><tt class="py-lineno">1338</tt>  <tt class="py-line">        <tt class="py-name">redo_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-251" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-251', 'request', 'link-26');">request</a></tt> </tt>
-<a name="L1339"></a><tt class="py-lineno">1339</tt>  <tt class="py-line"> </tt>
-<a name="L1340"></a><tt class="py-lineno">1340</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">redo_requests</tt><tt class="py-op">:</tt> </tt>
-<a name="L1341"></a><tt class="py-lineno">1341</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-252" class="py-name"><a title="googleapiclient.http.BatchHttpRequest._execute" class="py-name" href="#" onclick="return doclink('link-252', '_execute', 'link-245');">_execute</a></tt><tt class="py-op">(</tt><tt id="link-253" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-253', 'http', 'link-25');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">redo_order</tt><tt class="py-op">,</tt> <tt class="py-name">redo_requests</tt><tt class="py-op">)</tt> </tt>
-<a name="L1342"></a><tt class="py-lineno">1342</tt>  <tt class="py-line"> </tt>
-<a name="L1343"></a><tt class="py-lineno">1343</tt>  <tt class="py-line">    <tt class="py-comment"># Now process all callbacks that are erroring, and raise an exception for</tt> </tt>
-<a name="L1344"></a><tt class="py-lineno">1344</tt>  <tt class="py-line">    <tt class="py-comment"># ones that return a non-2xx response? Or add extra parameter to callback</tt> </tt>
-<a name="L1345"></a><tt class="py-lineno">1345</tt>  <tt class="py-line">    <tt class="py-comment"># that contains an HttpError?</tt> </tt>
-<a name="L1346"></a><tt class="py-lineno">1346</tt>  <tt class="py-line"> </tt>
-<a name="L1347"></a><tt class="py-lineno">1347</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">:</tt> </tt>
-<a name="L1348"></a><tt class="py-lineno">1348</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_responses</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
-<a name="L1349"></a><tt class="py-lineno">1349</tt>  <tt class="py-line"> </tt>
-<a name="L1350"></a><tt class="py-lineno">1350</tt>  <tt class="py-line">      <tt id="link-254" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-254', 'request', 'link-26');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
-<a name="L1351"></a><tt class="py-lineno">1351</tt>  <tt class="py-line">      <tt class="py-name">callback</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callbacks</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
-<a name="L1352"></a><tt class="py-lineno">1352</tt>  <tt class="py-line"> </tt>
-<a name="L1353"></a><tt class="py-lineno">1353</tt>  <tt class="py-line">      <tt id="link-255" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-255', 'response', 'link-235');">response</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1354"></a><tt class="py-lineno">1354</tt>  <tt class="py-line">      <tt class="py-name">exception</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1355"></a><tt class="py-lineno">1355</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1356"></a><tt class="py-lineno">1356</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">300</tt><tt class="py-op">:</tt> </tt>
-<a name="L1357"></a><tt class="py-lineno">1357</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-256" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-256', 'HttpError', 'link-7');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt id="link-257" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-257', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
-<a name="L1358"></a><tt class="py-lineno">1358</tt>  <tt class="py-line">        <tt id="link-258" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-258', 'response', 'link-235');">response</a></tt> <tt class="py-op">=</tt> <tt id="link-259" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-259', 'request', 'link-26');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L1359"></a><tt class="py-lineno">1359</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt id="link-260" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-260', 'HttpError', 'link-7');">HttpError</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
-<a name="L1360"></a><tt class="py-lineno">1360</tt>  <tt class="py-line">        <tt class="py-name">exception</tt> <tt class="py-op">=</tt> <tt class="py-name">e</tt> </tt>
-<a name="L1361"></a><tt class="py-lineno">1361</tt>  <tt class="py-line"> </tt>
-<a name="L1362"></a><tt class="py-lineno">1362</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">callback</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1363"></a><tt class="py-lineno">1363</tt>  <tt class="py-line">        <tt class="py-name">callback</tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">,</tt> <tt id="link-261" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-261', 'response', 'link-235');">response</a></tt><tt class="py-op">,</tt> <tt class="py-name">exception</tt><tt class="py-op">)</tt> </tt>
-<a name="L1364"></a><tt class="py-lineno">1364</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1365"></a><tt class="py-lineno">1365</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback</tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">,</tt> <tt id="link-262" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-262', 'response', 'link-235');">response</a></tt><tt class="py-op">,</tt> <tt class="py-name">exception</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L1366"></a><tt class="py-lineno">1366</tt>  <tt class="py-line"> </tt>
-<a name="HttpRequestMock"></a><div id="HttpRequestMock-def"><a name="L1367"></a><tt class="py-lineno">1367</tt>  <tt class="py-line"> </tt>
-<a name="L1368"></a><tt class="py-lineno">1368</tt> <a class="py-toggle" href="#" id="HttpRequestMock-toggle" onclick="return toggle('HttpRequestMock');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequestMock-class.html">HttpRequestMock</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequestMock-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HttpRequestMock-expanded"><a name="L1369"></a><tt class="py-lineno">1369</tt>  <tt class="py-line">  <tt class="py-docstring">"""Mock of HttpRequest.</tt> </tt>
-<a name="L1370"></a><tt class="py-lineno">1370</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1371"></a><tt class="py-lineno">1371</tt>  <tt class="py-line"><tt class="py-docstring">  Do not construct directly, instead use RequestMockBuilder.</tt> </tt>
-<a name="L1372"></a><tt class="py-lineno">1372</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L1373"></a><tt class="py-lineno">1373</tt>  <tt class="py-line"> </tt>
-<a name="HttpRequestMock.__init__"></a><div id="HttpRequestMock.__init__-def"><a name="L1374"></a><tt class="py-lineno">1374</tt> <a class="py-toggle" href="#" id="HttpRequestMock.__init__-toggle" onclick="return toggle('HttpRequestMock.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequestMock-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">,</tt> <tt class="py-param">postproc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequestMock.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequestMock.__init__-expanded"><a name="L1375"></a><tt class="py-lineno">1375</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for HttpRequestMock</tt> </tt>
-<a name="L1376"></a><tt class="py-lineno">1376</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1377"></a><tt class="py-lineno">1377</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1378"></a><tt class="py-lineno">1378</tt>  <tt class="py-line"><tt class="py-docstring">      resp: httplib2.Response, the response to emulate coming from the request</tt> </tt>
-<a name="L1379"></a><tt class="py-lineno">1379</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the response body</tt> </tt>
-<a name="L1380"></a><tt class="py-lineno">1380</tt>  <tt class="py-line"><tt class="py-docstring">      postproc: callable, the post processing function usually supplied by</tt> </tt>
-<a name="L1381"></a><tt class="py-lineno">1381</tt>  <tt class="py-line"><tt class="py-docstring">                the model class. See model.JsonModel.response() as an example.</tt> </tt>
-<a name="L1382"></a><tt class="py-lineno">1382</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1383"></a><tt class="py-lineno">1383</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt> </tt>
-<a name="L1384"></a><tt class="py-lineno">1384</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt> </tt>
-<a name="L1385"></a><tt class="py-lineno">1385</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt> <tt class="py-op">=</tt> <tt class="py-name">postproc</tt> </tt>
-<a name="L1386"></a><tt class="py-lineno">1386</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1387"></a><tt class="py-lineno">1387</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Response</tt><tt class="py-op">(</tt><tt class="py-op">{</tt><tt class="py-string">'status'</tt><tt class="py-op">:</tt> <tt class="py-number">200</tt><tt class="py-op">,</tt> <tt class="py-string">'reason'</tt><tt class="py-op">:</tt> <tt class="py-string">'OK'</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L1388"></a><tt class="py-lineno">1388</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'reason'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
-<a name="L1389"></a><tt class="py-lineno">1389</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'reason'</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L1390"></a><tt class="py-lineno">1390</tt>  <tt class="py-line"> </tt>
-<a name="HttpRequestMock.execute"></a><div id="HttpRequestMock.execute-def"><a name="L1391"></a><tt class="py-lineno">1391</tt> <a class="py-toggle" href="#" id="HttpRequestMock.execute-toggle" onclick="return toggle('HttpRequestMock.execute');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequestMock-class.html#execute">execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpRequestMock.execute-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequestMock.execute-expanded"><a name="L1392"></a><tt class="py-lineno">1392</tt>  <tt class="py-line">    <tt class="py-docstring">"""Execute the request.</tt> </tt>
-<a name="L1393"></a><tt class="py-lineno">1393</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1394"></a><tt class="py-lineno">1394</tt>  <tt class="py-line"><tt class="py-docstring">    Same behavior as HttpRequest.execute(), but the response is</tt> </tt>
-<a name="L1395"></a><tt class="py-lineno">1395</tt>  <tt class="py-line"><tt class="py-docstring">    mocked and not really from an HTTP request/response.</tt> </tt>
-<a name="L1396"></a><tt class="py-lineno">1396</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1397"></a><tt class="py-lineno">1397</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L1398"></a><tt class="py-lineno">1398</tt>  <tt class="py-line"> </tt>
-<a name="RequestMockBuilder"></a><div id="RequestMockBuilder-def"><a name="L1399"></a><tt class="py-lineno">1399</tt>  <tt class="py-line"> </tt>
-<a name="L1400"></a><tt class="py-lineno">1400</tt> <a class="py-toggle" href="#" id="RequestMockBuilder-toggle" onclick="return toggle('RequestMockBuilder');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.RequestMockBuilder-class.html">RequestMockBuilder</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="RequestMockBuilder-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RequestMockBuilder-expanded"><a name="L1401"></a><tt class="py-lineno">1401</tt>  <tt class="py-line">  <tt class="py-docstring">"""A simple mock of HttpRequest</tt> </tt>
-<a name="L1402"></a><tt class="py-lineno">1402</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1403"></a><tt class="py-lineno">1403</tt>  <tt class="py-line"><tt class="py-docstring">    Pass in a dictionary to the constructor that maps request methodIds to</tt> </tt>
-<a name="L1404"></a><tt class="py-lineno">1404</tt>  <tt class="py-line"><tt class="py-docstring">    tuples of (httplib2.Response, content, opt_expected_body) that should be</tt> </tt>
-<a name="L1405"></a><tt class="py-lineno">1405</tt>  <tt class="py-line"><tt class="py-docstring">    returned when that method is called. None may also be passed in for the</tt> </tt>
-<a name="L1406"></a><tt class="py-lineno">1406</tt>  <tt class="py-line"><tt class="py-docstring">    httplib2.Response, in which case a 200 OK response will be generated.</tt> </tt>
-<a name="L1407"></a><tt class="py-lineno">1407</tt>  <tt class="py-line"><tt class="py-docstring">    If an opt_expected_body (str or dict) is provided, it will be compared to</tt> </tt>
-<a name="L1408"></a><tt class="py-lineno">1408</tt>  <tt class="py-line"><tt class="py-docstring">    the body and UnexpectedBodyError will be raised on inequality.</tt> </tt>
-<a name="L1409"></a><tt class="py-lineno">1409</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1410"></a><tt class="py-lineno">1410</tt>  <tt class="py-line"><tt class="py-docstring">    Example:</tt> </tt>
-<a name="L1411"></a><tt class="py-lineno">1411</tt>  <tt class="py-line"><tt class="py-docstring">      response = '{"data": {"id": "tag:google.c...'</tt> </tt>
-<a name="L1412"></a><tt class="py-lineno">1412</tt>  <tt class="py-line"><tt class="py-docstring">      requestBuilder = RequestMockBuilder(</tt> </tt>
-<a name="L1413"></a><tt class="py-lineno">1413</tt>  <tt class="py-line"><tt class="py-docstring">        {</tt> </tt>
-<a name="L1414"></a><tt class="py-lineno">1414</tt>  <tt class="py-line"><tt class="py-docstring">          'plus.activities.get': (None, response),</tt> </tt>
-<a name="L1415"></a><tt class="py-lineno">1415</tt>  <tt class="py-line"><tt class="py-docstring">        }</tt> </tt>
-<a name="L1416"></a><tt class="py-lineno">1416</tt>  <tt class="py-line"><tt class="py-docstring">      )</tt> </tt>
-<a name="L1417"></a><tt class="py-lineno">1417</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.discovery.build("plus", "v1", requestBuilder=requestBuilder)</tt> </tt>
-<a name="L1418"></a><tt class="py-lineno">1418</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1419"></a><tt class="py-lineno">1419</tt>  <tt class="py-line"><tt class="py-docstring">    Methods that you do not supply a response for will return a</tt> </tt>
-<a name="L1420"></a><tt class="py-lineno">1420</tt>  <tt class="py-line"><tt class="py-docstring">    200 OK with an empty string as the response content or raise an excpetion</tt> </tt>
-<a name="L1421"></a><tt class="py-lineno">1421</tt>  <tt class="py-line"><tt class="py-docstring">    if check_unexpected is set to True. The methodId is taken from the rpcName</tt> </tt>
-<a name="L1422"></a><tt class="py-lineno">1422</tt>  <tt class="py-line"><tt class="py-docstring">    in the discovery document.</tt> </tt>
-<a name="L1423"></a><tt class="py-lineno">1423</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1424"></a><tt class="py-lineno">1424</tt>  <tt class="py-line"><tt class="py-docstring">    For more details see the project wiki.</tt> </tt>
-<a name="L1425"></a><tt class="py-lineno">1425</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L1426"></a><tt class="py-lineno">1426</tt>  <tt class="py-line"> </tt>
-<a name="RequestMockBuilder.__init__"></a><div id="RequestMockBuilder.__init__-def"><a name="L1427"></a><tt class="py-lineno">1427</tt> <a class="py-toggle" href="#" id="RequestMockBuilder.__init__-toggle" onclick="return toggle('RequestMockBuilder.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.RequestMockBuilder-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">responses</tt><tt class="py-op">,</tt> <tt class="py-param">check_unexpected</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="RequestMockBuilder.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="RequestMockBuilder.__init__-expanded"><a name="L1428"></a><tt class="py-lineno">1428</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for RequestMockBuilder</tt> </tt>
-<a name="L1429"></a><tt class="py-lineno">1429</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1430"></a><tt class="py-lineno">1430</tt>  <tt class="py-line"><tt class="py-docstring">    The constructed object should be a callable object</tt> </tt>
-<a name="L1431"></a><tt class="py-lineno">1431</tt>  <tt class="py-line"><tt class="py-docstring">    that can replace the class HttpResponse.</tt> </tt>
-<a name="L1432"></a><tt class="py-lineno">1432</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1433"></a><tt class="py-lineno">1433</tt>  <tt class="py-line"><tt class="py-docstring">    responses - A dictionary that maps methodIds into tuples</tt> </tt>
-<a name="L1434"></a><tt class="py-lineno">1434</tt>  <tt class="py-line"><tt class="py-docstring">                of (httplib2.Response, content). The methodId</tt> </tt>
-<a name="L1435"></a><tt class="py-lineno">1435</tt>  <tt class="py-line"><tt class="py-docstring">                comes from the 'rpcName' field in the discovery</tt> </tt>
-<a name="L1436"></a><tt class="py-lineno">1436</tt>  <tt class="py-line"><tt class="py-docstring">                document.</tt> </tt>
-<a name="L1437"></a><tt class="py-lineno">1437</tt>  <tt class="py-line"><tt class="py-docstring">    check_unexpected - A boolean setting whether or not UnexpectedMethodError</tt> </tt>
-<a name="L1438"></a><tt class="py-lineno">1438</tt>  <tt class="py-line"><tt class="py-docstring">                       should be raised on unsupplied method.</tt> </tt>
-<a name="L1439"></a><tt class="py-lineno">1439</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1440"></a><tt class="py-lineno">1440</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">responses</tt> <tt class="py-op">=</tt> <tt class="py-name">responses</tt> </tt>
-<a name="L1441"></a><tt class="py-lineno">1441</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">check_unexpected</tt> <tt class="py-op">=</tt> <tt class="py-name">check_unexpected</tt> </tt>
-</div><a name="L1442"></a><tt class="py-lineno">1442</tt>  <tt class="py-line"> </tt>
-<a name="RequestMockBuilder.__call__"></a><div id="RequestMockBuilder.__call__-def"><a name="L1443"></a><tt class="py-lineno">1443</tt> <a class="py-toggle" href="#" id="RequestMockBuilder.__call__-toggle" onclick="return toggle('RequestMockBuilder.__call__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.RequestMockBuilder-class.html#__call__">__call__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">postproc</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1444"></a><tt class="py-lineno">1444</tt>  <tt class="py-line">               <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">methodId</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="RequestMockBuilder.__call__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="RequestMockBuilder.__call__-expanded"><a name="L1445"></a><tt class="py-lineno">1445</tt>  <tt class="py-line">    <tt class="py-docstring">"""Implements the callable interface that discovery.build() expects</tt> </tt>
-<a name="L1446"></a><tt class="py-lineno">1446</tt>  <tt class="py-line"><tt class="py-docstring">    of requestBuilder, which is to build an object compatible with</tt> </tt>
-<a name="L1447"></a><tt class="py-lineno">1447</tt>  <tt class="py-line"><tt class="py-docstring">    HttpRequest.execute(). See that method for the description of the</tt> </tt>
-<a name="L1448"></a><tt class="py-lineno">1448</tt>  <tt class="py-line"><tt class="py-docstring">    parameters and the expected response.</tt> </tt>
-<a name="L1449"></a><tt class="py-lineno">1449</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1450"></a><tt class="py-lineno">1450</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">responses</tt><tt class="py-op">:</tt> </tt>
-<a name="L1451"></a><tt class="py-lineno">1451</tt>  <tt class="py-line">      <tt id="link-263" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-263', 'response', 'link-235');">response</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">responses</tt><tt class="py-op">[</tt><tt class="py-name">methodId</tt><tt class="py-op">]</tt> </tt>
-<a name="L1452"></a><tt class="py-lineno">1452</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-264" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-264', 'response', 'link-235');">response</a></tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
-<a name="L1453"></a><tt class="py-lineno">1453</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-265" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-265', 'response', 'link-235');">response</a></tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
-<a name="L1454"></a><tt class="py-lineno">1454</tt>  <tt class="py-line">        <tt class="py-comment"># Test the body against the supplied expected_body.</tt> </tt>
-<a name="L1455"></a><tt class="py-lineno">1455</tt>  <tt class="py-line">        <tt class="py-name">expected_body</tt> <tt class="py-op">=</tt> <tt id="link-266" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-266', 'response', 'link-235');">response</a></tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
-<a name="L1456"></a><tt class="py-lineno">1456</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-name">bool</tt><tt class="py-op">(</tt><tt id="link-267" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-267', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1457"></a><tt class="py-lineno">1457</tt>  <tt class="py-line">          <tt class="py-comment"># Not expecting a body and provided one</tt> </tt>
-<a name="L1458"></a><tt class="py-lineno">1458</tt>  <tt class="py-line">          <tt class="py-comment"># or expecting a body and not provided one.</tt> </tt>
-<a name="L1459"></a><tt class="py-lineno">1459</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-268" class="py-name"><a title="googleapiclient.errors.UnexpectedBodyError" class="py-name" href="#" onclick="return doclink('link-268', 'UnexpectedBodyError', 'link-16');">UnexpectedBodyError</a></tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">,</tt> <tt id="link-269" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-269', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1460"></a><tt class="py-lineno">1460</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1461"></a><tt class="py-lineno">1461</tt>  <tt class="py-line">          <tt class="py-name">expected_body</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">)</tt> </tt>
-<a name="L1462"></a><tt class="py-lineno">1462</tt>  <tt class="py-line">        <tt id="link-270" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-270', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt id="link-271" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-271', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1463"></a><tt class="py-lineno">1463</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-272" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-272', 'body', 'link-58');">body</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">expected_body</tt><tt class="py-op">:</tt> </tt>
-<a name="L1464"></a><tt class="py-lineno">1464</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-273" class="py-name"><a title="googleapiclient.errors.UnexpectedBodyError" class="py-name" href="#" onclick="return doclink('link-273', 'UnexpectedBodyError', 'link-16');">UnexpectedBodyError</a></tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">,</tt> <tt id="link-274" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-274', 'body', 'link-58');">body</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1465"></a><tt class="py-lineno">1465</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-275" class="py-name" targets="Class googleapiclient.http.HttpRequestMock=googleapiclient.http.HttpRequestMock-class.html"><a title="googleapiclient.http.HttpRequestMock" class="py-name" href="#" onclick="return doclink('link-275', 'HttpRequestMock', 'link-275');">HttpRequestMock</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">postproc</tt><tt class="py-op">)</tt> </tt>
-<a name="L1466"></a><tt class="py-lineno">1466</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">check_unexpected</tt><tt class="py-op">:</tt> </tt>
-<a name="L1467"></a><tt class="py-lineno">1467</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-276" class="py-name"><a title="googleapiclient.errors.UnexpectedMethodError" class="py-name" href="#" onclick="return doclink('link-276', 'UnexpectedMethodError', 'link-19');">UnexpectedMethodError</a></tt><tt class="py-op">(</tt><tt class="py-name">methodId</tt><tt class="py-op">=</tt><tt class="py-name">methodId</tt><tt class="py-op">)</tt> </tt>
-<a name="L1468"></a><tt class="py-lineno">1468</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1469"></a><tt class="py-lineno">1469</tt>  <tt class="py-line">      <tt id="link-277" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-277', 'model', 'link-21');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-278" class="py-name"><a title="googleapiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-278', 'JsonModel', 'link-22');">JsonModel</a></tt><tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
-<a name="L1470"></a><tt class="py-lineno">1470</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-279" class="py-name"><a title="googleapiclient.http.HttpRequestMock" class="py-name" href="#" onclick="return doclink('link-279', 'HttpRequestMock', 'link-275');">HttpRequestMock</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-string">'{}'</tt><tt class="py-op">,</tt> <tt id="link-280" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-280', 'model', 'link-21');">model</a></tt><tt class="py-op">.</tt><tt id="link-281" class="py-name"><a title="googleapiclient.model.BaseModel.response
-googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-281', 'response', 'link-235');">response</a></tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L1471"></a><tt class="py-lineno">1471</tt>  <tt class="py-line"> </tt>
-<a name="HttpMock"></a><div id="HttpMock-def"><a name="L1472"></a><tt class="py-lineno">1472</tt>  <tt class="py-line"> </tt>
-<a name="L1473"></a><tt class="py-lineno">1473</tt> <a class="py-toggle" href="#" id="HttpMock-toggle" onclick="return toggle('HttpMock');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.HttpMock-class.html">HttpMock</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpMock-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HttpMock-expanded"><a name="L1474"></a><tt class="py-lineno">1474</tt>  <tt class="py-line">  <tt class="py-docstring">"""Mock of httplib2.Http"""</tt> </tt>
-<a name="L1475"></a><tt class="py-lineno">1475</tt>  <tt class="py-line"> </tt>
-<a name="HttpMock.__init__"></a><div id="HttpMock.__init__-def"><a name="L1476"></a><tt class="py-lineno">1476</tt> <a class="py-toggle" href="#" id="HttpMock.__init__-toggle" onclick="return toggle('HttpMock.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpMock-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpMock.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpMock.__init__-expanded"><a name="L1477"></a><tt class="py-lineno">1477</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
-<a name="L1478"></a><tt class="py-lineno">1478</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1479"></a><tt class="py-lineno">1479</tt>  <tt class="py-line"><tt class="py-docstring">      filename: string, absolute filename to read response from</tt> </tt>
-<a name="L1480"></a><tt class="py-lineno">1480</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, header to return with response</tt> </tt>
-<a name="L1481"></a><tt class="py-lineno">1481</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1482"></a><tt class="py-lineno">1482</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1483"></a><tt class="py-lineno">1483</tt>  <tt class="py-line">      <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'status'</tt><tt class="py-op">:</tt> <tt class="py-string">'200'</tt><tt class="py-op">}</tt> </tt>
-<a name="L1484"></a><tt class="py-lineno">1484</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">filename</tt><tt class="py-op">:</tt> </tt>
-<a name="L1485"></a><tt class="py-lineno">1485</tt>  <tt class="py-line">      <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-string">'rb'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1486"></a><tt class="py-lineno">1486</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-282" class="py-name"><a title="googleapiclient.http._StreamSlice.read" class="py-name" href="#" onclick="return doclink('link-282', 'read', 'link-39');">read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1487"></a><tt class="py-lineno">1487</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1488"></a><tt class="py-lineno">1488</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1489"></a><tt class="py-lineno">1489</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1490"></a><tt class="py-lineno">1490</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_headers</tt> <tt class="py-op">=</tt> <tt class="py-name">headers</tt> </tt>
-<a name="L1491"></a><tt class="py-lineno">1491</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1492"></a><tt class="py-lineno">1492</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1493"></a><tt class="py-lineno">1493</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1494"></a><tt class="py-lineno">1494</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-283" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-283', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1495"></a><tt class="py-lineno">1495</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-</div><a name="L1496"></a><tt class="py-lineno">1496</tt>  <tt class="py-line"> </tt>
-<a name="L1497"></a><tt class="py-lineno">1497</tt>  <tt class="py-line"> </tt>
-<a name="HttpMock.request"></a><div id="HttpMock.request-def"><a name="L1498"></a><tt class="py-lineno">1498</tt> <a class="py-toggle" href="#" id="HttpMock.request-toggle" onclick="return toggle('HttpMock.request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpMock-class.html#request">request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L1499"></a><tt class="py-lineno">1499</tt>  <tt class="py-line">              <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> </tt>
-<a name="L1500"></a><tt class="py-lineno">1500</tt>  <tt class="py-line">              <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1501"></a><tt class="py-lineno">1501</tt>  <tt class="py-line">              <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1502"></a><tt class="py-lineno">1502</tt>  <tt class="py-line">              <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> </tt>
-<a name="L1503"></a><tt class="py-lineno">1503</tt>  <tt class="py-line">              <tt class="py-param">connection_type</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpMock.request-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpMock.request-expanded"><a name="L1504"></a><tt class="py-lineno">1504</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
-<a name="L1505"></a><tt class="py-lineno">1505</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">method</tt> </tt>
-<a name="L1506"></a><tt class="py-lineno">1506</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-284" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-284', 'body', 'link-58');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-285" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-285', 'body', 'link-58');">body</a></tt> </tt>
-<a name="L1507"></a><tt class="py-lineno">1507</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">headers</tt> </tt>
-<a name="L1508"></a><tt class="py-lineno">1508</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Response</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_headers</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> </tt>
-</div></div><a name="L1509"></a><tt class="py-lineno">1509</tt>  <tt class="py-line"> </tt>
-<a name="HttpMockSequence"></a><div id="HttpMockSequence-def"><a name="L1510"></a><tt class="py-lineno">1510</tt>  <tt class="py-line"> </tt>
-<a name="L1511"></a><tt class="py-lineno">1511</tt> <a class="py-toggle" href="#" id="HttpMockSequence-toggle" onclick="return toggle('HttpMockSequence');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.HttpMockSequence-class.html">HttpMockSequence</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpMockSequence-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HttpMockSequence-expanded"><a name="L1512"></a><tt class="py-lineno">1512</tt>  <tt class="py-line">  <tt class="py-docstring">"""Mock of httplib2.Http</tt> </tt>
-<a name="L1513"></a><tt class="py-lineno">1513</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1514"></a><tt class="py-lineno">1514</tt>  <tt class="py-line"><tt class="py-docstring">  Mocks a sequence of calls to request returning different responses for each</tt> </tt>
-<a name="L1515"></a><tt class="py-lineno">1515</tt>  <tt class="py-line"><tt class="py-docstring">  call. Create an instance initialized with the desired response headers</tt> </tt>
-<a name="L1516"></a><tt class="py-lineno">1516</tt>  <tt class="py-line"><tt class="py-docstring">  and content and then use as if an httplib2.Http instance.</tt> </tt>
-<a name="L1517"></a><tt class="py-lineno">1517</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1518"></a><tt class="py-lineno">1518</tt>  <tt class="py-line"><tt class="py-docstring">    http = HttpMockSequence([</tt> </tt>
-<a name="L1519"></a><tt class="py-lineno">1519</tt>  <tt class="py-line"><tt class="py-docstring">      ({'status': '401'}, ''),</tt> </tt>
-<a name="L1520"></a><tt class="py-lineno">1520</tt>  <tt class="py-line"><tt class="py-docstring">      ({'status': '200'}, '{"access_token":"1/3w","expires_in":3600}'),</tt> </tt>
-<a name="L1521"></a><tt class="py-lineno">1521</tt>  <tt class="py-line"><tt class="py-docstring">      ({'status': '200'}, 'echo_request_headers'),</tt> </tt>
-<a name="L1522"></a><tt class="py-lineno">1522</tt>  <tt class="py-line"><tt class="py-docstring">      ])</tt> </tt>
-<a name="L1523"></a><tt class="py-lineno">1523</tt>  <tt class="py-line"><tt class="py-docstring">    resp, content = http.request("http://examples.com")</tt> </tt>
-<a name="L1524"></a><tt class="py-lineno">1524</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1525"></a><tt class="py-lineno">1525</tt>  <tt class="py-line"><tt class="py-docstring">  There are special values you can pass in for content to trigger</tt> </tt>
-<a name="L1526"></a><tt class="py-lineno">1526</tt>  <tt class="py-line"><tt class="py-docstring">  behavours that are helpful in testing.</tt> </tt>
-<a name="L1527"></a><tt class="py-lineno">1527</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1528"></a><tt class="py-lineno">1528</tt>  <tt class="py-line"><tt class="py-docstring">  'echo_request_headers' means return the request headers in the response body</tt> </tt>
-<a name="L1529"></a><tt class="py-lineno">1529</tt>  <tt class="py-line"><tt class="py-docstring">  'echo_request_headers_as_json' means return the request headers in</tt> </tt>
-<a name="L1530"></a><tt class="py-lineno">1530</tt>  <tt class="py-line"><tt class="py-docstring">     the response body</tt> </tt>
-<a name="L1531"></a><tt class="py-lineno">1531</tt>  <tt class="py-line"><tt class="py-docstring">  'echo_request_body' means return the request body in the response body</tt> </tt>
-<a name="L1532"></a><tt class="py-lineno">1532</tt>  <tt class="py-line"><tt class="py-docstring">  'echo_request_uri' means return the request uri in the response body</tt> </tt>
-<a name="L1533"></a><tt class="py-lineno">1533</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L1534"></a><tt class="py-lineno">1534</tt>  <tt class="py-line"> </tt>
-<a name="HttpMockSequence.__init__"></a><div id="HttpMockSequence.__init__-def"><a name="L1535"></a><tt class="py-lineno">1535</tt> <a class="py-toggle" href="#" id="HttpMockSequence.__init__-toggle" onclick="return toggle('HttpMockSequence.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpMockSequence-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">iterable</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpMockSequence.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpMockSequence.__init__-expanded"><a name="L1536"></a><tt class="py-lineno">1536</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
-<a name="L1537"></a><tt class="py-lineno">1537</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L1538"></a><tt class="py-lineno">1538</tt>  <tt class="py-line"><tt class="py-docstring">      iterable: iterable, a sequence of pairs of (headers, body)</tt> </tt>
-<a name="L1539"></a><tt class="py-lineno">1539</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L1540"></a><tt class="py-lineno">1540</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_iterable</tt> <tt class="py-op">=</tt> <tt class="py-name">iterable</tt> </tt>
-<a name="L1541"></a><tt class="py-lineno">1541</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">follow_redirects</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-</div><a name="L1542"></a><tt class="py-lineno">1542</tt>  <tt class="py-line"> </tt>
-<a name="HttpMockSequence.request"></a><div id="HttpMockSequence.request-def"><a name="L1543"></a><tt class="py-lineno">1543</tt> <a class="py-toggle" href="#" id="HttpMockSequence.request-toggle" onclick="return toggle('HttpMockSequence.request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpMockSequence-class.html#request">request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> </tt>
-<a name="L1544"></a><tt class="py-lineno">1544</tt>  <tt class="py-line">              <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> </tt>
-<a name="L1545"></a><tt class="py-lineno">1545</tt>  <tt class="py-line">              <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1546"></a><tt class="py-lineno">1546</tt>  <tt class="py-line">              <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1547"></a><tt class="py-lineno">1547</tt>  <tt class="py-line">              <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> </tt>
-<a name="L1548"></a><tt class="py-lineno">1548</tt>  <tt class="py-line">              <tt class="py-param">connection_type</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HttpMockSequence.request-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpMockSequence.request-expanded"><a name="L1549"></a><tt class="py-lineno">1549</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_iterable</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L1550"></a><tt class="py-lineno">1550</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">content</tt> <tt class="py-op">==</tt> <tt class="py-string">'echo_request_headers'</tt><tt class="py-op">:</tt> </tt>
-<a name="L1551"></a><tt class="py-lineno">1551</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">headers</tt> </tt>
-<a name="L1552"></a><tt class="py-lineno">1552</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">content</tt> <tt class="py-op">==</tt> <tt class="py-string">'echo_request_headers_as_json'</tt><tt class="py-op">:</tt> </tt>
-<a name="L1553"></a><tt class="py-lineno">1553</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
-<a name="L1554"></a><tt class="py-lineno">1554</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">content</tt> <tt class="py-op">==</tt> <tt class="py-string">'echo_request_body'</tt><tt class="py-op">:</tt> </tt>
-<a name="L1555"></a><tt class="py-lineno">1555</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-286" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-286', 'body', 'link-58');">body</a></tt><tt class="py-op">,</tt> <tt class="py-string">'read'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1556"></a><tt class="py-lineno">1556</tt>  <tt class="py-line">        <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-287" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-287', 'body', 'link-58');">body</a></tt><tt class="py-op">.</tt><tt id="link-288" class="py-name"><a title="googleapiclient.http._StreamSlice.read" class="py-name" href="#" onclick="return doclink('link-288', 'read', 'link-39');">read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1557"></a><tt class="py-lineno">1557</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1558"></a><tt class="py-lineno">1558</tt>  <tt class="py-line">        <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-289" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-289', 'body', 'link-58');">body</a></tt> </tt>
-<a name="L1559"></a><tt class="py-lineno">1559</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">content</tt> <tt class="py-op">==</tt> <tt class="py-string">'echo_request_uri'</tt><tt class="py-op">:</tt> </tt>
-<a name="L1560"></a><tt class="py-lineno">1560</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
-<a name="L1561"></a><tt class="py-lineno">1561</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">text_type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1562"></a><tt class="py-lineno">1562</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1563"></a><tt class="py-lineno">1563</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Response</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
-</div></div><a name="L1564"></a><tt class="py-lineno">1564</tt>  <tt class="py-line"> </tt>
-<a name="set_user_agent"></a><div id="set_user_agent-def"><a name="L1565"></a><tt class="py-lineno">1565</tt>  <tt class="py-line"> </tt>
-<a name="L1566"></a><tt class="py-lineno">1566</tt> <a class="py-toggle" href="#" id="set_user_agent-toggle" onclick="return toggle('set_user_agent');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http-module.html#set_user_agent">set_user_agent</a><tt class="py-op">(</tt><tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">user_agent</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="set_user_agent-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="set_user_agent-expanded"><a name="L1567"></a><tt class="py-lineno">1567</tt>  <tt class="py-line">  <tt class="py-docstring">"""Set the user-agent on every request.</tt> </tt>
-<a name="L1568"></a><tt class="py-lineno">1568</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1569"></a><tt class="py-lineno">1569</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L1570"></a><tt class="py-lineno">1570</tt>  <tt class="py-line"><tt class="py-docstring">     http - An instance of httplib2.Http</tt> </tt>
-<a name="L1571"></a><tt class="py-lineno">1571</tt>  <tt class="py-line"><tt class="py-docstring">         or something that acts like it.</tt> </tt>
-<a name="L1572"></a><tt class="py-lineno">1572</tt>  <tt class="py-line"><tt class="py-docstring">     user_agent: string, the value for the user-agent header.</tt> </tt>
-<a name="L1573"></a><tt class="py-lineno">1573</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1574"></a><tt class="py-lineno">1574</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L1575"></a><tt class="py-lineno">1575</tt>  <tt class="py-line"><tt class="py-docstring">     A modified instance of http that was passed in.</tt> </tt>
-<a name="L1576"></a><tt class="py-lineno">1576</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1577"></a><tt class="py-lineno">1577</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
-<a name="L1578"></a><tt class="py-lineno">1578</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1579"></a><tt class="py-lineno">1579</tt>  <tt class="py-line"><tt class="py-docstring">    h = httplib2.Http()</tt> </tt>
-<a name="L1580"></a><tt class="py-lineno">1580</tt>  <tt class="py-line"><tt class="py-docstring">    h = set_user_agent(h, "my-app-name/6.0")</tt> </tt>
-<a name="L1581"></a><tt class="py-lineno">1581</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1582"></a><tt class="py-lineno">1582</tt>  <tt class="py-line"><tt class="py-docstring">  Most of the time the user-agent will be set doing auth, this is for the rare</tt> </tt>
-<a name="L1583"></a><tt class="py-lineno">1583</tt>  <tt class="py-line"><tt class="py-docstring">  cases where you are accessing an unauthenticated endpoint.</tt> </tt>
-<a name="L1584"></a><tt class="py-lineno">1584</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L1585"></a><tt class="py-lineno">1585</tt>  <tt class="py-line">  <tt class="py-name">request_orig</tt> <tt class="py-op">=</tt> <tt id="link-290" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-290', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-291" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-291', 'request', 'link-26');">request</a></tt> </tt>
-<a name="L1586"></a><tt class="py-lineno">1586</tt>  <tt class="py-line"> </tt>
-<a name="L1587"></a><tt class="py-lineno">1587</tt>  <tt class="py-line">  <tt class="py-comment"># The closure that will replace 'httplib2.Http.request'.</tt> </tt>
-<a name="L1588"></a><tt class="py-lineno">1588</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">new_request</tt><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1589"></a><tt class="py-lineno">1589</tt>  <tt class="py-line">                  <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">DEFAULT_MAX_REDIRECTS</tt><tt class="py-op">,</tt> </tt>
-<a name="L1590"></a><tt class="py-lineno">1590</tt>  <tt class="py-line">                  <tt class="py-param">connection_type</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1591"></a><tt class="py-lineno">1591</tt>  <tt class="py-line">    <tt class="py-docstring">"""Modify the request headers to add the user-agent."""</tt> </tt>
-<a name="L1592"></a><tt class="py-lineno">1592</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1593"></a><tt class="py-lineno">1593</tt>  <tt class="py-line">      <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L1594"></a><tt class="py-lineno">1594</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'user-agent'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
-<a name="L1595"></a><tt class="py-lineno">1595</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> </tt>
-<a name="L1596"></a><tt class="py-lineno">1596</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1597"></a><tt class="py-lineno">1597</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> </tt>
-<a name="L1598"></a><tt class="py-lineno">1598</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">request_orig</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt id="link-292" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-292', 'body', 'link-58');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
-<a name="L1599"></a><tt class="py-lineno">1599</tt>  <tt class="py-line">                        <tt class="py-name">redirections</tt><tt class="py-op">,</tt> <tt class="py-name">connection_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L1600"></a><tt class="py-lineno">1600</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
-</div><a name="L1601"></a><tt class="py-lineno">1601</tt>  <tt class="py-line"> </tt>
-<a name="L1602"></a><tt class="py-lineno">1602</tt>  <tt class="py-line">  <tt id="link-293" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-293', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-294" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-294', 'request', 'link-26');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_request</tt> </tt>
-<a name="L1603"></a><tt class="py-lineno">1603</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-295" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-295', 'http', 'link-25');">http</a></tt> </tt>
-</div><a name="L1604"></a><tt class="py-lineno">1604</tt>  <tt class="py-line"> </tt>
-<a name="tunnel_patch"></a><div id="tunnel_patch-def"><a name="L1605"></a><tt class="py-lineno">1605</tt>  <tt class="py-line"> </tt>
-<a name="L1606"></a><tt class="py-lineno">1606</tt> <a class="py-toggle" href="#" id="tunnel_patch-toggle" onclick="return toggle('tunnel_patch');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http-module.html#tunnel_patch">tunnel_patch</a><tt class="py-op">(</tt><tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="tunnel_patch-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="tunnel_patch-expanded"><a name="L1607"></a><tt class="py-lineno">1607</tt>  <tt class="py-line">  <tt class="py-docstring">"""Tunnel PATCH requests over POST.</tt> </tt>
-<a name="L1608"></a><tt class="py-lineno">1608</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L1609"></a><tt class="py-lineno">1609</tt>  <tt class="py-line"><tt class="py-docstring">     http - An instance of httplib2.Http</tt> </tt>
-<a name="L1610"></a><tt class="py-lineno">1610</tt>  <tt class="py-line"><tt class="py-docstring">         or something that acts like it.</tt> </tt>
-<a name="L1611"></a><tt class="py-lineno">1611</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1612"></a><tt class="py-lineno">1612</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L1613"></a><tt class="py-lineno">1613</tt>  <tt class="py-line"><tt class="py-docstring">     A modified instance of http that was passed in.</tt> </tt>
-<a name="L1614"></a><tt class="py-lineno">1614</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1615"></a><tt class="py-lineno">1615</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
-<a name="L1616"></a><tt class="py-lineno">1616</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1617"></a><tt class="py-lineno">1617</tt>  <tt class="py-line"><tt class="py-docstring">    h = httplib2.Http()</tt> </tt>
-<a name="L1618"></a><tt class="py-lineno">1618</tt>  <tt class="py-line"><tt class="py-docstring">    h = tunnel_patch(h, "my-app-name/6.0")</tt> </tt>
-<a name="L1619"></a><tt class="py-lineno">1619</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1620"></a><tt class="py-lineno">1620</tt>  <tt class="py-line"><tt class="py-docstring">  Useful if you are running on a platform that doesn't support PATCH.</tt> </tt>
-<a name="L1621"></a><tt class="py-lineno">1621</tt>  <tt class="py-line"><tt class="py-docstring">  Apply this last if you are using OAuth 1.0, as changing the method</tt> </tt>
-<a name="L1622"></a><tt class="py-lineno">1622</tt>  <tt class="py-line"><tt class="py-docstring">  will result in a different signature.</tt> </tt>
-<a name="L1623"></a><tt class="py-lineno">1623</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L1624"></a><tt class="py-lineno">1624</tt>  <tt class="py-line">  <tt class="py-name">request_orig</tt> <tt class="py-op">=</tt> <tt id="link-296" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-296', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-297" class="py-name"><a title="googleapiclient.http.HttpMock.request
-googleapiclient.http.HttpMockSequence.request
-googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-297', 'request', 'link-26');">request</a></tt> </tt>
-<a name="L1625"></a><tt class="py-lineno">1625</tt>  <tt class="py-line"> </tt>
-<a name="L1626"></a><tt class="py-lineno">1626</tt>  <tt class="py-line">  <tt class="py-comment"># The closure that will replace 'httplib2.Http.request'.</tt> </tt>
-<a name="L1627"></a><tt class="py-lineno">1627</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">new_request</tt><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L1628"></a><tt class="py-lineno">1628</tt>  <tt class="py-line">                  <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">DEFAULT_MAX_REDIRECTS</tt><tt class="py-op">,</tt> </tt>
-<a name="L1629"></a><tt class="py-lineno">1629</tt>  <tt class="py-line">                  <tt class="py-param">connection_type</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1630"></a><tt class="py-lineno">1630</tt>  <tt class="py-line">    <tt class="py-docstring">"""Modify the request headers to add the user-agent."""</tt> </tt>
-<a name="L1631"></a><tt class="py-lineno">1631</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1632"></a><tt class="py-lineno">1632</tt>  <tt class="py-line">      <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L1633"></a><tt class="py-lineno">1633</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">method</tt> <tt class="py-op">==</tt> <tt class="py-string">'PATCH'</tt><tt class="py-op">:</tt> </tt>
-<a name="L1634"></a><tt class="py-lineno">1634</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'oauth_token'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">.</tt><tt id="link-298" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-209', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">.</tt><tt id="link-210" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-298', 'get', 'link-87');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'authorization'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1635"></a><tt class="py-lineno">1635</tt>  <tt class="py-line">        <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt> </tt>
-<a name="L1636"></a><tt class="py-lineno">1636</tt>  <tt class="py-line">            <tt class="py-string">'OAuth 1.0 request made with Credentials after tunnel_patch.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1637"></a><tt class="py-lineno">1637</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'x-http-method-override'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">"PATCH"</tt> </tt>
-<a name="L1638"></a><tt class="py-lineno">1638</tt>  <tt class="py-line">      <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-string">'POST'</tt> </tt>
-<a name="L1639"></a><tt class="py-lineno">1639</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">request_orig</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt id="link-299" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-299', 'body', 'link-58');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
-<a name="L1640"></a><tt class="py-lineno">1640</tt>  <tt class="py-line">                        <tt class="py-name">redirections</tt><tt class="py-op">,</tt> <tt class="py-name">connection_type</tt><tt class="py-op">)</tt> </tt>
-<a name="L1641"></a><tt class="py-lineno">1641</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
-</div><a name="L1642"></a><tt class="py-lineno">1642</tt>  <tt class="py-line"> </tt>
-<a name="L1643"></a><tt class="py-lineno">1643</tt>  <tt class="py-line">  <tt id="link-300" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-300', 'http', 'link-25');">http</a></tt><tt class="py-op">.</tt><tt id="link-301" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-210', 'get', 'link-36');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'content-type'</tt><tt class="py-op">,</tt> <tt class="py-string">'application/json'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1187"></a><tt class="py-lineno">1187</tt>  <tt class="py-line">    <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-name">major</tt><tt class="py-op">,</tt> <tt class="py-name">minor</tt><tt class="py-op">)</tt> </tt>
+<a name="L1188"></a><tt class="py-lineno">1188</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt id="link-211" class="py-name"><a title="googleapiclient.http.HttpMock.request
 googleapiclient.http.HttpMockSequence.request
 googleapiclient.model.BaseModel.request
-googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-301', 'request', 'link-26');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_request</tt> </tt>
-<a name="L1644"></a><tt class="py-lineno">1644</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-302" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-302', 'http', 'link-25');">http</a></tt> </tt>
-</div><a name="L1645"></a><tt class="py-lineno">1645</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-211', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">headers</tt><tt class="py-op">.</tt><tt class="py-name">copy</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1189"></a><tt class="py-lineno">1189</tt>  <tt class="py-line"> </tt>
+<a name="L1190"></a><tt class="py-lineno">1190</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-212" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-212', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-213" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-213', 'http', 'link-33');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt> <tt class="py-keyword">and</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-214" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-214', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-215" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-215', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-216" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-216', 'request', 'link-34');">request</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1191"></a><tt class="py-lineno">1191</tt>  <tt class="py-line">        <tt class="py-string">'credentials'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1192"></a><tt class="py-lineno">1192</tt>  <tt class="py-line">      <tt id="link-217" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-217', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-218" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-218', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-219" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-219', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">credentials</tt><tt class="py-op">.</tt><tt class="py-name">apply</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L1193"></a><tt class="py-lineno">1193</tt>  <tt class="py-line"> </tt>
+<a name="L1194"></a><tt class="py-lineno">1194</tt>  <tt class="py-line">    <tt class="py-comment"># MIMENonMultipart adds its own Content-Type header.</tt> </tt>
+<a name="L1195"></a><tt class="py-lineno">1195</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'content-type'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
+<a name="L1196"></a><tt class="py-lineno">1196</tt>  <tt class="py-line">      <tt class="py-keyword">del</tt> <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1197"></a><tt class="py-lineno">1197</tt>  <tt class="py-line"> </tt>
+<a name="L1198"></a><tt class="py-lineno">1198</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1199"></a><tt class="py-lineno">1199</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt> </tt>
+<a name="L1200"></a><tt class="py-lineno">1200</tt>  <tt class="py-line">    <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Host'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">parsed</tt><tt class="py-op">.</tt><tt class="py-name">netloc</tt> </tt>
+<a name="L1201"></a><tt class="py-lineno">1201</tt>  <tt class="py-line">    <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_unixfrom</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L1202"></a><tt class="py-lineno">1202</tt>  <tt class="py-line"> </tt>
+<a name="L1203"></a><tt class="py-lineno">1203</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-220" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-220', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-221" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-221', 'body', 'link-69');">body</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1204"></a><tt class="py-lineno">1204</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt id="link-222" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-222', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-223" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-223', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1205"></a><tt class="py-lineno">1205</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'content-length'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-224" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-224', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-225" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-225', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1206"></a><tt class="py-lineno">1206</tt>  <tt class="py-line"> </tt>
+<a name="L1207"></a><tt class="py-lineno">1207</tt>  <tt class="py-line">    <tt class="py-comment"># Serialize the mime message.</tt> </tt>
+<a name="L1208"></a><tt class="py-lineno">1208</tt>  <tt class="py-line">    <tt class="py-name">fp</tt> <tt class="py-op">=</tt> <tt class="py-name">StringIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1209"></a><tt class="py-lineno">1209</tt>  <tt class="py-line">    <tt class="py-comment"># maxheaderlen=0 means don't line wrap headers.</tt> </tt>
+<a name="L1210"></a><tt class="py-lineno">1210</tt>  <tt class="py-line">    <tt class="py-name">g</tt> <tt class="py-op">=</tt> <tt class="py-name">Generator</tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">,</tt> <tt class="py-name">maxheaderlen</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L1211"></a><tt class="py-lineno">1211</tt>  <tt class="py-line">    <tt class="py-name">g</tt><tt class="py-op">.</tt><tt class="py-name">flatten</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">,</tt> <tt class="py-name">unixfrom</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L1212"></a><tt class="py-lineno">1212</tt>  <tt class="py-line">    <tt id="link-226" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-226', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">fp</tt><tt class="py-op">.</tt><tt class="py-name">getvalue</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1213"></a><tt class="py-lineno">1213</tt>  <tt class="py-line"> </tt>
+<a name="L1214"></a><tt class="py-lineno">1214</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">status_line</tt> <tt class="py-op">+</tt> <tt id="link-227" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-227', 'body', 'link-69');">body</a></tt> </tt>
+</div><a name="L1215"></a><tt class="py-lineno">1215</tt>  <tt class="py-line"> </tt>
+<a name="BatchHttpRequest._deserialize_response"></a><div id="BatchHttpRequest._deserialize_response-def"><a name="L1216"></a><tt class="py-lineno">1216</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._deserialize_response-toggle" onclick="return toggle('BatchHttpRequest._deserialize_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_deserialize_response">_deserialize_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">payload</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest._deserialize_response-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._deserialize_response-expanded"><a name="L1217"></a><tt class="py-lineno">1217</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert string into httplib2 response and content.</tt> </tt>
+<a name="L1218"></a><tt class="py-lineno">1218</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1219"></a><tt class="py-lineno">1219</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1220"></a><tt class="py-lineno">1220</tt>  <tt class="py-line"><tt class="py-docstring">      payload: string, headers and body as a string.</tt> </tt>
+<a name="L1221"></a><tt class="py-lineno">1221</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1222"></a><tt class="py-lineno">1222</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L1223"></a><tt class="py-lineno">1223</tt>  <tt class="py-line"><tt class="py-docstring">      A pair (resp, content), such as would be returned from httplib2.request.</tt> </tt>
+<a name="L1224"></a><tt class="py-lineno">1224</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1225"></a><tt class="py-lineno">1225</tt>  <tt class="py-line">    <tt class="py-comment"># Strip off the status line</tt> </tt>
+<a name="L1226"></a><tt class="py-lineno">1226</tt>  <tt class="py-line">    <tt class="py-name">status_line</tt><tt class="py-op">,</tt> <tt class="py-name">payload</tt> <tt class="py-op">=</tt> <tt class="py-name">payload</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\n'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="L1227"></a><tt class="py-lineno">1227</tt>  <tt class="py-line">    <tt class="py-name">protocol</tt><tt class="py-op">,</tt> <tt class="py-name">status</tt><tt class="py-op">,</tt> <tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">status_line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">' '</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="L1228"></a><tt class="py-lineno">1228</tt>  <tt class="py-line"> </tt>
+<a name="L1229"></a><tt class="py-lineno">1229</tt>  <tt class="py-line">    <tt class="py-comment"># Parse the rest of the response</tt> </tt>
+<a name="L1230"></a><tt class="py-lineno">1230</tt>  <tt class="py-line">    <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">FeedParser</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1231"></a><tt class="py-lineno">1231</tt>  <tt class="py-line">    <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">feed</tt><tt class="py-op">(</tt><tt class="py-name">payload</tt><tt class="py-op">)</tt> </tt>
+<a name="L1232"></a><tt class="py-lineno">1232</tt>  <tt class="py-line">    <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1233"></a><tt class="py-lineno">1233</tt>  <tt class="py-line">    <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'status'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">status</tt> </tt>
+<a name="L1234"></a><tt class="py-lineno">1234</tt>  <tt class="py-line"> </tt>
+<a name="L1235"></a><tt class="py-lineno">1235</tt>  <tt class="py-line">    <tt class="py-comment"># Create httplib2.Response from the parsed headers.</tt> </tt>
+<a name="L1236"></a><tt class="py-lineno">1236</tt>  <tt class="py-line">    <tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Response</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L1237"></a><tt class="py-lineno">1237</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">reason</tt> </tt>
+<a name="L1238"></a><tt class="py-lineno">1238</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">version</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">protocol</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1239"></a><tt class="py-lineno">1239</tt>  <tt class="py-line"> </tt>
+<a name="L1240"></a><tt class="py-lineno">1240</tt>  <tt class="py-line">    <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">payload</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'\r\n\r\n'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
+<a name="L1241"></a><tt class="py-lineno">1241</tt>  <tt class="py-line"> </tt>
+<a name="L1242"></a><tt class="py-lineno">1242</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
+</div><a name="L1243"></a><tt class="py-lineno">1243</tt>  <tt class="py-line"> </tt>
+<a name="BatchHttpRequest._new_id"></a><div id="BatchHttpRequest._new_id-def"><a name="L1244"></a><tt class="py-lineno">1244</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._new_id-toggle" onclick="return toggle('BatchHttpRequest._new_id');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_new_id">_new_id</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest._new_id-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._new_id-expanded"><a name="L1245"></a><tt class="py-lineno">1245</tt>  <tt class="py-line">    <tt class="py-docstring">"""Create a new id.</tt> </tt>
+<a name="L1246"></a><tt class="py-lineno">1246</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1247"></a><tt class="py-lineno">1247</tt>  <tt class="py-line"><tt class="py-docstring">    Auto incrementing number that avoids conflicts with ids already used.</tt> </tt>
+<a name="L1248"></a><tt class="py-lineno">1248</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1249"></a><tt class="py-lineno">1249</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L1250"></a><tt class="py-lineno">1250</tt>  <tt class="py-line"><tt class="py-docstring">       string, a new unique id.</tt> </tt>
+<a name="L1251"></a><tt class="py-lineno">1251</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1252"></a><tt class="py-lineno">1252</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L1253"></a><tt class="py-lineno">1253</tt>  <tt class="py-line">    <tt class="py-keyword">while</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">:</tt> </tt>
+<a name="L1254"></a><tt class="py-lineno">1254</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
+<a name="L1255"></a><tt class="py-lineno">1255</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_last_auto_id</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1256"></a><tt class="py-lineno">1256</tt>  <tt class="py-line"> </tt>
+<a name="L1257"></a><tt class="py-lineno">1257</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">2</tt><tt class="py-op">)</tt> </tt>
+<a name="BatchHttpRequest.add"></a><div id="BatchHttpRequest.add-def"><a name="L1258"></a><tt class="py-lineno">1258</tt> <a class="py-toggle" href="#" id="BatchHttpRequest.add-toggle" onclick="return toggle('BatchHttpRequest.add');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#add">add</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">request</tt><tt class="py-op">,</tt> <tt class="py-param">callback</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">request_id</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest.add-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest.add-expanded"><a name="L1259"></a><tt class="py-lineno">1259</tt>  <tt class="py-line">    <tt class="py-docstring">"""Add a new request.</tt> </tt>
+<a name="L1260"></a><tt class="py-lineno">1260</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1261"></a><tt class="py-lineno">1261</tt>  <tt class="py-line"><tt class="py-docstring">    Every callback added will be paired with a unique id, the request_id. That</tt> </tt>
+<a name="L1262"></a><tt class="py-lineno">1262</tt>  <tt class="py-line"><tt class="py-docstring">    unique id will be passed back to the callback when the response comes back</tt> </tt>
+<a name="L1263"></a><tt class="py-lineno">1263</tt>  <tt class="py-line"><tt class="py-docstring">    from the server. The default behavior is to have the library generate it's</tt> </tt>
+<a name="L1264"></a><tt class="py-lineno">1264</tt>  <tt class="py-line"><tt class="py-docstring">    own unique id. If the caller passes in a request_id then they must ensure</tt> </tt>
+<a name="L1265"></a><tt class="py-lineno">1265</tt>  <tt class="py-line"><tt class="py-docstring">    uniqueness for each request_id, and if they are not an exception is</tt> </tt>
+<a name="L1266"></a><tt class="py-lineno">1266</tt>  <tt class="py-line"><tt class="py-docstring">    raised. Callers should either supply all request_ids or nevery supply a</tt> </tt>
+<a name="L1267"></a><tt class="py-lineno">1267</tt>  <tt class="py-line"><tt class="py-docstring">    request id, to avoid such an error.</tt> </tt>
+<a name="L1268"></a><tt class="py-lineno">1268</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1269"></a><tt class="py-lineno">1269</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1270"></a><tt class="py-lineno">1270</tt>  <tt class="py-line"><tt class="py-docstring">      request: HttpRequest, Request to add to the batch.</tt> </tt>
+<a name="L1271"></a><tt class="py-lineno">1271</tt>  <tt class="py-line"><tt class="py-docstring">      callback: callable, A callback to be called for this response, of the</tt> </tt>
+<a name="L1272"></a><tt class="py-lineno">1272</tt>  <tt class="py-line"><tt class="py-docstring">        form callback(id, response, exception). The first parameter is the</tt> </tt>
+<a name="L1273"></a><tt class="py-lineno">1273</tt>  <tt class="py-line"><tt class="py-docstring">        request id, and the second is the deserialized response object. The</tt> </tt>
+<a name="L1274"></a><tt class="py-lineno">1274</tt>  <tt class="py-line"><tt class="py-docstring">        third is an googleapiclient.errors.HttpError exception object if an HTTP error</tt> </tt>
+<a name="L1275"></a><tt class="py-lineno">1275</tt>  <tt class="py-line"><tt class="py-docstring">        occurred while processing the request, or None if no errors occurred.</tt> </tt>
+<a name="L1276"></a><tt class="py-lineno">1276</tt>  <tt class="py-line"><tt class="py-docstring">      request_id: string, A unique id for the request. The id will be passed to</tt> </tt>
+<a name="L1277"></a><tt class="py-lineno">1277</tt>  <tt class="py-line"><tt class="py-docstring">        the callback with the response.</tt> </tt>
+<a name="L1278"></a><tt class="py-lineno">1278</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1279"></a><tt class="py-lineno">1279</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L1280"></a><tt class="py-lineno">1280</tt>  <tt class="py-line"><tt class="py-docstring">      None</tt> </tt>
+<a name="L1281"></a><tt class="py-lineno">1281</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1282"></a><tt class="py-lineno">1282</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L1283"></a><tt class="py-lineno">1283</tt>  <tt class="py-line"><tt class="py-docstring">      BatchError if a media request is added to a batch.</tt> </tt>
+<a name="L1284"></a><tt class="py-lineno">1284</tt>  <tt class="py-line"><tt class="py-docstring">      KeyError is the request_id is not unique.</tt> </tt>
+<a name="L1285"></a><tt class="py-lineno">1285</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1286"></a><tt class="py-lineno">1286</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1287"></a><tt class="py-lineno">1287</tt>  <tt class="py-line">      <tt class="py-name">request_id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-228" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._new_id()=googleapiclient.http.BatchHttpRequest-class.html#_new_id"><a title="googleapiclient.http.BatchHttpRequest._new_id" class="py-name" href="#" onclick="return doclink('link-228', '_new_id', 'link-228');">_new_id</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1288"></a><tt class="py-lineno">1288</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-229" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-229', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-230" class="py-name"><a title="googleapiclient.http.MediaIoBaseUpload.resumable
+googleapiclient.http.MediaUpload.resumable" class="py-name" href="#" onclick="return doclink('link-230', 'resumable', 'link-49');">resumable</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1289"></a><tt class="py-lineno">1289</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-231" class="py-name"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-231', 'BatchError', 'link-6');">BatchError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Media requests cannot be used in a batch request."</tt><tt class="py-op">)</tt> </tt>
+<a name="L1290"></a><tt class="py-lineno">1290</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">:</tt> </tt>
+<a name="L1291"></a><tt class="py-lineno">1291</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">KeyError</tt><tt class="py-op">(</tt><tt class="py-string">"A request with this ID already exists: %s"</tt> <tt class="py-op">%</tt> <tt class="py-name">request_id</tt><tt class="py-op">)</tt> </tt>
+<a name="L1292"></a><tt class="py-lineno">1292</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-232" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-232', 'request', 'link-34');">request</a></tt> </tt>
+<a name="L1293"></a><tt class="py-lineno">1293</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callbacks</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">callback</tt> </tt>
+<a name="L1294"></a><tt class="py-lineno">1294</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1295"></a><tt class="py-lineno">1295</tt>  <tt class="py-line"> </tt>
+<a name="BatchHttpRequest._execute"></a><div id="BatchHttpRequest._execute-def"><a name="L1296"></a><tt class="py-lineno">1296</tt> <a class="py-toggle" href="#" id="BatchHttpRequest._execute-toggle" onclick="return toggle('BatchHttpRequest._execute');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#_execute">_execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">order</tt><tt class="py-op">,</tt> <tt class="py-param">requests</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest._execute-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest._execute-expanded"><a name="L1297"></a><tt class="py-lineno">1297</tt>  <tt class="py-line">    <tt class="py-docstring">"""Serialize batch request, send to server, process response.</tt> </tt>
+<a name="L1298"></a><tt class="py-lineno">1298</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1299"></a><tt class="py-lineno">1299</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1300"></a><tt class="py-lineno">1300</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used to make the request with.</tt> </tt>
+<a name="L1301"></a><tt class="py-lineno">1301</tt>  <tt class="py-line"><tt class="py-docstring">      order: list, list of request ids in the order they were added to the</tt> </tt>
+<a name="L1302"></a><tt class="py-lineno">1302</tt>  <tt class="py-line"><tt class="py-docstring">        batch.</tt> </tt>
+<a name="L1303"></a><tt class="py-lineno">1303</tt>  <tt class="py-line"><tt class="py-docstring">      request: list, list of request objects to send.</tt> </tt>
+<a name="L1304"></a><tt class="py-lineno">1304</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1305"></a><tt class="py-lineno">1305</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L1306"></a><tt class="py-lineno">1306</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
+<a name="L1307"></a><tt class="py-lineno">1307</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.BatchError if the response is the wrong format.</tt> </tt>
+<a name="L1308"></a><tt class="py-lineno">1308</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1309"></a><tt class="py-lineno">1309</tt>  <tt class="py-line">    <tt class="py-name">message</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMEMultipart</tt><tt class="py-op">(</tt><tt class="py-string">'mixed'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1310"></a><tt class="py-lineno">1310</tt>  <tt class="py-line">    <tt class="py-comment"># Message should not write out it's own headers.</tt> </tt>
+<a name="L1311"></a><tt class="py-lineno">1311</tt>  <tt class="py-line">    <tt class="py-name">setattr</tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">,</tt> <tt class="py-string">'_write_headers'</tt><tt class="py-op">,</tt> <tt class="py-keyword">lambda</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L1312"></a><tt class="py-lineno">1312</tt>  <tt class="py-line"> </tt>
+<a name="L1313"></a><tt class="py-lineno">1313</tt>  <tt class="py-line">    <tt class="py-comment"># Add all the individual requests.</tt> </tt>
+<a name="L1314"></a><tt class="py-lineno">1314</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">order</tt><tt class="py-op">:</tt> </tt>
+<a name="L1315"></a><tt class="py-lineno">1315</tt>  <tt class="py-line">      <tt id="link-233" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-233', 'request', 'link-34');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
+<a name="L1316"></a><tt class="py-lineno">1316</tt>  <tt class="py-line"> </tt>
+<a name="L1317"></a><tt class="py-lineno">1317</tt>  <tt class="py-line">      <tt class="py-name">msg</tt> <tt class="py-op">=</tt> <tt class="py-name">MIMENonMultipart</tt><tt class="py-op">(</tt><tt class="py-string">'application'</tt><tt class="py-op">,</tt> <tt class="py-string">'http'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1318"></a><tt class="py-lineno">1318</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Content-Transfer-Encoding'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'binary'</tt> </tt>
+<a name="L1319"></a><tt class="py-lineno">1319</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">[</tt><tt class="py-string">'Content-ID'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._id_to_header()=googleapiclient.http.BatchHttpRequest-class.html#_id_to_header"><a title="googleapiclient.http.BatchHttpRequest._id_to_header" class="py-name" href="#" onclick="return doclink('link-234', '_id_to_header', 'link-234');">_id_to_header</a></tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">)</tt> </tt>
+<a name="L1320"></a><tt class="py-lineno">1320</tt>  <tt class="py-line"> </tt>
+<a name="L1321"></a><tt class="py-lineno">1321</tt>  <tt class="py-line">      <tt id="link-235" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-235', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-236" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._serialize_request()=googleapiclient.http.BatchHttpRequest-class.html#_serialize_request"><a title="googleapiclient.http.BatchHttpRequest._serialize_request" class="py-name" href="#" onclick="return doclink('link-236', '_serialize_request', 'link-236');">_serialize_request</a></tt><tt class="py-op">(</tt><tt id="link-237" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-237', 'request', 'link-34');">request</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1322"></a><tt class="py-lineno">1322</tt>  <tt class="py-line">      <tt class="py-name">msg</tt><tt class="py-op">.</tt><tt class="py-name">set_payload</tt><tt class="py-op">(</tt><tt id="link-238" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-238', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1323"></a><tt class="py-lineno">1323</tt>  <tt class="py-line">      <tt class="py-name">message</tt><tt class="py-op">.</tt><tt class="py-name">attach</tt><tt class="py-op">(</tt><tt class="py-name">msg</tt><tt class="py-op">)</tt> </tt>
+<a name="L1324"></a><tt class="py-lineno">1324</tt>  <tt class="py-line"> </tt>
+<a name="L1325"></a><tt class="py-lineno">1325</tt>  <tt class="py-line">    <tt class="py-comment"># encode the body: note that we can't use `as_string`, because</tt> </tt>
+<a name="L1326"></a><tt class="py-lineno">1326</tt>  <tt class="py-line">    <tt class="py-comment"># it plays games with `From ` lines.</tt> </tt>
+<a name="L1327"></a><tt class="py-lineno">1327</tt>  <tt class="py-line">    <tt class="py-name">fp</tt> <tt class="py-op">=</tt> <tt class="py-name">StringIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1328"></a><tt class="py-lineno">1328</tt>  <tt class="py-line">    <tt class="py-name">g</tt> <tt class="py-op">=</tt> <tt class="py-name">Generator</tt><tt class="py-op">(</tt><tt class="py-name">fp</tt><tt class="py-op">,</tt> <tt class="py-name">mangle_from_</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L1329"></a><tt class="py-lineno">1329</tt>  <tt class="py-line">    <tt class="py-name">g</tt><tt class="py-op">.</tt><tt class="py-name">flatten</tt><tt class="py-op">(</tt><tt class="py-name">message</tt><tt class="py-op">,</tt> <tt class="py-name">unixfrom</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L1330"></a><tt class="py-lineno">1330</tt>  <tt class="py-line">    <tt id="link-239" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-239', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">fp</tt><tt class="py-op">.</tt><tt class="py-name">getvalue</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1331"></a><tt class="py-lineno">1331</tt>  <tt class="py-line"> </tt>
+<a name="L1332"></a><tt class="py-lineno">1332</tt>  <tt class="py-line">    <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1333"></a><tt class="py-lineno">1333</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'multipart/mixed; '</tt> </tt>
+<a name="L1334"></a><tt class="py-lineno">1334</tt>  <tt class="py-line">                               <tt class="py-string">'boundary="%s"'</tt><tt class="py-op">)</tt> <tt class="py-op">%</tt> <tt class="py-name">message</tt><tt class="py-op">.</tt><tt class="py-name">get_boundary</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1335"></a><tt class="py-lineno">1335</tt>  <tt class="py-line"> </tt>
+<a name="L1336"></a><tt class="py-lineno">1336</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-240" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-240', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-241" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-241', 'request', 'link-34');">request</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_batch_uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">=</tt><tt class="py-string">'POST'</tt><tt class="py-op">,</tt> <tt id="link-242" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-242', 'body', 'link-69');">body</a></tt><tt class="py-op">=</tt><tt id="link-243" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-243', 'body', 'link-69');">body</a></tt><tt class="py-op">,</tt> </tt>
+<a name="L1337"></a><tt class="py-lineno">1337</tt>  <tt class="py-line">                                 <tt class="py-name">headers</tt><tt class="py-op">=</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L1338"></a><tt class="py-lineno">1338</tt>  <tt class="py-line"> </tt>
+<a name="L1339"></a><tt class="py-lineno">1339</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">300</tt><tt class="py-op">:</tt> </tt>
+<a name="L1340"></a><tt class="py-lineno">1340</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-244" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-244', 'HttpError', 'link-9');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_batch_uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L1341"></a><tt class="py-lineno">1341</tt>  <tt class="py-line"> </tt>
+<a name="L1342"></a><tt class="py-lineno">1342</tt>  <tt class="py-line">    <tt class="py-comment"># Prepend with a content-type header so FeedParser can handle it.</tt> </tt>
+<a name="L1343"></a><tt class="py-lineno">1343</tt>  <tt class="py-line">    <tt class="py-name">header</tt> <tt class="py-op">=</tt> <tt class="py-string">'content-type: %s\r\n\r\n'</tt> <tt class="py-op">%</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1344"></a><tt class="py-lineno">1344</tt>  <tt class="py-line">    <tt class="py-comment"># PY3's FeedParser only accepts unicode. So we should decode content</tt> </tt>
+<a name="L1345"></a><tt class="py-lineno">1345</tt>  <tt class="py-line">    <tt class="py-comment"># here, and encode each payload again.</tt> </tt>
+<a name="L1346"></a><tt class="py-lineno">1346</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">PY3</tt><tt class="py-op">:</tt> </tt>
+<a name="L1347"></a><tt class="py-lineno">1347</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1348"></a><tt class="py-lineno">1348</tt>  <tt class="py-line">    <tt class="py-name">for_parser</tt> <tt class="py-op">=</tt> <tt class="py-name">header</tt> <tt class="py-op">+</tt> <tt class="py-name">content</tt> </tt>
+<a name="L1349"></a><tt class="py-lineno">1349</tt>  <tt class="py-line"> </tt>
+<a name="L1350"></a><tt class="py-lineno">1350</tt>  <tt class="py-line">    <tt class="py-name">parser</tt> <tt class="py-op">=</tt> <tt class="py-name">FeedParser</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1351"></a><tt class="py-lineno">1351</tt>  <tt class="py-line">    <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">feed</tt><tt class="py-op">(</tt><tt class="py-name">for_parser</tt><tt class="py-op">)</tt> </tt>
+<a name="L1352"></a><tt class="py-lineno">1352</tt>  <tt class="py-line">    <tt class="py-name">mime_response</tt> <tt class="py-op">=</tt> <tt class="py-name">parser</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1353"></a><tt class="py-lineno">1353</tt>  <tt class="py-line"> </tt>
+<a name="L1354"></a><tt class="py-lineno">1354</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">mime_response</tt><tt class="py-op">.</tt><tt class="py-name">is_multipart</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1355"></a><tt class="py-lineno">1355</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-245" class="py-name"><a title="googleapiclient.errors.BatchError" class="py-name" href="#" onclick="return doclink('link-245', 'BatchError', 'link-6');">BatchError</a></tt><tt class="py-op">(</tt><tt class="py-string">"Response not in multipart/mixed format."</tt><tt class="py-op">,</tt> <tt class="py-name">resp</tt><tt class="py-op">=</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> </tt>
+<a name="L1356"></a><tt class="py-lineno">1356</tt>  <tt class="py-line">                       <tt class="py-name">content</tt><tt class="py-op">=</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L1357"></a><tt class="py-lineno">1357</tt>  <tt class="py-line"> </tt>
+<a name="L1358"></a><tt class="py-lineno">1358</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">part</tt> <tt class="py-keyword">in</tt> <tt class="py-name">mime_response</tt><tt class="py-op">.</tt><tt class="py-name">get_payload</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1359"></a><tt class="py-lineno">1359</tt>  <tt class="py-line">      <tt class="py-name">request_id</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-246" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._header_to_id()=googleapiclient.http.BatchHttpRequest-class.html#_header_to_id"><a title="googleapiclient.http.BatchHttpRequest._header_to_id" class="py-name" href="#" onclick="return doclink('link-246', '_header_to_id', 'link-246');">_header_to_id</a></tt><tt class="py-op">(</tt><tt class="py-name">part</tt><tt class="py-op">[</tt><tt class="py-string">'Content-ID'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L1360"></a><tt class="py-lineno">1360</tt>  <tt class="py-line">      <tt id="link-247" class="py-name" targets="Method googleapiclient.model.BaseModel.response()=googleapiclient.model.BaseModel-class.html#response,Method googleapiclient.model.Model.response()=googleapiclient.model.Model-class.html#response"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-247', 'response', 'link-247');">response</a></tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-248" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._deserialize_response()=googleapiclient.http.BatchHttpRequest-class.html#_deserialize_response"><a title="googleapiclient.http.BatchHttpRequest._deserialize_response" class="py-name" href="#" onclick="return doclink('link-248', '_deserialize_response', 'link-248');">_deserialize_response</a></tt><tt class="py-op">(</tt><tt class="py-name">part</tt><tt class="py-op">.</tt><tt class="py-name">get_payload</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L1361"></a><tt class="py-lineno">1361</tt>  <tt class="py-line">      <tt class="py-comment"># We encode content here to emulate normal http response.</tt> </tt>
+<a name="L1362"></a><tt class="py-lineno">1362</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">text_type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1363"></a><tt class="py-lineno">1363</tt>  <tt class="py-line">        <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1364"></a><tt class="py-lineno">1364</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_responses</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-249" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-249', 'response', 'link-247');">response</a></tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L1365"></a><tt class="py-lineno">1365</tt>  <tt class="py-line"> </tt>
+<a name="L1366"></a><tt class="py-lineno">1366</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">util</tt><tt class="py-op">.</tt><tt class="py-name">positional</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
+<a name="BatchHttpRequest.execute"></a><div id="BatchHttpRequest.execute-def"><a name="L1367"></a><tt class="py-lineno">1367</tt> <a class="py-toggle" href="#" id="BatchHttpRequest.execute-toggle" onclick="return toggle('BatchHttpRequest.execute');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.BatchHttpRequest-class.html#execute">execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BatchHttpRequest.execute-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="BatchHttpRequest.execute-expanded"><a name="L1368"></a><tt class="py-lineno">1368</tt>  <tt class="py-line">    <tt class="py-docstring">"""Execute all the requests as a single batched HTTP request.</tt> </tt>
+<a name="L1369"></a><tt class="py-lineno">1369</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1370"></a><tt class="py-lineno">1370</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1371"></a><tt class="py-lineno">1371</tt>  <tt class="py-line"><tt class="py-docstring">      http: httplib2.Http, an http object to be used in place of the one the</tt> </tt>
+<a name="L1372"></a><tt class="py-lineno">1372</tt>  <tt class="py-line"><tt class="py-docstring">        HttpRequest request object was constructed with. If one isn't supplied</tt> </tt>
+<a name="L1373"></a><tt class="py-lineno">1373</tt>  <tt class="py-line"><tt class="py-docstring">        then use a http object from the requests in this batch.</tt> </tt>
+<a name="L1374"></a><tt class="py-lineno">1374</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1375"></a><tt class="py-lineno">1375</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L1376"></a><tt class="py-lineno">1376</tt>  <tt class="py-line"><tt class="py-docstring">      None</tt> </tt>
+<a name="L1377"></a><tt class="py-lineno">1377</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1378"></a><tt class="py-lineno">1378</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L1379"></a><tt class="py-lineno">1379</tt>  <tt class="py-line"><tt class="py-docstring">      httplib2.HttpLib2Error if a transport error has occured.</tt> </tt>
+<a name="L1380"></a><tt class="py-lineno">1380</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.BatchError if the response is the wrong format.</tt> </tt>
+<a name="L1381"></a><tt class="py-lineno">1381</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1382"></a><tt class="py-lineno">1382</tt>  <tt class="py-line">    <tt class="py-comment"># If we have no requests return</tt> </tt>
+<a name="L1383"></a><tt class="py-lineno">1383</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
+<a name="L1384"></a><tt class="py-lineno">1384</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1385"></a><tt class="py-lineno">1385</tt>  <tt class="py-line"> </tt>
+<a name="L1386"></a><tt class="py-lineno">1386</tt>  <tt class="py-line">    <tt class="py-comment"># If http is not supplied use the first valid one given in the requests.</tt> </tt>
+<a name="L1387"></a><tt class="py-lineno">1387</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-250" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-250', 'http', 'link-33');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1388"></a><tt class="py-lineno">1388</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">:</tt> </tt>
+<a name="L1389"></a><tt class="py-lineno">1389</tt>  <tt class="py-line">        <tt id="link-251" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-251', 'request', 'link-34');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
+<a name="L1390"></a><tt class="py-lineno">1390</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-252" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-252', 'request', 'link-34');">request</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1391"></a><tt class="py-lineno">1391</tt>  <tt class="py-line">          <tt id="link-253" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-253', 'http', 'link-33');">http</a></tt> <tt class="py-op">=</tt> <tt id="link-254" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-254', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt id="link-255" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-255', 'http', 'link-33');">http</a></tt> </tt>
+<a name="L1392"></a><tt class="py-lineno">1392</tt>  <tt class="py-line">          <tt class="py-keyword">break</tt> </tt>
+<a name="L1393"></a><tt class="py-lineno">1393</tt>  <tt class="py-line"> </tt>
+<a name="L1394"></a><tt class="py-lineno">1394</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-256" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-256', 'http', 'link-33');">http</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1395"></a><tt class="py-lineno">1395</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"Missing a valid http object."</tt><tt class="py-op">)</tt> </tt>
+<a name="L1396"></a><tt class="py-lineno">1396</tt>  <tt class="py-line"> </tt>
+<a name="L1397"></a><tt class="py-lineno">1397</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-257" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._execute()=googleapiclient.http.BatchHttpRequest-class.html#_execute"><a title="googleapiclient.http.BatchHttpRequest._execute" class="py-name" href="#" onclick="return doclink('link-257', '_execute', 'link-257');">_execute</a></tt><tt class="py-op">(</tt><tt id="link-258" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-258', 'http', 'link-33');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">)</tt> </tt>
+<a name="L1398"></a><tt class="py-lineno">1398</tt>  <tt class="py-line"> </tt>
+<a name="L1399"></a><tt class="py-lineno">1399</tt>  <tt class="py-line">    <tt class="py-comment"># Loop over all the requests and check for 401s. For each 401 request the</tt> </tt>
+<a name="L1400"></a><tt class="py-lineno">1400</tt>  <tt class="py-line">    <tt class="py-comment"># credentials should be refreshed and then sent again in a separate batch.</tt> </tt>
+<a name="L1401"></a><tt class="py-lineno">1401</tt>  <tt class="py-line">    <tt class="py-name">redo_requests</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1402"></a><tt class="py-lineno">1402</tt>  <tt class="py-line">    <tt class="py-name">redo_order</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L1403"></a><tt class="py-lineno">1403</tt>  <tt class="py-line"> </tt>
+<a name="L1404"></a><tt class="py-lineno">1404</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">:</tt> </tt>
+<a name="L1405"></a><tt class="py-lineno">1405</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_responses</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
+<a name="L1406"></a><tt class="py-lineno">1406</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'status'</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">'401'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1407"></a><tt class="py-lineno">1407</tt>  <tt class="py-line">        <tt class="py-name">redo_order</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">)</tt> </tt>
+<a name="L1408"></a><tt class="py-lineno">1408</tt>  <tt class="py-line">        <tt id="link-259" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-259', 'request', 'link-34');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
+<a name="L1409"></a><tt class="py-lineno">1409</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-260" class="py-name" targets="Method googleapiclient.http.BatchHttpRequest._refresh_and_apply_credentials()=googleapiclient.http.BatchHttpRequest-class.html#_refresh_and_apply_credentials"><a title="googleapiclient.http.BatchHttpRequest._refresh_and_apply_credentials" class="py-name" href="#" onclick="return doclink('link-260', '_refresh_and_apply_credentials', 'link-260');">_refresh_and_apply_credentials</a></tt><tt class="py-op">(</tt><tt id="link-261" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-261', 'request', 'link-34');">request</a></tt><tt class="py-op">,</tt> <tt id="link-262" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-262', 'http', 'link-33');">http</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1410"></a><tt class="py-lineno">1410</tt>  <tt class="py-line">        <tt class="py-name">redo_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-263" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-263', 'request', 'link-34');">request</a></tt> </tt>
+<a name="L1411"></a><tt class="py-lineno">1411</tt>  <tt class="py-line"> </tt>
+<a name="L1412"></a><tt class="py-lineno">1412</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">redo_requests</tt><tt class="py-op">:</tt> </tt>
+<a name="L1413"></a><tt class="py-lineno">1413</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-264" class="py-name"><a title="googleapiclient.http.BatchHttpRequest._execute" class="py-name" href="#" onclick="return doclink('link-264', '_execute', 'link-257');">_execute</a></tt><tt class="py-op">(</tt><tt id="link-265" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-265', 'http', 'link-33');">http</a></tt><tt class="py-op">,</tt> <tt class="py-name">redo_order</tt><tt class="py-op">,</tt> <tt class="py-name">redo_requests</tt><tt class="py-op">)</tt> </tt>
+<a name="L1414"></a><tt class="py-lineno">1414</tt>  <tt class="py-line"> </tt>
+<a name="L1415"></a><tt class="py-lineno">1415</tt>  <tt class="py-line">    <tt class="py-comment"># Now process all callbacks that are erroring, and raise an exception for</tt> </tt>
+<a name="L1416"></a><tt class="py-lineno">1416</tt>  <tt class="py-line">    <tt class="py-comment"># ones that return a non-2xx response? Or add extra parameter to callback</tt> </tt>
+<a name="L1417"></a><tt class="py-lineno">1417</tt>  <tt class="py-line">    <tt class="py-comment"># that contains an HttpError?</tt> </tt>
+<a name="L1418"></a><tt class="py-lineno">1418</tt>  <tt class="py-line"> </tt>
+<a name="L1419"></a><tt class="py-lineno">1419</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">request_id</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_order</tt><tt class="py-op">:</tt> </tt>
+<a name="L1420"></a><tt class="py-lineno">1420</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_responses</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
+<a name="L1421"></a><tt class="py-lineno">1421</tt>  <tt class="py-line"> </tt>
+<a name="L1422"></a><tt class="py-lineno">1422</tt>  <tt class="py-line">      <tt id="link-266" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-266', 'request', 'link-34');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_requests</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
+<a name="L1423"></a><tt class="py-lineno">1423</tt>  <tt class="py-line">      <tt class="py-name">callback</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callbacks</tt><tt class="py-op">[</tt><tt class="py-name">request_id</tt><tt class="py-op">]</tt> </tt>
+<a name="L1424"></a><tt class="py-lineno">1424</tt>  <tt class="py-line"> </tt>
+<a name="L1425"></a><tt class="py-lineno">1425</tt>  <tt class="py-line">      <tt id="link-267" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-267', 'response', 'link-247');">response</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1426"></a><tt class="py-lineno">1426</tt>  <tt class="py-line">      <tt class="py-name">exception</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1427"></a><tt class="py-lineno">1427</tt>  <tt class="py-line">      <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L1428"></a><tt class="py-lineno">1428</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">300</tt><tt class="py-op">:</tt> </tt>
+<a name="L1429"></a><tt class="py-lineno">1429</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-268" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-268', 'HttpError', 'link-9');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">uri</tt><tt class="py-op">=</tt><tt id="link-269" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-269', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">uri</tt><tt class="py-op">)</tt> </tt>
+<a name="L1430"></a><tt class="py-lineno">1430</tt>  <tt class="py-line">        <tt id="link-270" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-270', 'response', 'link-247');">response</a></tt> <tt class="py-op">=</tt> <tt id="link-271" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-271', 'request', 'link-34');">request</a></tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L1431"></a><tt class="py-lineno">1431</tt>  <tt class="py-line">      <tt class="py-keyword">except</tt> <tt id="link-272" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-272', 'HttpError', 'link-9');">HttpError</a></tt> <tt class="py-keyword">as</tt> <tt class="py-name">e</tt><tt class="py-op">:</tt> </tt>
+<a name="L1432"></a><tt class="py-lineno">1432</tt>  <tt class="py-line">        <tt class="py-name">exception</tt> <tt class="py-op">=</tt> <tt class="py-name">e</tt> </tt>
+<a name="L1433"></a><tt class="py-lineno">1433</tt>  <tt class="py-line"> </tt>
+<a name="L1434"></a><tt class="py-lineno">1434</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">callback</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1435"></a><tt class="py-lineno">1435</tt>  <tt class="py-line">        <tt class="py-name">callback</tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">,</tt> <tt id="link-273" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-273', 'response', 'link-247');">response</a></tt><tt class="py-op">,</tt> <tt class="py-name">exception</tt><tt class="py-op">)</tt> </tt>
+<a name="L1436"></a><tt class="py-lineno">1436</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1437"></a><tt class="py-lineno">1437</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_callback</tt><tt class="py-op">(</tt><tt class="py-name">request_id</tt><tt class="py-op">,</tt> <tt id="link-274" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-274', 'response', 'link-247');">response</a></tt><tt class="py-op">,</tt> <tt class="py-name">exception</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1438"></a><tt class="py-lineno">1438</tt>  <tt class="py-line"> </tt>
+<a name="HttpRequestMock"></a><div id="HttpRequestMock-def"><a name="L1439"></a><tt class="py-lineno">1439</tt>  <tt class="py-line"> </tt>
+<a name="L1440"></a><tt class="py-lineno">1440</tt> <a class="py-toggle" href="#" id="HttpRequestMock-toggle" onclick="return toggle('HttpRequestMock');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequestMock-class.html">HttpRequestMock</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequestMock-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HttpRequestMock-expanded"><a name="L1441"></a><tt class="py-lineno">1441</tt>  <tt class="py-line">  <tt class="py-docstring">"""Mock of HttpRequest.</tt> </tt>
+<a name="L1442"></a><tt class="py-lineno">1442</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1443"></a><tt class="py-lineno">1443</tt>  <tt class="py-line"><tt class="py-docstring">  Do not construct directly, instead use RequestMockBuilder.</tt> </tt>
+<a name="L1444"></a><tt class="py-lineno">1444</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1445"></a><tt class="py-lineno">1445</tt>  <tt class="py-line"> </tt>
+<a name="HttpRequestMock.__init__"></a><div id="HttpRequestMock.__init__-def"><a name="L1446"></a><tt class="py-lineno">1446</tt> <a class="py-toggle" href="#" id="HttpRequestMock.__init__-toggle" onclick="return toggle('HttpRequestMock.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequestMock-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">,</tt> <tt class="py-param">postproc</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequestMock.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequestMock.__init__-expanded"><a name="L1447"></a><tt class="py-lineno">1447</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for HttpRequestMock</tt> </tt>
+<a name="L1448"></a><tt class="py-lineno">1448</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1449"></a><tt class="py-lineno">1449</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1450"></a><tt class="py-lineno">1450</tt>  <tt class="py-line"><tt class="py-docstring">      resp: httplib2.Response, the response to emulate coming from the request</tt> </tt>
+<a name="L1451"></a><tt class="py-lineno">1451</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the response body</tt> </tt>
+<a name="L1452"></a><tt class="py-lineno">1452</tt>  <tt class="py-line"><tt class="py-docstring">      postproc: callable, the post processing function usually supplied by</tt> </tt>
+<a name="L1453"></a><tt class="py-lineno">1453</tt>  <tt class="py-line"><tt class="py-docstring">                the model class. See model.JsonModel.response() as an example.</tt> </tt>
+<a name="L1454"></a><tt class="py-lineno">1454</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1455"></a><tt class="py-lineno">1455</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">resp</tt> </tt>
+<a name="L1456"></a><tt class="py-lineno">1456</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt> </tt>
+<a name="L1457"></a><tt class="py-lineno">1457</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt> <tt class="py-op">=</tt> <tt class="py-name">postproc</tt> </tt>
+<a name="L1458"></a><tt class="py-lineno">1458</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1459"></a><tt class="py-lineno">1459</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt> <tt class="py-op">=</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Response</tt><tt class="py-op">(</tt><tt class="py-op">{</tt><tt class="py-string">'status'</tt><tt class="py-op">:</tt> <tt class="py-number">200</tt><tt class="py-op">,</tt> <tt class="py-string">'reason'</tt><tt class="py-op">:</tt> <tt class="py-string">'OK'</tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L1460"></a><tt class="py-lineno">1460</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'reason'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">:</tt> </tt>
+<a name="L1461"></a><tt class="py-lineno">1461</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">reason</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">[</tt><tt class="py-string">'reason'</tt><tt class="py-op">]</tt> </tt>
+</div><a name="L1462"></a><tt class="py-lineno">1462</tt>  <tt class="py-line"> </tt>
+<a name="HttpRequestMock.execute"></a><div id="HttpRequestMock.execute-def"><a name="L1463"></a><tt class="py-lineno">1463</tt> <a class="py-toggle" href="#" id="HttpRequestMock.execute-toggle" onclick="return toggle('HttpRequestMock.execute');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpRequestMock-class.html#execute">execute</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpRequestMock.execute-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpRequestMock.execute-expanded"><a name="L1464"></a><tt class="py-lineno">1464</tt>  <tt class="py-line">    <tt class="py-docstring">"""Execute the request.</tt> </tt>
+<a name="L1465"></a><tt class="py-lineno">1465</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1466"></a><tt class="py-lineno">1466</tt>  <tt class="py-line"><tt class="py-docstring">    Same behavior as HttpRequest.execute(), but the response is</tt> </tt>
+<a name="L1467"></a><tt class="py-lineno">1467</tt>  <tt class="py-line"><tt class="py-docstring">    mocked and not really from an HTTP request/response.</tt> </tt>
+<a name="L1468"></a><tt class="py-lineno">1468</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1469"></a><tt class="py-lineno">1469</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">postproc</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1470"></a><tt class="py-lineno">1470</tt>  <tt class="py-line"> </tt>
+<a name="RequestMockBuilder"></a><div id="RequestMockBuilder-def"><a name="L1471"></a><tt class="py-lineno">1471</tt>  <tt class="py-line"> </tt>
+<a name="L1472"></a><tt class="py-lineno">1472</tt> <a class="py-toggle" href="#" id="RequestMockBuilder-toggle" onclick="return toggle('RequestMockBuilder');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.RequestMockBuilder-class.html">RequestMockBuilder</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="RequestMockBuilder-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="RequestMockBuilder-expanded"><a name="L1473"></a><tt class="py-lineno">1473</tt>  <tt class="py-line">  <tt class="py-docstring">"""A simple mock of HttpRequest</tt> </tt>
+<a name="L1474"></a><tt class="py-lineno">1474</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1475"></a><tt class="py-lineno">1475</tt>  <tt class="py-line"><tt class="py-docstring">    Pass in a dictionary to the constructor that maps request methodIds to</tt> </tt>
+<a name="L1476"></a><tt class="py-lineno">1476</tt>  <tt class="py-line"><tt class="py-docstring">    tuples of (httplib2.Response, content, opt_expected_body) that should be</tt> </tt>
+<a name="L1477"></a><tt class="py-lineno">1477</tt>  <tt class="py-line"><tt class="py-docstring">    returned when that method is called. None may also be passed in for the</tt> </tt>
+<a name="L1478"></a><tt class="py-lineno">1478</tt>  <tt class="py-line"><tt class="py-docstring">    httplib2.Response, in which case a 200 OK response will be generated.</tt> </tt>
+<a name="L1479"></a><tt class="py-lineno">1479</tt>  <tt class="py-line"><tt class="py-docstring">    If an opt_expected_body (str or dict) is provided, it will be compared to</tt> </tt>
+<a name="L1480"></a><tt class="py-lineno">1480</tt>  <tt class="py-line"><tt class="py-docstring">    the body and UnexpectedBodyError will be raised on inequality.</tt> </tt>
+<a name="L1481"></a><tt class="py-lineno">1481</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1482"></a><tt class="py-lineno">1482</tt>  <tt class="py-line"><tt class="py-docstring">    Example:</tt> </tt>
+<a name="L1483"></a><tt class="py-lineno">1483</tt>  <tt class="py-line"><tt class="py-docstring">      response = '{"data": {"id": "tag:google.c...'</tt> </tt>
+<a name="L1484"></a><tt class="py-lineno">1484</tt>  <tt class="py-line"><tt class="py-docstring">      requestBuilder = RequestMockBuilder(</tt> </tt>
+<a name="L1485"></a><tt class="py-lineno">1485</tt>  <tt class="py-line"><tt class="py-docstring">        {</tt> </tt>
+<a name="L1486"></a><tt class="py-lineno">1486</tt>  <tt class="py-line"><tt class="py-docstring">          'plus.activities.get': (None, response),</tt> </tt>
+<a name="L1487"></a><tt class="py-lineno">1487</tt>  <tt class="py-line"><tt class="py-docstring">        }</tt> </tt>
+<a name="L1488"></a><tt class="py-lineno">1488</tt>  <tt class="py-line"><tt class="py-docstring">      )</tt> </tt>
+<a name="L1489"></a><tt class="py-lineno">1489</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.discovery.build("plus", "v1", requestBuilder=requestBuilder)</tt> </tt>
+<a name="L1490"></a><tt class="py-lineno">1490</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1491"></a><tt class="py-lineno">1491</tt>  <tt class="py-line"><tt class="py-docstring">    Methods that you do not supply a response for will return a</tt> </tt>
+<a name="L1492"></a><tt class="py-lineno">1492</tt>  <tt class="py-line"><tt class="py-docstring">    200 OK with an empty string as the response content or raise an excpetion</tt> </tt>
+<a name="L1493"></a><tt class="py-lineno">1493</tt>  <tt class="py-line"><tt class="py-docstring">    if check_unexpected is set to True. The methodId is taken from the rpcName</tt> </tt>
+<a name="L1494"></a><tt class="py-lineno">1494</tt>  <tt class="py-line"><tt class="py-docstring">    in the discovery document.</tt> </tt>
+<a name="L1495"></a><tt class="py-lineno">1495</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1496"></a><tt class="py-lineno">1496</tt>  <tt class="py-line"><tt class="py-docstring">    For more details see the project wiki.</tt> </tt>
+<a name="L1497"></a><tt class="py-lineno">1497</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1498"></a><tt class="py-lineno">1498</tt>  <tt class="py-line"> </tt>
+<a name="RequestMockBuilder.__init__"></a><div id="RequestMockBuilder.__init__-def"><a name="L1499"></a><tt class="py-lineno">1499</tt> <a class="py-toggle" href="#" id="RequestMockBuilder.__init__-toggle" onclick="return toggle('RequestMockBuilder.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.RequestMockBuilder-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">responses</tt><tt class="py-op">,</tt> <tt class="py-param">check_unexpected</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="RequestMockBuilder.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="RequestMockBuilder.__init__-expanded"><a name="L1500"></a><tt class="py-lineno">1500</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructor for RequestMockBuilder</tt> </tt>
+<a name="L1501"></a><tt class="py-lineno">1501</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1502"></a><tt class="py-lineno">1502</tt>  <tt class="py-line"><tt class="py-docstring">    The constructed object should be a callable object</tt> </tt>
+<a name="L1503"></a><tt class="py-lineno">1503</tt>  <tt class="py-line"><tt class="py-docstring">    that can replace the class HttpResponse.</tt> </tt>
+<a name="L1504"></a><tt class="py-lineno">1504</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1505"></a><tt class="py-lineno">1505</tt>  <tt class="py-line"><tt class="py-docstring">    responses - A dictionary that maps methodIds into tuples</tt> </tt>
+<a name="L1506"></a><tt class="py-lineno">1506</tt>  <tt class="py-line"><tt class="py-docstring">                of (httplib2.Response, content). The methodId</tt> </tt>
+<a name="L1507"></a><tt class="py-lineno">1507</tt>  <tt class="py-line"><tt class="py-docstring">                comes from the 'rpcName' field in the discovery</tt> </tt>
+<a name="L1508"></a><tt class="py-lineno">1508</tt>  <tt class="py-line"><tt class="py-docstring">                document.</tt> </tt>
+<a name="L1509"></a><tt class="py-lineno">1509</tt>  <tt class="py-line"><tt class="py-docstring">    check_unexpected - A boolean setting whether or not UnexpectedMethodError</tt> </tt>
+<a name="L1510"></a><tt class="py-lineno">1510</tt>  <tt class="py-line"><tt class="py-docstring">                       should be raised on unsupplied method.</tt> </tt>
+<a name="L1511"></a><tt class="py-lineno">1511</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1512"></a><tt class="py-lineno">1512</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">responses</tt> <tt class="py-op">=</tt> <tt class="py-name">responses</tt> </tt>
+<a name="L1513"></a><tt class="py-lineno">1513</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">check_unexpected</tt> <tt class="py-op">=</tt> <tt class="py-name">check_unexpected</tt> </tt>
+</div><a name="L1514"></a><tt class="py-lineno">1514</tt>  <tt class="py-line"> </tt>
+<a name="RequestMockBuilder.__call__"></a><div id="RequestMockBuilder.__call__-def"><a name="L1515"></a><tt class="py-lineno">1515</tt> <a class="py-toggle" href="#" id="RequestMockBuilder.__call__-toggle" onclick="return toggle('RequestMockBuilder.__call__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.RequestMockBuilder-class.html#__call__">__call__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">postproc</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1516"></a><tt class="py-lineno">1516</tt>  <tt class="py-line">               <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">methodId</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">resumable</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="RequestMockBuilder.__call__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="RequestMockBuilder.__call__-expanded"><a name="L1517"></a><tt class="py-lineno">1517</tt>  <tt class="py-line">    <tt class="py-docstring">"""Implements the callable interface that discovery.build() expects</tt> </tt>
+<a name="L1518"></a><tt class="py-lineno">1518</tt>  <tt class="py-line"><tt class="py-docstring">    of requestBuilder, which is to build an object compatible with</tt> </tt>
+<a name="L1519"></a><tt class="py-lineno">1519</tt>  <tt class="py-line"><tt class="py-docstring">    HttpRequest.execute(). See that method for the description of the</tt> </tt>
+<a name="L1520"></a><tt class="py-lineno">1520</tt>  <tt class="py-line"><tt class="py-docstring">    parameters and the expected response.</tt> </tt>
+<a name="L1521"></a><tt class="py-lineno">1521</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1522"></a><tt class="py-lineno">1522</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">methodId</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">responses</tt><tt class="py-op">:</tt> </tt>
+<a name="L1523"></a><tt class="py-lineno">1523</tt>  <tt class="py-line">      <tt id="link-275" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-275', 'response', 'link-247');">response</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">responses</tt><tt class="py-op">[</tt><tt class="py-name">methodId</tt><tt class="py-op">]</tt> </tt>
+<a name="L1524"></a><tt class="py-lineno">1524</tt>  <tt class="py-line">      <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-276" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-276', 'response', 'link-247');">response</a></tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1525"></a><tt class="py-lineno">1525</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-277" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-277', 'response', 'link-247');">response</a></tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
+<a name="L1526"></a><tt class="py-lineno">1526</tt>  <tt class="py-line">        <tt class="py-comment"># Test the body against the supplied expected_body.</tt> </tt>
+<a name="L1527"></a><tt class="py-lineno">1527</tt>  <tt class="py-line">        <tt class="py-name">expected_body</tt> <tt class="py-op">=</tt> <tt id="link-278" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-278', 'response', 'link-247');">response</a></tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> </tt>
+<a name="L1528"></a><tt class="py-lineno">1528</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">bool</tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-name">bool</tt><tt class="py-op">(</tt><tt id="link-279" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-279', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1529"></a><tt class="py-lineno">1529</tt>  <tt class="py-line">          <tt class="py-comment"># Not expecting a body and provided one</tt> </tt>
+<a name="L1530"></a><tt class="py-lineno">1530</tt>  <tt class="py-line">          <tt class="py-comment"># or expecting a body and not provided one.</tt> </tt>
+<a name="L1531"></a><tt class="py-lineno">1531</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-280" class="py-name"><a title="googleapiclient.errors.UnexpectedBodyError" class="py-name" href="#" onclick="return doclink('link-280', 'UnexpectedBodyError', 'link-18');">UnexpectedBodyError</a></tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">,</tt> <tt id="link-281" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-281', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1532"></a><tt class="py-lineno">1532</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1533"></a><tt class="py-lineno">1533</tt>  <tt class="py-line">          <tt class="py-name">expected_body</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">)</tt> </tt>
+<a name="L1534"></a><tt class="py-lineno">1534</tt>  <tt class="py-line">        <tt id="link-282" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-282', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt id="link-283" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-283', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1535"></a><tt class="py-lineno">1535</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt id="link-284" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-284', 'body', 'link-69');">body</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">expected_body</tt><tt class="py-op">:</tt> </tt>
+<a name="L1536"></a><tt class="py-lineno">1536</tt>  <tt class="py-line">          <tt class="py-keyword">raise</tt> <tt id="link-285" class="py-name"><a title="googleapiclient.errors.UnexpectedBodyError" class="py-name" href="#" onclick="return doclink('link-285', 'UnexpectedBodyError', 'link-18');">UnexpectedBodyError</a></tt><tt class="py-op">(</tt><tt class="py-name">expected_body</tt><tt class="py-op">,</tt> <tt id="link-286" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-286', 'body', 'link-69');">body</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L1537"></a><tt class="py-lineno">1537</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-287" class="py-name" targets="Class googleapiclient.http.HttpRequestMock=googleapiclient.http.HttpRequestMock-class.html"><a title="googleapiclient.http.HttpRequestMock" class="py-name" href="#" onclick="return doclink('link-287', 'HttpRequestMock', 'link-287');">HttpRequestMock</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">postproc</tt><tt class="py-op">)</tt> </tt>
+<a name="L1538"></a><tt class="py-lineno">1538</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">check_unexpected</tt><tt class="py-op">:</tt> </tt>
+<a name="L1539"></a><tt class="py-lineno">1539</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-288" class="py-name"><a title="googleapiclient.errors.UnexpectedMethodError" class="py-name" href="#" onclick="return doclink('link-288', 'UnexpectedMethodError', 'link-21');">UnexpectedMethodError</a></tt><tt class="py-op">(</tt><tt class="py-name">methodId</tt><tt class="py-op">=</tt><tt class="py-name">methodId</tt><tt class="py-op">)</tt> </tt>
+<a name="L1540"></a><tt class="py-lineno">1540</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1541"></a><tt class="py-lineno">1541</tt>  <tt class="py-line">      <tt id="link-289" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-289', 'model', 'link-23');">model</a></tt> <tt class="py-op">=</tt> <tt id="link-290" class="py-name"><a title="googleapiclient.model.JsonModel" class="py-name" href="#" onclick="return doclink('link-290', 'JsonModel', 'link-24');">JsonModel</a></tt><tt class="py-op">(</tt><tt class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L1542"></a><tt class="py-lineno">1542</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt id="link-291" class="py-name"><a title="googleapiclient.http.HttpRequestMock" class="py-name" href="#" onclick="return doclink('link-291', 'HttpRequestMock', 'link-287');">HttpRequestMock</a></tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-string">'{}'</tt><tt class="py-op">,</tt> <tt id="link-292" class="py-name"><a title="googleapiclient.model" class="py-name" href="#" onclick="return doclink('link-292', 'model', 'link-23');">model</a></tt><tt class="py-op">.</tt><tt id="link-293" class="py-name"><a title="googleapiclient.model.BaseModel.response
+googleapiclient.model.Model.response" class="py-name" href="#" onclick="return doclink('link-293', 'response', 'link-247');">response</a></tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L1543"></a><tt class="py-lineno">1543</tt>  <tt class="py-line"> </tt>
+<a name="HttpMock"></a><div id="HttpMock-def"><a name="L1544"></a><tt class="py-lineno">1544</tt>  <tt class="py-line"> </tt>
+<a name="L1545"></a><tt class="py-lineno">1545</tt> <a class="py-toggle" href="#" id="HttpMock-toggle" onclick="return toggle('HttpMock');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.HttpMock-class.html">HttpMock</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpMock-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HttpMock-expanded"><a name="L1546"></a><tt class="py-lineno">1546</tt>  <tt class="py-line">  <tt class="py-docstring">"""Mock of httplib2.Http"""</tt> </tt>
+<a name="L1547"></a><tt class="py-lineno">1547</tt>  <tt class="py-line"> </tt>
+<a name="HttpMock.__init__"></a><div id="HttpMock.__init__-def"><a name="L1548"></a><tt class="py-lineno">1548</tt> <a class="py-toggle" href="#" id="HttpMock.__init__-toggle" onclick="return toggle('HttpMock.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpMock-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpMock.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpMock.__init__-expanded"><a name="L1549"></a><tt class="py-lineno">1549</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
+<a name="L1550"></a><tt class="py-lineno">1550</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1551"></a><tt class="py-lineno">1551</tt>  <tt class="py-line"><tt class="py-docstring">      filename: string, absolute filename to read response from</tt> </tt>
+<a name="L1552"></a><tt class="py-lineno">1552</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, header to return with response</tt> </tt>
+<a name="L1553"></a><tt class="py-lineno">1553</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1554"></a><tt class="py-lineno">1554</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1555"></a><tt class="py-lineno">1555</tt>  <tt class="py-line">      <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'status'</tt><tt class="py-op">:</tt> <tt class="py-string">'200'</tt><tt class="py-op">}</tt> </tt>
+<a name="L1556"></a><tt class="py-lineno">1556</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">filename</tt><tt class="py-op">:</tt> </tt>
+<a name="L1557"></a><tt class="py-lineno">1557</tt>  <tt class="py-line">      <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-string">'rb'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1558"></a><tt class="py-lineno">1558</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-294" class="py-name"><a title="googleapiclient.http._StreamSlice.read" class="py-name" href="#" onclick="return doclink('link-294', 'read', 'link-50');">read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1559"></a><tt class="py-lineno">1559</tt>  <tt class="py-line">      <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1560"></a><tt class="py-lineno">1560</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1561"></a><tt class="py-lineno">1561</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1562"></a><tt class="py-lineno">1562</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_headers</tt> <tt class="py-op">=</tt> <tt class="py-name">headers</tt> </tt>
+<a name="L1563"></a><tt class="py-lineno">1563</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1564"></a><tt class="py-lineno">1564</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1565"></a><tt class="py-lineno">1565</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1566"></a><tt class="py-lineno">1566</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-295" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-295', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L1567"></a><tt class="py-lineno">1567</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+</div><a name="L1568"></a><tt class="py-lineno">1568</tt>  <tt class="py-line"> </tt>
+<a name="L1569"></a><tt class="py-lineno">1569</tt>  <tt class="py-line"> </tt>
+<a name="HttpMock.request"></a><div id="HttpMock.request-def"><a name="L1570"></a><tt class="py-lineno">1570</tt> <a class="py-toggle" href="#" id="HttpMock.request-toggle" onclick="return toggle('HttpMock.request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpMock-class.html#request">request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L1571"></a><tt class="py-lineno">1571</tt>  <tt class="py-line">              <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> </tt>
+<a name="L1572"></a><tt class="py-lineno">1572</tt>  <tt class="py-line">              <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1573"></a><tt class="py-lineno">1573</tt>  <tt class="py-line">              <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1574"></a><tt class="py-lineno">1574</tt>  <tt class="py-line">              <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> </tt>
+<a name="L1575"></a><tt class="py-lineno">1575</tt>  <tt class="py-line">              <tt class="py-param">connection_type</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpMock.request-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpMock.request-expanded"><a name="L1576"></a><tt class="py-lineno">1576</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uri</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
+<a name="L1577"></a><tt class="py-lineno">1577</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-name">method</tt> </tt>
+<a name="L1578"></a><tt class="py-lineno">1578</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-296" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-296', 'body', 'link-69');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-297" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-297', 'body', 'link-69');">body</a></tt> </tt>
+<a name="L1579"></a><tt class="py-lineno">1579</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-name">headers</tt> </tt>
+<a name="L1580"></a><tt class="py-lineno">1580</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Response</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">response_headers</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">data</tt> </tt>
+</div></div><a name="L1581"></a><tt class="py-lineno">1581</tt>  <tt class="py-line"> </tt>
+<a name="HttpMockSequence"></a><div id="HttpMockSequence-def"><a name="L1582"></a><tt class="py-lineno">1582</tt>  <tt class="py-line"> </tt>
+<a name="L1583"></a><tt class="py-lineno">1583</tt> <a class="py-toggle" href="#" id="HttpMockSequence-toggle" onclick="return toggle('HttpMockSequence');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.http.HttpMockSequence-class.html">HttpMockSequence</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpMockSequence-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="HttpMockSequence-expanded"><a name="L1584"></a><tt class="py-lineno">1584</tt>  <tt class="py-line">  <tt class="py-docstring">"""Mock of httplib2.Http</tt> </tt>
+<a name="L1585"></a><tt class="py-lineno">1585</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1586"></a><tt class="py-lineno">1586</tt>  <tt class="py-line"><tt class="py-docstring">  Mocks a sequence of calls to request returning different responses for each</tt> </tt>
+<a name="L1587"></a><tt class="py-lineno">1587</tt>  <tt class="py-line"><tt class="py-docstring">  call. Create an instance initialized with the desired response headers</tt> </tt>
+<a name="L1588"></a><tt class="py-lineno">1588</tt>  <tt class="py-line"><tt class="py-docstring">  and content and then use as if an httplib2.Http instance.</tt> </tt>
+<a name="L1589"></a><tt class="py-lineno">1589</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1590"></a><tt class="py-lineno">1590</tt>  <tt class="py-line"><tt class="py-docstring">    http = HttpMockSequence([</tt> </tt>
+<a name="L1591"></a><tt class="py-lineno">1591</tt>  <tt class="py-line"><tt class="py-docstring">      ({'status': '401'}, ''),</tt> </tt>
+<a name="L1592"></a><tt class="py-lineno">1592</tt>  <tt class="py-line"><tt class="py-docstring">      ({'status': '200'}, '{"access_token":"1/3w","expires_in":3600}'),</tt> </tt>
+<a name="L1593"></a><tt class="py-lineno">1593</tt>  <tt class="py-line"><tt class="py-docstring">      ({'status': '200'}, 'echo_request_headers'),</tt> </tt>
+<a name="L1594"></a><tt class="py-lineno">1594</tt>  <tt class="py-line"><tt class="py-docstring">      ])</tt> </tt>
+<a name="L1595"></a><tt class="py-lineno">1595</tt>  <tt class="py-line"><tt class="py-docstring">    resp, content = http.request("http://examples.com")</tt> </tt>
+<a name="L1596"></a><tt class="py-lineno">1596</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1597"></a><tt class="py-lineno">1597</tt>  <tt class="py-line"><tt class="py-docstring">  There are special values you can pass in for content to trigger</tt> </tt>
+<a name="L1598"></a><tt class="py-lineno">1598</tt>  <tt class="py-line"><tt class="py-docstring">  behavours that are helpful in testing.</tt> </tt>
+<a name="L1599"></a><tt class="py-lineno">1599</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1600"></a><tt class="py-lineno">1600</tt>  <tt class="py-line"><tt class="py-docstring">  'echo_request_headers' means return the request headers in the response body</tt> </tt>
+<a name="L1601"></a><tt class="py-lineno">1601</tt>  <tt class="py-line"><tt class="py-docstring">  'echo_request_headers_as_json' means return the request headers in</tt> </tt>
+<a name="L1602"></a><tt class="py-lineno">1602</tt>  <tt class="py-line"><tt class="py-docstring">     the response body</tt> </tt>
+<a name="L1603"></a><tt class="py-lineno">1603</tt>  <tt class="py-line"><tt class="py-docstring">  'echo_request_body' means return the request body in the response body</tt> </tt>
+<a name="L1604"></a><tt class="py-lineno">1604</tt>  <tt class="py-line"><tt class="py-docstring">  'echo_request_uri' means return the request uri in the response body</tt> </tt>
+<a name="L1605"></a><tt class="py-lineno">1605</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1606"></a><tt class="py-lineno">1606</tt>  <tt class="py-line"> </tt>
+<a name="HttpMockSequence.__init__"></a><div id="HttpMockSequence.__init__-def"><a name="L1607"></a><tt class="py-lineno">1607</tt> <a class="py-toggle" href="#" id="HttpMockSequence.__init__-toggle" onclick="return toggle('HttpMockSequence.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpMockSequence-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">iterable</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpMockSequence.__init__-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpMockSequence.__init__-expanded"><a name="L1608"></a><tt class="py-lineno">1608</tt>  <tt class="py-line">    <tt class="py-docstring">"""</tt> </tt>
+<a name="L1609"></a><tt class="py-lineno">1609</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L1610"></a><tt class="py-lineno">1610</tt>  <tt class="py-line"><tt class="py-docstring">      iterable: iterable, a sequence of pairs of (headers, body)</tt> </tt>
+<a name="L1611"></a><tt class="py-lineno">1611</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L1612"></a><tt class="py-lineno">1612</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_iterable</tt> <tt class="py-op">=</tt> <tt class="py-name">iterable</tt> </tt>
+<a name="L1613"></a><tt class="py-lineno">1613</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">follow_redirects</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
+</div><a name="L1614"></a><tt class="py-lineno">1614</tt>  <tt class="py-line"> </tt>
+<a name="HttpMockSequence.request"></a><div id="HttpMockSequence.request-def"><a name="L1615"></a><tt class="py-lineno">1615</tt> <a class="py-toggle" href="#" id="HttpMockSequence.request-toggle" onclick="return toggle('HttpMockSequence.request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http.HttpMockSequence-class.html#request">request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">uri</tt><tt class="py-op">,</tt> </tt>
+<a name="L1616"></a><tt class="py-lineno">1616</tt>  <tt class="py-line">              <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> </tt>
+<a name="L1617"></a><tt class="py-lineno">1617</tt>  <tt class="py-line">              <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1618"></a><tt class="py-lineno">1618</tt>  <tt class="py-line">              <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1619"></a><tt class="py-lineno">1619</tt>  <tt class="py-line">              <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> </tt>
+<a name="L1620"></a><tt class="py-lineno">1620</tt>  <tt class="py-line">              <tt class="py-param">connection_type</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HttpMockSequence.request-collapsed" style="display:none;" pad="++++" indent="++++++"></div><div id="HttpMockSequence.request-expanded"><a name="L1621"></a><tt class="py-lineno">1621</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_iterable</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L1622"></a><tt class="py-lineno">1622</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">content</tt> <tt class="py-op">==</tt> <tt class="py-string">'echo_request_headers'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1623"></a><tt class="py-lineno">1623</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">headers</tt> </tt>
+<a name="L1624"></a><tt class="py-lineno">1624</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">content</tt> <tt class="py-op">==</tt> <tt class="py-string">'echo_request_headers_as_json'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1625"></a><tt class="py-lineno">1625</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt> </tt>
+<a name="L1626"></a><tt class="py-lineno">1626</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">content</tt> <tt class="py-op">==</tt> <tt class="py-string">'echo_request_body'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1627"></a><tt class="py-lineno">1627</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt id="link-298" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-298', 'body', 'link-69');">body</a></tt><tt class="py-op">,</tt> <tt class="py-string">'read'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1628"></a><tt class="py-lineno">1628</tt>  <tt class="py-line">        <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-299" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-299', 'body', 'link-69');">body</a></tt><tt class="py-op">.</tt><tt id="link-300" class="py-name"><a title="googleapiclient.http._StreamSlice.read" class="py-name" href="#" onclick="return doclink('link-300', 'read', 'link-50');">read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L1629"></a><tt class="py-lineno">1629</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1630"></a><tt class="py-lineno">1630</tt>  <tt class="py-line">        <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt id="link-301" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-301', 'body', 'link-69');">body</a></tt> </tt>
+<a name="L1631"></a><tt class="py-lineno">1631</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">content</tt> <tt class="py-op">==</tt> <tt class="py-string">'echo_request_uri'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1632"></a><tt class="py-lineno">1632</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">uri</tt> </tt>
+<a name="L1633"></a><tt class="py-lineno">1633</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">text_type</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1634"></a><tt class="py-lineno">1634</tt>  <tt class="py-line">      <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1635"></a><tt class="py-lineno">1635</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">Response</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
+</div></div><a name="L1636"></a><tt class="py-lineno">1636</tt>  <tt class="py-line"> </tt>
+<a name="set_user_agent"></a><div id="set_user_agent-def"><a name="L1637"></a><tt class="py-lineno">1637</tt>  <tt class="py-line"> </tt>
+<a name="L1638"></a><tt class="py-lineno">1638</tt> <a class="py-toggle" href="#" id="set_user_agent-toggle" onclick="return toggle('set_user_agent');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http-module.html#set_user_agent">set_user_agent</a><tt class="py-op">(</tt><tt class="py-param">http</tt><tt class="py-op">,</tt> <tt class="py-param">user_agent</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="set_user_agent-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="set_user_agent-expanded"><a name="L1639"></a><tt class="py-lineno">1639</tt>  <tt class="py-line">  <tt class="py-docstring">"""Set the user-agent on every request.</tt> </tt>
+<a name="L1640"></a><tt class="py-lineno">1640</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1641"></a><tt class="py-lineno">1641</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L1642"></a><tt class="py-lineno">1642</tt>  <tt class="py-line"><tt class="py-docstring">     http - An instance of httplib2.Http</tt> </tt>
+<a name="L1643"></a><tt class="py-lineno">1643</tt>  <tt class="py-line"><tt class="py-docstring">         or something that acts like it.</tt> </tt>
+<a name="L1644"></a><tt class="py-lineno">1644</tt>  <tt class="py-line"><tt class="py-docstring">     user_agent: string, the value for the user-agent header.</tt> </tt>
+<a name="L1645"></a><tt class="py-lineno">1645</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1646"></a><tt class="py-lineno">1646</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L1647"></a><tt class="py-lineno">1647</tt>  <tt class="py-line"><tt class="py-docstring">     A modified instance of http that was passed in.</tt> </tt>
+<a name="L1648"></a><tt class="py-lineno">1648</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1649"></a><tt class="py-lineno">1649</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
+<a name="L1650"></a><tt class="py-lineno">1650</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1651"></a><tt class="py-lineno">1651</tt>  <tt class="py-line"><tt class="py-docstring">    h = httplib2.Http()</tt> </tt>
+<a name="L1652"></a><tt class="py-lineno">1652</tt>  <tt class="py-line"><tt class="py-docstring">    h = set_user_agent(h, "my-app-name/6.0")</tt> </tt>
+<a name="L1653"></a><tt class="py-lineno">1653</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1654"></a><tt class="py-lineno">1654</tt>  <tt class="py-line"><tt class="py-docstring">  Most of the time the user-agent will be set doing auth, this is for the rare</tt> </tt>
+<a name="L1655"></a><tt class="py-lineno">1655</tt>  <tt class="py-line"><tt class="py-docstring">  cases where you are accessing an unauthenticated endpoint.</tt> </tt>
+<a name="L1656"></a><tt class="py-lineno">1656</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1657"></a><tt class="py-lineno">1657</tt>  <tt class="py-line">  <tt class="py-name">request_orig</tt> <tt class="py-op">=</tt> <tt id="link-302" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-302', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-303" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-303', 'request', 'link-34');">request</a></tt> </tt>
+<a name="L1658"></a><tt class="py-lineno">1658</tt>  <tt class="py-line"> </tt>
+<a name="L1659"></a><tt class="py-lineno">1659</tt>  <tt class="py-line">  <tt class="py-comment"># The closure that will replace 'httplib2.Http.request'.</tt> </tt>
+<a name="L1660"></a><tt class="py-lineno">1660</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">new_request</tt><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1661"></a><tt class="py-lineno">1661</tt>  <tt class="py-line">                  <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">DEFAULT_MAX_REDIRECTS</tt><tt class="py-op">,</tt> </tt>
+<a name="L1662"></a><tt class="py-lineno">1662</tt>  <tt class="py-line">                  <tt class="py-param">connection_type</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1663"></a><tt class="py-lineno">1663</tt>  <tt class="py-line">    <tt class="py-docstring">"""Modify the request headers to add the user-agent."""</tt> </tt>
+<a name="L1664"></a><tt class="py-lineno">1664</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1665"></a><tt class="py-lineno">1665</tt>  <tt class="py-line">      <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1666"></a><tt class="py-lineno">1666</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'user-agent'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
+<a name="L1667"></a><tt class="py-lineno">1667</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> <tt class="py-op">+</tt> <tt class="py-string">' '</tt> <tt class="py-op">+</tt> <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> </tt>
+<a name="L1668"></a><tt class="py-lineno">1668</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L1669"></a><tt class="py-lineno">1669</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">user_agent</tt> </tt>
+<a name="L1670"></a><tt class="py-lineno">1670</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">request_orig</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt id="link-304" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-304', 'body', 'link-69');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
+<a name="L1671"></a><tt class="py-lineno">1671</tt>  <tt class="py-line">                        <tt class="py-name">redirections</tt><tt class="py-op">,</tt> <tt class="py-name">connection_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L1672"></a><tt class="py-lineno">1672</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
+</div><a name="L1673"></a><tt class="py-lineno">1673</tt>  <tt class="py-line"> </tt>
+<a name="L1674"></a><tt class="py-lineno">1674</tt>  <tt class="py-line">  <tt id="link-305" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-305', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-306" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-306', 'request', 'link-34');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_request</tt> </tt>
+<a name="L1675"></a><tt class="py-lineno">1675</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-307" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-307', 'http', 'link-33');">http</a></tt> </tt>
+</div><a name="L1676"></a><tt class="py-lineno">1676</tt>  <tt class="py-line"> </tt>
+<a name="tunnel_patch"></a><div id="tunnel_patch-def"><a name="L1677"></a><tt class="py-lineno">1677</tt>  <tt class="py-line"> </tt>
+<a name="L1678"></a><tt class="py-lineno">1678</tt> <a class="py-toggle" href="#" id="tunnel_patch-toggle" onclick="return toggle('tunnel_patch');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.http-module.html#tunnel_patch">tunnel_patch</a><tt class="py-op">(</tt><tt class="py-param">http</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="tunnel_patch-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="tunnel_patch-expanded"><a name="L1679"></a><tt class="py-lineno">1679</tt>  <tt class="py-line">  <tt class="py-docstring">"""Tunnel PATCH requests over POST.</tt> </tt>
+<a name="L1680"></a><tt class="py-lineno">1680</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L1681"></a><tt class="py-lineno">1681</tt>  <tt class="py-line"><tt class="py-docstring">     http - An instance of httplib2.Http</tt> </tt>
+<a name="L1682"></a><tt class="py-lineno">1682</tt>  <tt class="py-line"><tt class="py-docstring">         or something that acts like it.</tt> </tt>
+<a name="L1683"></a><tt class="py-lineno">1683</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1684"></a><tt class="py-lineno">1684</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L1685"></a><tt class="py-lineno">1685</tt>  <tt class="py-line"><tt class="py-docstring">     A modified instance of http that was passed in.</tt> </tt>
+<a name="L1686"></a><tt class="py-lineno">1686</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1687"></a><tt class="py-lineno">1687</tt>  <tt class="py-line"><tt class="py-docstring">  Example:</tt> </tt>
+<a name="L1688"></a><tt class="py-lineno">1688</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1689"></a><tt class="py-lineno">1689</tt>  <tt class="py-line"><tt class="py-docstring">    h = httplib2.Http()</tt> </tt>
+<a name="L1690"></a><tt class="py-lineno">1690</tt>  <tt class="py-line"><tt class="py-docstring">    h = tunnel_patch(h, "my-app-name/6.0")</tt> </tt>
+<a name="L1691"></a><tt class="py-lineno">1691</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L1692"></a><tt class="py-lineno">1692</tt>  <tt class="py-line"><tt class="py-docstring">  Useful if you are running on a platform that doesn't support PATCH.</tt> </tt>
+<a name="L1693"></a><tt class="py-lineno">1693</tt>  <tt class="py-line"><tt class="py-docstring">  Apply this last if you are using OAuth 1.0, as changing the method</tt> </tt>
+<a name="L1694"></a><tt class="py-lineno">1694</tt>  <tt class="py-line"><tt class="py-docstring">  will result in a different signature.</tt> </tt>
+<a name="L1695"></a><tt class="py-lineno">1695</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L1696"></a><tt class="py-lineno">1696</tt>  <tt class="py-line">  <tt class="py-name">request_orig</tt> <tt class="py-op">=</tt> <tt id="link-308" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-308', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-309" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-309', 'request', 'link-34');">request</a></tt> </tt>
+<a name="L1697"></a><tt class="py-lineno">1697</tt>  <tt class="py-line"> </tt>
+<a name="L1698"></a><tt class="py-lineno">1698</tt>  <tt class="py-line">  <tt class="py-comment"># The closure that will replace 'httplib2.Http.request'.</tt> </tt>
+<a name="L1699"></a><tt class="py-lineno">1699</tt>  <tt class="py-line">  <tt class="py-keyword">def</tt> <tt class="py-def-name">new_request</tt><tt class="py-op">(</tt><tt class="py-param">uri</tt><tt class="py-op">,</tt> <tt class="py-param">method</tt><tt class="py-op">=</tt><tt class="py-string">'GET'</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
+<a name="L1700"></a><tt class="py-lineno">1700</tt>  <tt class="py-line">                  <tt class="py-param">redirections</tt><tt class="py-op">=</tt><tt class="py-name">httplib2</tt><tt class="py-op">.</tt><tt class="py-name">DEFAULT_MAX_REDIRECTS</tt><tt class="py-op">,</tt> </tt>
+<a name="L1701"></a><tt class="py-lineno">1701</tt>  <tt class="py-line">                  <tt class="py-param">connection_type</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1702"></a><tt class="py-lineno">1702</tt>  <tt class="py-line">    <tt class="py-docstring">"""Modify the request headers to add the user-agent."""</tt> </tt>
+<a name="L1703"></a><tt class="py-lineno">1703</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">headers</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L1704"></a><tt class="py-lineno">1704</tt>  <tt class="py-line">      <tt class="py-name">headers</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L1705"></a><tt class="py-lineno">1705</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">method</tt> <tt class="py-op">==</tt> <tt class="py-string">'PATCH'</tt><tt class="py-op">:</tt> </tt>
+<a name="L1706"></a><tt class="py-lineno">1706</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-string">'oauth_token'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">.</tt><tt id="link-310" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.discovery_cache.base.Cache.get
+googleapiclient.discovery_cache.file_cache.Cache.get
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-310', 'get', 'link-36');">get</a></tt><tt class="py-op">(</tt><tt class="py-string">'authorization'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L1707"></a><tt class="py-lineno">1707</tt>  <tt class="py-line">        <tt id="link-311" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-311', 'LOGGER', 'link-25');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">warning</tt><tt class="py-op">(</tt> </tt>
+<a name="L1708"></a><tt class="py-lineno">1708</tt>  <tt class="py-line">            <tt class="py-string">'OAuth 1.0 request made with Credentials after tunnel_patch.'</tt><tt class="py-op">)</tt> </tt>
+<a name="L1709"></a><tt class="py-lineno">1709</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'x-http-method-override'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">"PATCH"</tt> </tt>
+<a name="L1710"></a><tt class="py-lineno">1710</tt>  <tt class="py-line">      <tt class="py-name">method</tt> <tt class="py-op">=</tt> <tt class="py-string">'POST'</tt> </tt>
+<a name="L1711"></a><tt class="py-lineno">1711</tt>  <tt class="py-line">    <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">request_orig</tt><tt class="py-op">(</tt><tt class="py-name">uri</tt><tt class="py-op">,</tt> <tt class="py-name">method</tt><tt class="py-op">,</tt> <tt id="link-312" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-312', 'body', 'link-69');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">headers</tt><tt class="py-op">,</tt> </tt>
+<a name="L1712"></a><tt class="py-lineno">1712</tt>  <tt class="py-line">                        <tt class="py-name">redirections</tt><tt class="py-op">,</tt> <tt class="py-name">connection_type</tt><tt class="py-op">)</tt> </tt>
+<a name="L1713"></a><tt class="py-lineno">1713</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt> </tt>
+</div><a name="L1714"></a><tt class="py-lineno">1714</tt>  <tt class="py-line"> </tt>
+<a name="L1715"></a><tt class="py-lineno">1715</tt>  <tt class="py-line">  <tt id="link-313" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-313', 'http', 'link-33');">http</a></tt><tt class="py-op">.</tt><tt id="link-314" class="py-name"><a title="googleapiclient.http.HttpMock.request
+googleapiclient.http.HttpMockSequence.request
+googleapiclient.model.BaseModel.request
+googleapiclient.model.Model.request" class="py-name" href="#" onclick="return doclink('link-314', 'request', 'link-34');">request</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_request</tt> </tt>
+<a name="L1716"></a><tt class="py-lineno">1716</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt id="link-315" class="py-name"><a title="googleapiclient.http" class="py-name" href="#" onclick="return doclink('link-315', 'http', 'link-33');">http</a></tt> </tt>
+</div><a name="L1717"></a><tt class="py-lineno">1717</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -2041,7 +2140,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.BatchHttpRequest-class.html b/docs/epy/googleapiclient.http.BatchHttpRequest-class.html
index d36f5ee..3154476 100644
--- a/docs/epy/googleapiclient.http.BatchHttpRequest-class.html
+++ b/docs/epy/googleapiclient.http.BatchHttpRequest-class.html
@@ -58,13 +58,13 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class BatchHttpRequest</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#BatchHttpRequest">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_23" name="uml_class_diagram_for_googleap_23">
+<center>  <map id="uml_class_diagram_for_googleap_24" name="uml_class_diagram_for_googleap_24">
 <area shape="rect" id="node1_3" href="googleapiclient.http.BatchHttpRequest-class.html#__init__" title="Constructor for a BatchHttpRequest." alt="" coords="18,36,331,55"/>
 <area shape="rect" id="node1_4" href="googleapiclient.http.BatchHttpRequest-class.html#add" title="Add a new request." alt="" coords="18,55,331,73"/>
 <area shape="rect" id="node1_5" href="googleapiclient.http.BatchHttpRequest-class.html#execute" title="Execute all the requests as a single batched HTTP request." alt="" coords="18,73,331,92"/>
 <area shape="rect" id="node1" href="googleapiclient.http.BatchHttpRequest-class.html" title="Batches multiple HttpRequest objects into a single HTTP request." alt="" coords="5,5,343,99"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_23.gif" alt='' usemap="#uml_class_diagram_for_googleap_23" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_24.gif" alt='' usemap="#uml_class_diagram_for_googleap_24" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -740,7 +740,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.HttpMock-class.html b/docs/epy/googleapiclient.http.HttpMock-class.html
index 97df394..2e350ce 100644
--- a/docs/epy/googleapiclient.http.HttpMock-class.html
+++ b/docs/epy/googleapiclient.http.HttpMock-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class HttpMock</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#HttpMock">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_24" name="uml_class_diagram_for_googleap_24">
+<center>  <map id="uml_class_diagram_for_googleap_25" name="uml_class_diagram_for_googleap_25">
 <area shape="rect" id="node1_2" href="googleapiclient.http.HttpMock-class.html#__init__" title="Args:..." alt="" coords="17,36,617,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.http.HttpMock-class.html#request" title="googleapiclient.http.HttpMock.request" alt="" coords="17,55,617,73"/>
 <area shape="rect" id="node1" href="googleapiclient.http.HttpMock-class.html" title="Mock of httplib2.Http" alt="" coords="5,5,629,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_24.gif" alt='' usemap="#uml_class_diagram_for_googleap_24" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_25.gif" alt='' usemap="#uml_class_diagram_for_googleap_25" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -250,7 +250,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.HttpMockSequence-class.html b/docs/epy/googleapiclient.http.HttpMockSequence-class.html
index 0094530..3cfd7aa 100644
--- a/docs/epy/googleapiclient.http.HttpMockSequence-class.html
+++ b/docs/epy/googleapiclient.http.HttpMockSequence-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class HttpMockSequence</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#HttpMockSequence">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_25" name="uml_class_diagram_for_googleap_25">
+<center>  <map id="uml_class_diagram_for_googleap_26" name="uml_class_diagram_for_googleap_26">
 <area shape="rect" id="node1_2" href="googleapiclient.http.HttpMockSequence-class.html#__init__" title="Args:..." alt="" coords="17,36,617,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.http.HttpMockSequence-class.html#request" title="googleapiclient.http.HttpMockSequence.request" alt="" coords="17,55,617,73"/>
 <area shape="rect" id="node1" href="googleapiclient.http.HttpMockSequence-class.html" title="Mock of httplib2.Http" alt="" coords="5,5,629,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_25.gif" alt='' usemap="#uml_class_diagram_for_googleap_25" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_26.gif" alt='' usemap="#uml_class_diagram_for_googleap_26" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -267,7 +267,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.HttpRequest-class.html b/docs/epy/googleapiclient.http.HttpRequest-class.html
index 3b39e23..13926f3 100644
--- a/docs/epy/googleapiclient.http.HttpRequest-class.html
+++ b/docs/epy/googleapiclient.http.HttpRequest-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class HttpRequest</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#HttpRequest">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_26" name="uml_class_diagram_for_googleap_26">
+<center>  <map id="uml_class_diagram_for_googleap_27" name="uml_class_diagram_for_googleap_27">
 <area shape="rect" id="node1_6" href="googleapiclient.http.HttpRequest-class.html#__init__" title="Constructor for an HttpRequest." alt="" coords="17,36,684,55"/>
 <area shape="rect" id="node1_7" href="googleapiclient.http.HttpRequest-class.html#execute" title="Execute the request." alt="" coords="17,55,684,73"/>
 <area shape="rect" id="node1_8" href="googleapiclient.http.HttpRequest-class.html#add_response_callback" title="add_response_headers_callback" alt="" coords="17,73,684,92"/>
@@ -67,7 +67,7 @@
 <area shape="rect" id="node1_11" href="googleapiclient.http.HttpRequest-class.html#from_json" title="Returns an HttpRequest populated with info from a JSON object." alt="" coords="17,129,684,148"/>
 <area shape="rect" id="node1" href="googleapiclient.http.HttpRequest-class.html" title="Encapsulates a single HTTP request." alt="" coords="5,5,696,155"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_26.gif" alt='' usemap="#uml_class_diagram_for_googleap_26" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_27.gif" alt='' usemap="#uml_class_diagram_for_googleap_27" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -561,7 +561,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.HttpRequestMock-class.html b/docs/epy/googleapiclient.http.HttpRequestMock-class.html
index 0941128..e8b7c76 100644
--- a/docs/epy/googleapiclient.http.HttpRequestMock-class.html
+++ b/docs/epy/googleapiclient.http.HttpRequestMock-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class HttpRequestMock</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#HttpRequestMock">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_27" name="uml_class_diagram_for_googleap_27">
+<center>  <map id="uml_class_diagram_for_googleap_28" name="uml_class_diagram_for_googleap_28">
 <area shape="rect" id="node1_2" href="googleapiclient.http.HttpRequestMock-class.html#__init__" title="Constructor for HttpRequestMock" alt="" coords="17,36,241,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.http.HttpRequestMock-class.html#execute" title="Execute the request." alt="" coords="17,55,241,73"/>
 <area shape="rect" id="node1" href="googleapiclient.http.HttpRequestMock-class.html" title="Mock of HttpRequest." alt="" coords="5,5,253,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_27.gif" alt='' usemap="#uml_class_diagram_for_googleap_27" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_28.gif" alt='' usemap="#uml_class_diagram_for_googleap_28" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -279,7 +279,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.MediaDownloadProgress-class.html b/docs/epy/googleapiclient.http.MediaDownloadProgress-class.html
index 8d91faf..eeb1ca5 100644
--- a/docs/epy/googleapiclient.http.MediaDownloadProgress-class.html
+++ b/docs/epy/googleapiclient.http.MediaDownloadProgress-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class MediaDownloadProgress</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#MediaDownloadProgress">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_28" name="uml_class_diagram_for_googleap_28">
+<center>  <map id="uml_class_diagram_for_googleap_29" name="uml_class_diagram_for_googleap_29">
 <area shape="rect" id="node1_2" href="googleapiclient.http.MediaDownloadProgress-class.html#__init__" title="Constructor." alt="" coords="18,36,291,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.http.MediaDownloadProgress-class.html#progress" title="Percent of download completed, as a float." alt="" coords="18,55,291,73"/>
 <area shape="rect" id="node1" href="googleapiclient.http.MediaDownloadProgress-class.html" title="Status of a resumable download." alt="" coords="5,5,303,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_28.gif" alt='' usemap="#uml_class_diagram_for_googleap_28" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_29.gif" alt='' usemap="#uml_class_diagram_for_googleap_29" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -272,7 +272,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:25 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.MediaFileUpload-class.html b/docs/epy/googleapiclient.http.MediaFileUpload-class.html
index 75a2a0a..5b9f37e 100644
--- a/docs/epy/googleapiclient.http.MediaFileUpload-class.html
+++ b/docs/epy/googleapiclient.http.MediaFileUpload-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class MediaFileUpload</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#MediaFileUpload">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_29" name="uml_class_diagram_for_googleap_29">
+<center>  <map id="uml_class_diagram_for_googleap_30" name="uml_class_diagram_for_googleap_30">
 <area shape="rect" id="node1_11" href="googleapiclient.http.MediaFileUpload-class.html#__init__" title="Constructor." alt="" coords="17,297,596,316"/>
 <area shape="rect" id="node1_12" href="googleapiclient.http.MediaFileUpload-class.html#to_json" title="Creating a JSON representation of an instance of MediaFileUpload." alt="" coords="17,316,596,335"/>
 <area shape="rect" id="node1_13" href="googleapiclient.http.MediaFileUpload-class.html#from_json" title="googleapiclient.http.MediaFileUpload.from_json" alt="" coords="17,335,596,353"/>
@@ -74,7 +74,7 @@
 <area shape="rect" id="node3_21" href="googleapiclient.http.MediaUpload-class.html#new_from_json" title="Utility class method to instantiate a MediaUpload subclass from a JSON representation produced by to_json()." alt="" coords="239,36,373,55"/>
 <area shape="rect" id="node3" href="googleapiclient.http.MediaUpload-class.html" title="Describes a media object to upload." alt="" coords="226,5,385,61"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_29.gif" alt='' usemap="#uml_class_diagram_for_googleap_29" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_30.gif" alt='' usemap="#uml_class_diagram_for_googleap_30" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -392,7 +392,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.MediaInMemoryUpload-class.html b/docs/epy/googleapiclient.http.MediaInMemoryUpload-class.html
index 94c9560..fca3d07 100644
--- a/docs/epy/googleapiclient.http.MediaInMemoryUpload-class.html
+++ b/docs/epy/googleapiclient.http.MediaInMemoryUpload-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class MediaInMemoryUpload</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#MediaInMemoryUpload">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_30" name="uml_class_diagram_for_googleap_30">
+<center>  <map id="uml_class_diagram_for_googleap_31" name="uml_class_diagram_for_googleap_31">
 <area shape="rect" id="node1_10" href="googleapiclient.http.MediaInMemoryUpload-class.html#__init__" title="Create a new MediaInMemoryUpload." alt="" coords="17,316,689,335"/>
 <area shape="rect" id="node1" href="googleapiclient.http.MediaInMemoryUpload-class.html" title="MediaUpload for a chunk of bytes." alt="" coords="5,285,701,341"/>
 <area shape="rect" id="node2_11" href="googleapiclient.http.MediaIoBaseUpload-class.html#chunksize" title="Chunk size for resumable uploads." alt="" coords="269,111,437,129"/>
@@ -73,7 +73,7 @@
 <area shape="rect" id="node3_19" href="googleapiclient.http.MediaUpload-class.html#new_from_json" title="Utility class method to instantiate a MediaUpload subclass from a JSON representation produced by to_json()." alt="" coords="285,36,420,55"/>
 <area shape="rect" id="node3" href="googleapiclient.http.MediaUpload-class.html" title="Describes a media object to upload." alt="" coords="273,5,431,61"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_30.gif" alt='' usemap="#uml_class_diagram_for_googleap_30" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_31.gif" alt='' usemap="#uml_class_diagram_for_googleap_31" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -297,7 +297,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:25 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.MediaIoBaseDownload-class.html b/docs/epy/googleapiclient.http.MediaIoBaseDownload-class.html
index 1446275..cbed6d7 100644
--- a/docs/epy/googleapiclient.http.MediaIoBaseDownload-class.html
+++ b/docs/epy/googleapiclient.http.MediaIoBaseDownload-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class MediaIoBaseDownload</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#MediaIoBaseDownload">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_31" name="uml_class_diagram_for_googleap_31">
+<center>  <map id="uml_class_diagram_for_googleap_32" name="uml_class_diagram_for_googleap_32">
 <area shape="rect" id="node1_2" href="googleapiclient.http.MediaIoBaseDownload-class.html#__init__" title="Constructor." alt="" coords="18,36,395,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.http.MediaIoBaseDownload-class.html#next_chunk" title="Get the next chunk of the download." alt="" coords="18,55,395,73"/>
 <area shape="rect" id="node1" href="googleapiclient.http.MediaIoBaseDownload-class.html" title="&quot;Download media resources." alt="" coords="5,5,407,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_31.gif" alt='' usemap="#uml_class_diagram_for_googleap_31" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_32.gif" alt='' usemap="#uml_class_diagram_for_googleap_32" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -314,7 +314,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.MediaIoBaseUpload-class.html b/docs/epy/googleapiclient.http.MediaIoBaseUpload-class.html
index 60474e9..8f496a6 100644
--- a/docs/epy/googleapiclient.http.MediaIoBaseUpload-class.html
+++ b/docs/epy/googleapiclient.http.MediaIoBaseUpload-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class MediaIoBaseUpload</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#MediaIoBaseUpload">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_32" name="uml_class_diagram_for_googleap_32">
+<center>  <map id="uml_class_diagram_for_googleap_33" name="uml_class_diagram_for_googleap_33">
 <area shape="rect" id="node1_10" href="googleapiclient.http.MediaIoBaseUpload-class.html#__init__" title="Constructor." alt="" coords="18,111,518,129"/>
 <area shape="rect" id="node1_11" href="googleapiclient.http.MediaIoBaseUpload-class.html#chunksize" title="Chunk size for resumable uploads." alt="" coords="18,129,518,148"/>
 <area shape="rect" id="node1_12" href="googleapiclient.http.MediaIoBaseUpload-class.html#mimetype" title="Mime type of the body." alt="" coords="18,148,518,167"/>
@@ -72,7 +72,7 @@
 <area shape="rect" id="node2_19" href="googleapiclient.http.MediaUpload-class.html#new_from_json" title="Utility class method to instantiate a MediaUpload subclass from a JSON representation produced by to_json()." alt="" coords="201,36,335,55"/>
 <area shape="rect" id="node2" href="googleapiclient.http.MediaUpload-class.html" title="Describes a media object to upload." alt="" coords="188,5,347,61"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_32.gif" alt='' usemap="#uml_class_diagram_for_googleap_32" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_33.gif" alt='' usemap="#uml_class_diagram_for_googleap_33" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -674,7 +674,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.MediaUpload-class.html b/docs/epy/googleapiclient.http.MediaUpload-class.html
index 7549809..cad7ea8 100644
--- a/docs/epy/googleapiclient.http.MediaUpload-class.html
+++ b/docs/epy/googleapiclient.http.MediaUpload-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class MediaUpload</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#MediaUpload">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_33" name="uml_class_diagram_for_googleap_33">
+<center>  <map id="uml_class_diagram_for_googleap_34" name="uml_class_diagram_for_googleap_34">
 <area shape="rect" id="node1_9" href="googleapiclient.http.MediaUpload-class.html#chunksize" title="Chunk size for resumable uploads." alt="" coords="17,36,172,55"/>
 <area shape="rect" id="node1_10" href="googleapiclient.http.MediaUpload-class.html#mimetype" title="Mime type of the body." alt="" coords="17,55,172,73"/>
 <area shape="rect" id="node1_11" href="googleapiclient.http.MediaUpload-class.html#size" title="Size of upload." alt="" coords="17,73,172,92"/>
@@ -70,7 +70,7 @@
 <area shape="rect" id="node1_17" href="googleapiclient.http.MediaUpload-class.html#new_from_json" title="Utility class method to instantiate a MediaUpload subclass from a JSON representation produced by to_json()." alt="" coords="17,185,172,204"/>
 <area shape="rect" id="node1" href="googleapiclient.http.MediaUpload-class.html" title="Describes a media object to upload." alt="" coords="5,5,184,211"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_33.gif" alt='' usemap="#uml_class_diagram_for_googleap_33" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_34.gif" alt='' usemap="#uml_class_diagram_for_googleap_34" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -681,7 +681,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.MediaUploadProgress-class.html b/docs/epy/googleapiclient.http.MediaUploadProgress-class.html
index 653d6ae..19bf308 100644
--- a/docs/epy/googleapiclient.http.MediaUploadProgress-class.html
+++ b/docs/epy/googleapiclient.http.MediaUploadProgress-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class MediaUploadProgress</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#MediaUploadProgress">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_34" name="uml_class_diagram_for_googleap_34">
+<center>  <map id="uml_class_diagram_for_googleap_35" name="uml_class_diagram_for_googleap_35">
 <area shape="rect" id="node1_2" href="googleapiclient.http.MediaUploadProgress-class.html#__init__" title="Constructor." alt="" coords="18,36,291,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.http.MediaUploadProgress-class.html#progress" title="Percent of upload completed, as a float." alt="" coords="18,55,291,73"/>
 <area shape="rect" id="node1" href="googleapiclient.http.MediaUploadProgress-class.html" title="Status of a resumable upload." alt="" coords="5,5,303,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_34.gif" alt='' usemap="#uml_class_diagram_for_googleap_34" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_35.gif" alt='' usemap="#uml_class_diagram_for_googleap_35" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -273,7 +273,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http.RequestMockBuilder-class.html b/docs/epy/googleapiclient.http.RequestMockBuilder-class.html
index 11dc3d1..d9a8355 100644
--- a/docs/epy/googleapiclient.http.RequestMockBuilder-class.html
+++ b/docs/epy/googleapiclient.http.RequestMockBuilder-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class RequestMockBuilder</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#RequestMockBuilder">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_35" name="uml_class_diagram_for_googleap_35">
+<center>  <map id="uml_class_diagram_for_googleap_36" name="uml_class_diagram_for_googleap_36">
 <area shape="rect" id="node1_2" href="googleapiclient.http.RequestMockBuilder-class.html#__init__" title="Constructor for RequestMockBuilder" alt="" coords="17,36,687,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.http.RequestMockBuilder-class.html#__call__" title="Implements the callable interface that discovery.build() expects of requestBuilder, which is to build an object compatible with HttpRequest.execute()." alt="" coords="17,55,687,73"/>
 <area shape="rect" id="node1" href="googleapiclient.http.RequestMockBuilder-class.html" title="A simple mock of HttpRequest" alt="" coords="5,5,699,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_35.gif" alt='' usemap="#uml_class_diagram_for_googleap_35" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_36.gif" alt='' usemap="#uml_class_diagram_for_googleap_36" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -319,7 +319,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.http._StreamSlice-class.html b/docs/epy/googleapiclient.http._StreamSlice-class.html
index 04beb71..6ed6d8c 100644
--- a/docs/epy/googleapiclient.http._StreamSlice-class.html
+++ b/docs/epy/googleapiclient.http._StreamSlice-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class _StreamSlice</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.http-pysrc.html#_StreamSlice">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_36" name="uml_class_diagram_for_googleap_36">
+<center>  <map id="uml_class_diagram_for_googleap_37" name="uml_class_diagram_for_googleap_37">
 <area shape="rect" id="node1_2" href="googleapiclient.http._StreamSlice-class.html#__init__" title="Constructor." alt="" coords="18,36,254,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.http._StreamSlice-class.html#read" title="Read n bytes." alt="" coords="18,55,254,73"/>
 <area shape="rect" id="node1" href="googleapiclient.http._StreamSlice-class.html" title="Truncated stream." alt="" coords="5,5,265,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_36.gif" alt='' usemap="#uml_class_diagram_for_googleap_36" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_37.gif" alt='' usemap="#uml_class_diagram_for_googleap_37" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -285,7 +285,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.mimeparse-module.html b/docs/epy/googleapiclient.mimeparse-module.html
index 8bf7d7a..9afd7ac 100644
--- a/docs/epy/googleapiclient.mimeparse-module.html
+++ b/docs/epy/googleapiclient.mimeparse-module.html
@@ -490,7 +490,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.mimeparse-pysrc.html b/docs/epy/googleapiclient.mimeparse-pysrc.html
index 965dd18..fc093a9 100644
--- a/docs/epy/googleapiclient.mimeparse-pysrc.html
+++ b/docs/epy/googleapiclient.mimeparse-pysrc.html
@@ -264,7 +264,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.model-module.html b/docs/epy/googleapiclient.model-module.html
index b2efe4f..4d3a738 100644
--- a/docs/epy/googleapiclient.model-module.html
+++ b/docs/epy/googleapiclient.model-module.html
@@ -209,6 +209,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
+        <a name="LOGGER"></a><span class="summary-name">LOGGER</span> = <code title="logging.getLogger(__name__)">logging.getLogger(__name__)</code>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
         <a name="dump_request_response"></a><span class="summary-name">dump_request_response</span> = <code title="False">False</code>
     </td>
   </tr>
@@ -299,7 +306,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.model-pysrc.html b/docs/epy/googleapiclient.model-pysrc.html
index d13592c..10c32da 100644
--- a/docs/epy/googleapiclient.model-pysrc.html
+++ b/docs/epy/googleapiclient.model-pysrc.html
@@ -91,452 +91,518 @@
 <a name="L33"></a><tt class="py-lineno"> 33</tt>  <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-1" class="py-name"><a title="googleapiclient" class="py-name" href="#" onclick="return doclink('link-1', 'googleapiclient', 'link-0');">googleapiclient</a></tt><tt class="py-op">.</tt><tt id="link-2" class="py-name" targets="Module googleapiclient.errors=googleapiclient.errors-module.html"><a title="googleapiclient.errors" class="py-name" href="#" onclick="return doclink('link-2', 'errors', 'link-2');">errors</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Class googleapiclient.errors.HttpError=googleapiclient.errors.HttpError-class.html"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-3', 'HttpError', 'link-3');">HttpError</a></tt> </tt>
 <a name="L34"></a><tt class="py-lineno"> 34</tt>  <tt class="py-line"> </tt>
 <a name="L35"></a><tt class="py-lineno"> 35</tt>  <tt class="py-line"> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable googleapiclient.model.dump_request_response=googleapiclient.model-module.html#dump_request_response"><a title="googleapiclient.model.dump_request_response" class="py-name" href="#" onclick="return doclink('link-4', 'dump_request_response', 'link-4');">dump_request_response</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="_abstract"></a><div id="_abstract-def"><a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt> <a class="py-toggle" href="#" id="_abstract-toggle" onclick="return toggle('_abstract');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model-module.html#_abstract">_abstract</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_abstract-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_abstract-expanded"><a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line">  <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">'You need to override this function'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L41"></a><tt class="py-lineno"> 41</tt>  <tt class="py-line"> </tt>
-<a name="Model"></a><div id="Model-def"><a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line"> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt> <a class="py-toggle" href="#" id="Model-toggle" onclick="return toggle('Model');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.Model-class.html">Model</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Model-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Model-expanded"><a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model base class.</tt> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line"><tt class="py-docstring">  All Model classes should implement this interface.</tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-docstring">  The Model serializes and de-serializes between a wire</tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-docstring">  format such as JSON and a Python object representation.</tt> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"> </tt>
-<a name="Model.request"></a><div id="Model.request-def"><a name="L51"></a><tt class="py-lineno"> 51</tt> <a class="py-toggle" href="#" id="Model.request-toggle" onclick="return toggle('Model.request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.Model-class.html#request">request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">,</tt> <tt class="py-param">path_params</tt><tt class="py-op">,</tt> <tt class="py-param">query_params</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Model.request-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Model.request-expanded"><a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line">    <tt class="py-docstring">"""Updates outgoing requests with a serialized body.</tt> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, request headers</tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"><tt class="py-docstring">      path_params: dict, parameters that appear in the request path</tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-docstring">      query_params: dict, parameters that appear in the query</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-docstring">      body_value: object, the request body as a Python object, which must be</tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-docstring">                  serializable.</tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt class="py-docstring">      A tuple of (headers, path_params, query, body)</tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, request headers</tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"><tt class="py-docstring">      path_params: dict, parameters that appear in the request path</tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"><tt class="py-docstring">      query: string, query part of the request URI</tt> </tt>
-<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"><tt class="py-docstring">      body: string, the body serialized in the desired wire format.</tt> </tt>
-<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line">    <tt id="link-5" class="py-name" targets="Function googleapiclient.model._abstract()=googleapiclient.model-module.html#_abstract"><a title="googleapiclient.model._abstract" class="py-name" href="#" onclick="return doclink('link-5', '_abstract', 'link-5');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"> </tt>
-<a name="Model.response"></a><div id="Model.response-def"><a name="L70"></a><tt class="py-lineno"> 70</tt> <a class="py-toggle" href="#" id="Model.response-toggle" onclick="return toggle('Model.response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.Model-class.html#response">response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Model.response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Model.response-expanded"><a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert the response wire format into a Python object.</tt> </tt>
-<a name="L72"></a><tt class="py-lineno"> 72</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt class="py-docstring">      resp: httplib2.Response, the HTTP response headers and status</tt> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the body of the HTTP response</tt> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-docstring">      The body de-serialized as a Python object.</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if a non 2xx response is received.</tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line">    <tt id="link-6" class="py-name"><a title="googleapiclient.model._abstract" class="py-name" href="#" onclick="return doclink('link-6', '_abstract', 'link-5');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"> </tt>
-<a name="BaseModel"></a><div id="BaseModel-def"><a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line"> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt> <a class="py-toggle" href="#" id="BaseModel-toggle" onclick="return toggle('BaseModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html">BaseModel</a><tt class="py-op">(</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BaseModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="BaseModel-expanded"><a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base model class.</tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line"><tt class="py-docstring">  Subclasses should provide implementations for the "serialize" and</tt> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring">  "deserialize" methods, as well as values for the following class attributes.</tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"><tt class="py-docstring">  Attributes:</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"><tt class="py-docstring">    accept: The value to use for the HTTP Accept header.</tt> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"><tt class="py-docstring">    content_type: The value to use for the HTTP Content-type header.</tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"><tt class="py-docstring">    no_content_response: The value to return when deserializing a 204 "No</tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"><tt class="py-docstring">        Content" response.</tt> </tt>
-<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"><tt class="py-docstring">    alt_param: The value to supply as the "alt" query parameter for requests.</tt> </tt>
-<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line"> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line">  <tt id="link-7" class="py-name" targets="Variable googleapiclient.model.BaseModel.accept=googleapiclient.model.BaseModel-class.html#accept,Variable googleapiclient.model.JsonModel.accept=googleapiclient.model.JsonModel-class.html#accept,Variable googleapiclient.model.MediaModel.accept=googleapiclient.model.MediaModel-class.html#accept,Variable googleapiclient.model.ProtocolBufferModel.accept=googleapiclient.model.ProtocolBufferModel-class.html#accept,Variable googleapiclient.model.RawModel.accept=googleapiclient.model.RawModel-class.html#accept"><a title="googleapiclient.model.BaseModel.accept
+<a name="L36"></a><tt class="py-lineno"> 36</tt>  <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable googleapiclient.discovery_cache.LOGGER=googleapiclient.discovery_cache-module.html#LOGGER,Variable googleapiclient.discovery_cache.appengine_memcache.LOGGER=googleapiclient.discovery_cache.appengine_memcache-module.html#LOGGER,Variable googleapiclient.discovery_cache.file_cache.LOGGER=googleapiclient.discovery_cache.file_cache-module.html#LOGGER,Variable googleapiclient.http.LOGGER=googleapiclient.http-module.html#LOGGER,Variable googleapiclient.model.LOGGER=googleapiclient.model-module.html#LOGGER"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-4', 'LOGGER', 'link-4');">LOGGER</a></tt> <tt class="py-op">=</tt> <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">getLogger</tt><tt class="py-op">(</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt> </tt>
+<a name="L37"></a><tt class="py-lineno"> 37</tt>  <tt class="py-line"> </tt>
+<a name="L38"></a><tt class="py-lineno"> 38</tt>  <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable googleapiclient.model.dump_request_response=googleapiclient.model-module.html#dump_request_response"><a title="googleapiclient.model.dump_request_response" class="py-name" href="#" onclick="return doclink('link-5', 'dump_request_response', 'link-5');">dump_request_response</a></tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
+<a name="_abstract"></a><div id="_abstract-def"><a name="L39"></a><tt class="py-lineno"> 39</tt>  <tt class="py-line"> </tt>
+<a name="L40"></a><tt class="py-lineno"> 40</tt>  <tt class="py-line"> </tt>
+<a name="L41"></a><tt class="py-lineno"> 41</tt> <a class="py-toggle" href="#" id="_abstract-toggle" onclick="return toggle('_abstract');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model-module.html#_abstract">_abstract</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_abstract-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_abstract-expanded"><a name="L42"></a><tt class="py-lineno"> 42</tt>  <tt class="py-line">  <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">'You need to override this function'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L43"></a><tt class="py-lineno"> 43</tt>  <tt class="py-line"> </tt>
+<a name="Model"></a><div id="Model-def"><a name="L44"></a><tt class="py-lineno"> 44</tt>  <tt class="py-line"> </tt>
+<a name="L45"></a><tt class="py-lineno"> 45</tt> <a class="py-toggle" href="#" id="Model-toggle" onclick="return toggle('Model');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.Model-class.html">Model</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Model-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="Model-expanded"><a name="L46"></a><tt class="py-lineno"> 46</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model base class.</tt> </tt>
+<a name="L47"></a><tt class="py-lineno"> 47</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L48"></a><tt class="py-lineno"> 48</tt>  <tt class="py-line"><tt class="py-docstring">  All Model classes should implement this interface.</tt> </tt>
+<a name="L49"></a><tt class="py-lineno"> 49</tt>  <tt class="py-line"><tt class="py-docstring">  The Model serializes and de-serializes between a wire</tt> </tt>
+<a name="L50"></a><tt class="py-lineno"> 50</tt>  <tt class="py-line"><tt class="py-docstring">  format such as JSON and a Python object representation.</tt> </tt>
+<a name="L51"></a><tt class="py-lineno"> 51</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L52"></a><tt class="py-lineno"> 52</tt>  <tt class="py-line"> </tt>
+<a name="Model.request"></a><div id="Model.request-def"><a name="L53"></a><tt class="py-lineno"> 53</tt> <a class="py-toggle" href="#" id="Model.request-toggle" onclick="return toggle('Model.request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.Model-class.html#request">request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">,</tt> <tt class="py-param">path_params</tt><tt class="py-op">,</tt> <tt class="py-param">query_params</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Model.request-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Model.request-expanded"><a name="L54"></a><tt class="py-lineno"> 54</tt>  <tt class="py-line">    <tt class="py-docstring">"""Updates outgoing requests with a serialized body.</tt> </tt>
+<a name="L55"></a><tt class="py-lineno"> 55</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L56"></a><tt class="py-lineno"> 56</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L57"></a><tt class="py-lineno"> 57</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, request headers</tt> </tt>
+<a name="L58"></a><tt class="py-lineno"> 58</tt>  <tt class="py-line"><tt class="py-docstring">      path_params: dict, parameters that appear in the request path</tt> </tt>
+<a name="L59"></a><tt class="py-lineno"> 59</tt>  <tt class="py-line"><tt class="py-docstring">      query_params: dict, parameters that appear in the query</tt> </tt>
+<a name="L60"></a><tt class="py-lineno"> 60</tt>  <tt class="py-line"><tt class="py-docstring">      body_value: object, the request body as a Python object, which must be</tt> </tt>
+<a name="L61"></a><tt class="py-lineno"> 61</tt>  <tt class="py-line"><tt class="py-docstring">                  serializable.</tt> </tt>
+<a name="L62"></a><tt class="py-lineno"> 62</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L63"></a><tt class="py-lineno"> 63</tt>  <tt class="py-line"><tt class="py-docstring">      A tuple of (headers, path_params, query, body)</tt> </tt>
+<a name="L64"></a><tt class="py-lineno"> 64</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L65"></a><tt class="py-lineno"> 65</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, request headers</tt> </tt>
+<a name="L66"></a><tt class="py-lineno"> 66</tt>  <tt class="py-line"><tt class="py-docstring">      path_params: dict, parameters that appear in the request path</tt> </tt>
+<a name="L67"></a><tt class="py-lineno"> 67</tt>  <tt class="py-line"><tt class="py-docstring">      query: string, query part of the request URI</tt> </tt>
+<a name="L68"></a><tt class="py-lineno"> 68</tt>  <tt class="py-line"><tt class="py-docstring">      body: string, the body serialized in the desired wire format.</tt> </tt>
+<a name="L69"></a><tt class="py-lineno"> 69</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L70"></a><tt class="py-lineno"> 70</tt>  <tt class="py-line">    <tt id="link-6" class="py-name" targets="Function googleapiclient.model._abstract()=googleapiclient.model-module.html#_abstract"><a title="googleapiclient.model._abstract" class="py-name" href="#" onclick="return doclink('link-6', '_abstract', 'link-6');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L71"></a><tt class="py-lineno"> 71</tt>  <tt class="py-line"> </tt>
+<a name="Model.response"></a><div id="Model.response-def"><a name="L72"></a><tt class="py-lineno"> 72</tt> <a class="py-toggle" href="#" id="Model.response-toggle" onclick="return toggle('Model.response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.Model-class.html#response">response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="Model.response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="Model.response-expanded"><a name="L73"></a><tt class="py-lineno"> 73</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert the response wire format into a Python object.</tt> </tt>
+<a name="L74"></a><tt class="py-lineno"> 74</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L75"></a><tt class="py-lineno"> 75</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L76"></a><tt class="py-lineno"> 76</tt>  <tt class="py-line"><tt class="py-docstring">      resp: httplib2.Response, the HTTP response headers and status</tt> </tt>
+<a name="L77"></a><tt class="py-lineno"> 77</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the body of the HTTP response</tt> </tt>
+<a name="L78"></a><tt class="py-lineno"> 78</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L79"></a><tt class="py-lineno"> 79</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L80"></a><tt class="py-lineno"> 80</tt>  <tt class="py-line"><tt class="py-docstring">      The body de-serialized as a Python object.</tt> </tt>
+<a name="L81"></a><tt class="py-lineno"> 81</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L82"></a><tt class="py-lineno"> 82</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L83"></a><tt class="py-lineno"> 83</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if a non 2xx response is received.</tt> </tt>
+<a name="L84"></a><tt class="py-lineno"> 84</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L85"></a><tt class="py-lineno"> 85</tt>  <tt class="py-line">    <tt id="link-7" class="py-name"><a title="googleapiclient.model._abstract" class="py-name" href="#" onclick="return doclink('link-7', '_abstract', 'link-6');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L86"></a><tt class="py-lineno"> 86</tt>  <tt class="py-line"> </tt>
+<a name="BaseModel"></a><div id="BaseModel-def"><a name="L87"></a><tt class="py-lineno"> 87</tt>  <tt class="py-line"> </tt>
+<a name="L88"></a><tt class="py-lineno"> 88</tt> <a class="py-toggle" href="#" id="BaseModel-toggle" onclick="return toggle('BaseModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html">BaseModel</a><tt class="py-op">(</tt><tt class="py-base-class">Model</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BaseModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="BaseModel-expanded"><a name="L89"></a><tt class="py-lineno"> 89</tt>  <tt class="py-line">  <tt class="py-docstring">"""Base model class.</tt> </tt>
+<a name="L90"></a><tt class="py-lineno"> 90</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L91"></a><tt class="py-lineno"> 91</tt>  <tt class="py-line"><tt class="py-docstring">  Subclasses should provide implementations for the "serialize" and</tt> </tt>
+<a name="L92"></a><tt class="py-lineno"> 92</tt>  <tt class="py-line"><tt class="py-docstring">  "deserialize" methods, as well as values for the following class attributes.</tt> </tt>
+<a name="L93"></a><tt class="py-lineno"> 93</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L94"></a><tt class="py-lineno"> 94</tt>  <tt class="py-line"><tt class="py-docstring">  Attributes:</tt> </tt>
+<a name="L95"></a><tt class="py-lineno"> 95</tt>  <tt class="py-line"><tt class="py-docstring">    accept: The value to use for the HTTP Accept header.</tt> </tt>
+<a name="L96"></a><tt class="py-lineno"> 96</tt>  <tt class="py-line"><tt class="py-docstring">    content_type: The value to use for the HTTP Content-type header.</tt> </tt>
+<a name="L97"></a><tt class="py-lineno"> 97</tt>  <tt class="py-line"><tt class="py-docstring">    no_content_response: The value to return when deserializing a 204 "No</tt> </tt>
+<a name="L98"></a><tt class="py-lineno"> 98</tt>  <tt class="py-line"><tt class="py-docstring">        Content" response.</tt> </tt>
+<a name="L99"></a><tt class="py-lineno"> 99</tt>  <tt class="py-line"><tt class="py-docstring">    alt_param: The value to supply as the "alt" query parameter for requests.</tt> </tt>
+<a name="L100"></a><tt class="py-lineno">100</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line"> </tt>
+<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">  <tt id="link-8" class="py-name" targets="Variable googleapiclient.model.BaseModel.accept=googleapiclient.model.BaseModel-class.html#accept,Variable googleapiclient.model.JsonModel.accept=googleapiclient.model.JsonModel-class.html#accept,Variable googleapiclient.model.MediaModel.accept=googleapiclient.model.MediaModel-class.html#accept,Variable googleapiclient.model.ProtocolBufferModel.accept=googleapiclient.model.ProtocolBufferModel-class.html#accept,Variable googleapiclient.model.RawModel.accept=googleapiclient.model.RawModel-class.html#accept"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-7', 'accept', 'link-7');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt>  <tt class="py-line">  <tt id="link-8" class="py-name" targets="Variable googleapiclient.model.BaseModel.content_type=googleapiclient.model.BaseModel-class.html#content_type,Variable googleapiclient.model.JsonModel.content_type=googleapiclient.model.JsonModel-class.html#content_type,Variable googleapiclient.model.MediaModel.content_type=googleapiclient.model.MediaModel-class.html#content_type,Variable googleapiclient.model.ProtocolBufferModel.content_type=googleapiclient.model.ProtocolBufferModel-class.html#content_type,Variable googleapiclient.model.RawModel.content_type=googleapiclient.model.RawModel-class.html#content_type"><a title="googleapiclient.model.BaseModel.content_type
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-8', 'accept', 'link-8');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">  <tt id="link-9" class="py-name" targets="Variable googleapiclient.model.BaseModel.content_type=googleapiclient.model.BaseModel-class.html#content_type,Variable googleapiclient.model.JsonModel.content_type=googleapiclient.model.JsonModel-class.html#content_type,Variable googleapiclient.model.MediaModel.content_type=googleapiclient.model.MediaModel-class.html#content_type,Variable googleapiclient.model.ProtocolBufferModel.content_type=googleapiclient.model.ProtocolBufferModel-class.html#content_type,Variable googleapiclient.model.RawModel.content_type=googleapiclient.model.RawModel-class.html#content_type"><a title="googleapiclient.model.BaseModel.content_type
 googleapiclient.model.JsonModel.content_type
 googleapiclient.model.MediaModel.content_type
 googleapiclient.model.ProtocolBufferModel.content_type
-googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-8', 'content_type', 'link-8');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L102"></a><tt class="py-lineno">102</tt>  <tt class="py-line">  <tt id="link-9" class="py-name" targets="Variable googleapiclient.model.BaseModel.no_content_response=googleapiclient.model.BaseModel-class.html#no_content_response,Method googleapiclient.model.JsonModel.no_content_response()=googleapiclient.model.JsonModel-class.html#no_content_response,Method googleapiclient.model.MediaModel.no_content_response()=googleapiclient.model.MediaModel-class.html#no_content_response,Method googleapiclient.model.ProtocolBufferModel.no_content_response()=googleapiclient.model.ProtocolBufferModel-class.html#no_content_response,Method googleapiclient.model.RawModel.no_content_response()=googleapiclient.model.RawModel-class.html#no_content_response"><a title="googleapiclient.model.BaseModel.no_content_response
+googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-9', 'content_type', 'link-9');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line">  <tt id="link-10" class="py-name" targets="Variable googleapiclient.model.BaseModel.no_content_response=googleapiclient.model.BaseModel-class.html#no_content_response,Method googleapiclient.model.JsonModel.no_content_response()=googleapiclient.model.JsonModel-class.html#no_content_response,Method googleapiclient.model.MediaModel.no_content_response()=googleapiclient.model.MediaModel-class.html#no_content_response,Method googleapiclient.model.ProtocolBufferModel.no_content_response()=googleapiclient.model.ProtocolBufferModel-class.html#no_content_response,Method googleapiclient.model.RawModel.no_content_response()=googleapiclient.model.RawModel-class.html#no_content_response"><a title="googleapiclient.model.BaseModel.no_content_response
 googleapiclient.model.JsonModel.no_content_response
 googleapiclient.model.MediaModel.no_content_response
 googleapiclient.model.ProtocolBufferModel.no_content_response
-googleapiclient.model.RawModel.no_content_response" class="py-name" href="#" onclick="return doclink('link-9', 'no_content_response', 'link-9');">no_content_response</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt>  <tt class="py-line">  <tt id="link-10" class="py-name" targets="Variable googleapiclient.model.BaseModel.alt_param=googleapiclient.model.BaseModel-class.html#alt_param,Variable googleapiclient.model.JsonModel.alt_param=googleapiclient.model.JsonModel-class.html#alt_param,Variable googleapiclient.model.MediaModel.alt_param=googleapiclient.model.MediaModel-class.html#alt_param,Variable googleapiclient.model.ProtocolBufferModel.alt_param=googleapiclient.model.ProtocolBufferModel-class.html#alt_param,Variable googleapiclient.model.RawModel.alt_param=googleapiclient.model.RawModel-class.html#alt_param"><a title="googleapiclient.model.BaseModel.alt_param
+googleapiclient.model.RawModel.no_content_response" class="py-name" href="#" onclick="return doclink('link-10', 'no_content_response', 'link-10');">no_content_response</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L105"></a><tt class="py-lineno">105</tt>  <tt class="py-line">  <tt id="link-11" class="py-name" targets="Variable googleapiclient.model.BaseModel.alt_param=googleapiclient.model.BaseModel-class.html#alt_param,Variable googleapiclient.model.JsonModel.alt_param=googleapiclient.model.JsonModel-class.html#alt_param,Variable googleapiclient.model.MediaModel.alt_param=googleapiclient.model.MediaModel-class.html#alt_param,Variable googleapiclient.model.ProtocolBufferModel.alt_param=googleapiclient.model.ProtocolBufferModel-class.html#alt_param,Variable googleapiclient.model.RawModel.alt_param=googleapiclient.model.RawModel-class.html#alt_param"><a title="googleapiclient.model.BaseModel.alt_param
 googleapiclient.model.JsonModel.alt_param
 googleapiclient.model.MediaModel.alt_param
 googleapiclient.model.ProtocolBufferModel.alt_param
-googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-10', 'alt_param', 'link-10');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt>  <tt class="py-line"> </tt>
-<a name="BaseModel._log_request"></a><div id="BaseModel._log_request-def"><a name="L105"></a><tt class="py-lineno">105</tt> <a class="py-toggle" href="#" id="BaseModel._log_request-toggle" onclick="return toggle('BaseModel._log_request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#_log_request">_log_request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">,</tt> <tt class="py-param">path_params</tt><tt class="py-op">,</tt> <tt class="py-param">query</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BaseModel._log_request-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel._log_request-expanded"><a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line">    <tt class="py-docstring">"""Logs debugging information about the request if requested."""</tt> </tt>
-<a name="L107"></a><tt class="py-lineno">107</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-11" class="py-name"><a title="googleapiclient.model.dump_request_response" class="py-name" href="#" onclick="return doclink('link-11', 'dump_request_response', 'link-4');">dump_request_response</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'--request-start--'</tt><tt class="py-op">)</tt> </tt>
-<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-headers-start-'</tt><tt class="py-op">)</tt> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">        <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'%s: %s'</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-headers-end-'</tt><tt class="py-op">)</tt> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-path-parameters-start-'</tt><tt class="py-op">)</tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">path_params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">        <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'%s: %s'</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-path-parameters-end-'</tt><tt class="py-op">)</tt> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'body: %s'</tt><tt class="py-op">,</tt> <tt id="link-12" class="py-name" targets="Method googleapiclient.channel.Channel.body()=googleapiclient.channel.Channel-class.html#body"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-12', 'body', 'link-12');">body</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'query: %s'</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'--request-end--'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line"> </tt>
-<a name="BaseModel.request"></a><div id="BaseModel.request-def"><a name="L121"></a><tt class="py-lineno">121</tt> <a class="py-toggle" href="#" id="BaseModel.request-toggle" onclick="return toggle('BaseModel.request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#request">request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">,</tt> <tt class="py-param">path_params</tt><tt class="py-op">,</tt> <tt class="py-param">query_params</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BaseModel.request-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel.request-expanded"><a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line">    <tt class="py-docstring">"""Updates outgoing requests with a serialized body.</tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, request headers</tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"><tt class="py-docstring">      path_params: dict, parameters that appear in the request path</tt> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"><tt class="py-docstring">      query_params: dict, parameters that appear in the query</tt> </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line"><tt class="py-docstring">      body_value: object, the request body as a Python object, which must be</tt> </tt>
-<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"><tt class="py-docstring">                  serializable by json.</tt> </tt>
-<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"><tt class="py-docstring">      A tuple of (headers, path_params, query, body)</tt> </tt>
-<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, request headers</tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line"><tt class="py-docstring">      path_params: dict, parameters that appear in the request path</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"><tt class="py-docstring">      query: string, query part of the request URI</tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-docstring">      body: string, the body serialized as JSON</tt> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line">    <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Method googleapiclient.model.BaseModel._build_query()=googleapiclient.model.BaseModel-class.html#_build_query"><a title="googleapiclient.model.BaseModel._build_query" class="py-name" href="#" onclick="return doclink('link-13', '_build_query', 'link-13');">_build_query</a></tt><tt class="py-op">(</tt><tt class="py-name">query_params</tt><tt class="py-op">)</tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'accept'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-11', 'alt_param', 'link-11');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L106"></a><tt class="py-lineno">106</tt>  <tt class="py-line"> </tt>
+<a name="BaseModel._log_request"></a><div id="BaseModel._log_request-def"><a name="L107"></a><tt class="py-lineno">107</tt> <a class="py-toggle" href="#" id="BaseModel._log_request-toggle" onclick="return toggle('BaseModel._log_request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#_log_request">_log_request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">,</tt> <tt class="py-param">path_params</tt><tt class="py-op">,</tt> <tt class="py-param">query</tt><tt class="py-op">,</tt> <tt class="py-param">body</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BaseModel._log_request-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel._log_request-expanded"><a name="L108"></a><tt class="py-lineno">108</tt>  <tt class="py-line">    <tt class="py-docstring">"""Logs debugging information about the request if requested."""</tt> </tt>
+<a name="L109"></a><tt class="py-lineno">109</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-12" class="py-name"><a title="googleapiclient.model.dump_request_response" class="py-name" href="#" onclick="return doclink('link-12', 'dump_request_response', 'link-5');">dump_request_response</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L110"></a><tt class="py-lineno">110</tt>  <tt class="py-line">      <tt id="link-13" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-13', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'--request-start--'</tt><tt class="py-op">)</tt> </tt>
+<a name="L111"></a><tt class="py-lineno">111</tt>  <tt class="py-line">      <tt id="link-14" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-14', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-headers-start-'</tt><tt class="py-op">)</tt> </tt>
+<a name="L112"></a><tt class="py-lineno">112</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L113"></a><tt class="py-lineno">113</tt>  <tt class="py-line">        <tt id="link-15" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-15', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'%s: %s'</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
+<a name="L114"></a><tt class="py-lineno">114</tt>  <tt class="py-line">      <tt id="link-16" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-16', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-headers-end-'</tt><tt class="py-op">)</tt> </tt>
+<a name="L115"></a><tt class="py-lineno">115</tt>  <tt class="py-line">      <tt id="link-17" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-17', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-path-parameters-start-'</tt><tt class="py-op">)</tt> </tt>
+<a name="L116"></a><tt class="py-lineno">116</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">path_params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L117"></a><tt class="py-lineno">117</tt>  <tt class="py-line">        <tt id="link-18" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-18', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'%s: %s'</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
+<a name="L118"></a><tt class="py-lineno">118</tt>  <tt class="py-line">      <tt id="link-19" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-19', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'-path-parameters-end-'</tt><tt class="py-op">)</tt> </tt>
+<a name="L119"></a><tt class="py-lineno">119</tt>  <tt class="py-line">      <tt id="link-20" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-20', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'body: %s'</tt><tt class="py-op">,</tt> <tt id="link-21" class="py-name" targets="Method googleapiclient.channel.Channel.body()=googleapiclient.channel.Channel-class.html#body"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-21', 'body', 'link-21');">body</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L120"></a><tt class="py-lineno">120</tt>  <tt class="py-line">      <tt id="link-22" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-22', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'query: %s'</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">)</tt> </tt>
+<a name="L121"></a><tt class="py-lineno">121</tt>  <tt class="py-line">      <tt id="link-23" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-23', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'--request-end--'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L122"></a><tt class="py-lineno">122</tt>  <tt class="py-line"> </tt>
+<a name="BaseModel.request"></a><div id="BaseModel.request-def"><a name="L123"></a><tt class="py-lineno">123</tt> <a class="py-toggle" href="#" id="BaseModel.request-toggle" onclick="return toggle('BaseModel.request');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#request">request</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">headers</tt><tt class="py-op">,</tt> <tt class="py-param">path_params</tt><tt class="py-op">,</tt> <tt class="py-param">query_params</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BaseModel.request-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel.request-expanded"><a name="L124"></a><tt class="py-lineno">124</tt>  <tt class="py-line">    <tt class="py-docstring">"""Updates outgoing requests with a serialized body.</tt> </tt>
+<a name="L125"></a><tt class="py-lineno">125</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L126"></a><tt class="py-lineno">126</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L127"></a><tt class="py-lineno">127</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, request headers</tt> </tt>
+<a name="L128"></a><tt class="py-lineno">128</tt>  <tt class="py-line"><tt class="py-docstring">      path_params: dict, parameters that appear in the request path</tt> </tt>
+<a name="L129"></a><tt class="py-lineno">129</tt>  <tt class="py-line"><tt class="py-docstring">      query_params: dict, parameters that appear in the query</tt> </tt>
+<a name="L130"></a><tt class="py-lineno">130</tt>  <tt class="py-line"><tt class="py-docstring">      body_value: object, the request body as a Python object, which must be</tt> </tt>
+<a name="L131"></a><tt class="py-lineno">131</tt>  <tt class="py-line"><tt class="py-docstring">                  serializable by json.</tt> </tt>
+<a name="L132"></a><tt class="py-lineno">132</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L133"></a><tt class="py-lineno">133</tt>  <tt class="py-line"><tt class="py-docstring">      A tuple of (headers, path_params, query, body)</tt> </tt>
+<a name="L134"></a><tt class="py-lineno">134</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L135"></a><tt class="py-lineno">135</tt>  <tt class="py-line"><tt class="py-docstring">      headers: dict, request headers</tt> </tt>
+<a name="L136"></a><tt class="py-lineno">136</tt>  <tt class="py-line"><tt class="py-docstring">      path_params: dict, parameters that appear in the request path</tt> </tt>
+<a name="L137"></a><tt class="py-lineno">137</tt>  <tt class="py-line"><tt class="py-docstring">      query: string, query part of the request URI</tt> </tt>
+<a name="L138"></a><tt class="py-lineno">138</tt>  <tt class="py-line"><tt class="py-docstring">      body: string, the body serialized as JSON</tt> </tt>
+<a name="L139"></a><tt class="py-lineno">139</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line">    <tt class="py-name">query</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Method googleapiclient.model.BaseModel._build_query()=googleapiclient.model.BaseModel-class.html#_build_query"><a title="googleapiclient.model.BaseModel._build_query" class="py-name" href="#" onclick="return doclink('link-24', '_build_query', 'link-24');">_build_query</a></tt><tt class="py-op">(</tt><tt class="py-name">query_params</tt><tt class="py-op">)</tt> </tt>
+<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'accept'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-14', 'accept', 'link-7');">accept</a></tt> </tt>
-<a name="L140"></a><tt class="py-lineno">140</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'accept-encoding'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'gzip, deflate'</tt> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'user-agent'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">+=</tt> <tt class="py-string">' '</tt> </tt>
-<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">+=</tt> <tt class="py-string">'google-api-python-client/%s (gzip)'</tt> <tt class="py-op">%</tt> <tt class="py-name">__version__</tt> </tt>
-<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line"> </tt>
-<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">body_value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-25', 'accept', 'link-8');">accept</a></tt> </tt>
+<a name="L142"></a><tt class="py-lineno">142</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'accept-encoding'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'gzip, deflate'</tt> </tt>
+<a name="L143"></a><tt class="py-lineno">143</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-string">'user-agent'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">headers</tt><tt class="py-op">:</tt> </tt>
+<a name="L144"></a><tt class="py-lineno">144</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">+=</tt> <tt class="py-string">' '</tt> </tt>
+<a name="L145"></a><tt class="py-lineno">145</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L146"></a><tt class="py-lineno">146</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
+<a name="L147"></a><tt class="py-lineno">147</tt>  <tt class="py-line">    <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'user-agent'</tt><tt class="py-op">]</tt> <tt class="py-op">+=</tt> <tt class="py-string">'google-api-python-client/%s (gzip)'</tt> <tt class="py-op">%</tt> <tt class="py-name">__version__</tt> </tt>
+<a name="L148"></a><tt class="py-lineno">148</tt>  <tt class="py-line"> </tt>
+<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">body_value</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">      <tt class="py-name">headers</tt><tt class="py-op">[</tt><tt class="py-string">'content-type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
 googleapiclient.model.JsonModel.content_type
 googleapiclient.model.MediaModel.content_type
 googleapiclient.model.ProtocolBufferModel.content_type
-googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-15', 'content_type', 'link-8');">content_type</a></tt> </tt>
-<a name="L149"></a><tt class="py-lineno">149</tt>  <tt class="py-line">      <tt class="py-name">body_value</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Method googleapiclient.model.BaseModel.serialize()=googleapiclient.model.BaseModel-class.html#serialize,Method googleapiclient.model.JsonModel.serialize()=googleapiclient.model.JsonModel-class.html#serialize,Method googleapiclient.model.ProtocolBufferModel.serialize()=googleapiclient.model.ProtocolBufferModel-class.html#serialize"><a title="googleapiclient.model.BaseModel.serialize
+googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-26', 'content_type', 'link-9');">content_type</a></tt> </tt>
+<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">      <tt class="py-name">body_value</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Method googleapiclient.model.BaseModel.serialize()=googleapiclient.model.BaseModel-class.html#serialize,Method googleapiclient.model.JsonModel.serialize()=googleapiclient.model.JsonModel-class.html#serialize,Method googleapiclient.model.ProtocolBufferModel.serialize()=googleapiclient.model.ProtocolBufferModel-class.html#serialize"><a title="googleapiclient.model.BaseModel.serialize
 googleapiclient.model.JsonModel.serialize
-googleapiclient.model.ProtocolBufferModel.serialize" class="py-name" href="#" onclick="return doclink('link-16', 'serialize', 'link-16');">serialize</a></tt><tt class="py-op">(</tt><tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
-<a name="L150"></a><tt class="py-lineno">150</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Method googleapiclient.model.BaseModel._log_request()=googleapiclient.model.BaseModel-class.html#_log_request"><a title="googleapiclient.model.BaseModel._log_request" class="py-name" href="#" onclick="return doclink('link-17', '_log_request', 'link-17');">_log_request</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">path_params</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">,</tt> <tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
-<a name="L151"></a><tt class="py-lineno">151</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">path_params</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">,</tt> <tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line"> </tt>
-<a name="BaseModel._build_query"></a><div id="BaseModel._build_query-def"><a name="L153"></a><tt class="py-lineno">153</tt> <a class="py-toggle" href="#" id="BaseModel._build_query-toggle" onclick="return toggle('BaseModel._build_query');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#_build_query">_build_query</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BaseModel._build_query-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel._build_query-expanded"><a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line">    <tt class="py-docstring">"""Builds a query string.</tt> </tt>
-<a name="L155"></a><tt class="py-lineno">155</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line"><tt class="py-docstring">      params: dict, the query parameters</tt> </tt>
-<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"><tt class="py-docstring">      The query parameters properly encoded into an HTTP URI query string.</tt> </tt>
-<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
+googleapiclient.model.ProtocolBufferModel.serialize" class="py-name" href="#" onclick="return doclink('link-27', 'serialize', 'link-27');">serialize</a></tt><tt class="py-op">(</tt><tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
+<a name="L152"></a><tt class="py-lineno">152</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method googleapiclient.model.BaseModel._log_request()=googleapiclient.model.BaseModel-class.html#_log_request"><a title="googleapiclient.model.BaseModel._log_request" class="py-name" href="#" onclick="return doclink('link-28', '_log_request', 'link-28');">_log_request</a></tt><tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">path_params</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">,</tt> <tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
+<a name="L153"></a><tt class="py-lineno">153</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">headers</tt><tt class="py-op">,</tt> <tt class="py-name">path_params</tt><tt class="py-op">,</tt> <tt class="py-name">query</tt><tt class="py-op">,</tt> <tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L154"></a><tt class="py-lineno">154</tt>  <tt class="py-line"> </tt>
+<a name="BaseModel._build_query"></a><div id="BaseModel._build_query-def"><a name="L155"></a><tt class="py-lineno">155</tt> <a class="py-toggle" href="#" id="BaseModel._build_query-toggle" onclick="return toggle('BaseModel._build_query');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#_build_query">_build_query</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BaseModel._build_query-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel._build_query-expanded"><a name="L156"></a><tt class="py-lineno">156</tt>  <tt class="py-line">    <tt class="py-docstring">"""Builds a query string.</tt> </tt>
+<a name="L157"></a><tt class="py-lineno">157</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L158"></a><tt class="py-lineno">158</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L159"></a><tt class="py-lineno">159</tt>  <tt class="py-line"><tt class="py-docstring">      params: dict, the query parameters</tt> </tt>
+<a name="L160"></a><tt class="py-lineno">160</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L161"></a><tt class="py-lineno">161</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L162"></a><tt class="py-lineno">162</tt>  <tt class="py-line"><tt class="py-docstring">      The query parameters properly encoded into an HTTP URI query string.</tt> </tt>
+<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
 googleapiclient.model.JsonModel.alt_param
 googleapiclient.model.MediaModel.alt_param
 googleapiclient.model.ProtocolBufferModel.alt_param
-googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-18', 'alt_param', 'link-10');">alt_param</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L163"></a><tt class="py-lineno">163</tt>  <tt class="py-line">      <tt class="py-name">params</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name" targets="Method googleapiclient.channel.Channel.update()=googleapiclient.channel.Channel-class.html#update"><a title="googleapiclient.channel.Channel.update" class="py-name" href="#" onclick="return doclink('link-19', 'update', 'link-19');">update</a></tt><tt class="py-op">(</tt><tt class="py-op">{</tt><tt class="py-string">'alt'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
+googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-29', 'alt_param', 'link-11');">alt_param</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line">      <tt class="py-name">params</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method googleapiclient.channel.Channel.update()=googleapiclient.channel.Channel-class.html#update"><a title="googleapiclient.channel.Channel.update" class="py-name" href="#" onclick="return doclink('link-30', 'update', 'link-30');">update</a></tt><tt class="py-op">(</tt><tt class="py-op">{</tt><tt class="py-string">'alt'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
 googleapiclient.model.JsonModel.alt_param
 googleapiclient.model.MediaModel.alt_param
 googleapiclient.model.ProtocolBufferModel.alt_param
-googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-20', 'alt_param', 'link-10');">alt_param</a></tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
-<a name="L164"></a><tt class="py-lineno">164</tt>  <tt class="py-line">    <tt class="py-name">astuples</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L165"></a><tt class="py-lineno">165</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">x</tt> <tt class="py-keyword">in</tt> <tt class="py-name">value</tt><tt class="py-op">:</tt> </tt>
-<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line">          <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-name">x</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
-<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line">          <tt class="py-name">astuples</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">x</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">text_type</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">callable</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line">          <tt class="py-name">value</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
-<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">        <tt class="py-name">astuples</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'?'</tt> <tt class="py-op">+</tt> <tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-name">astuples</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line"> </tt>
-<a name="BaseModel._log_response"></a><div id="BaseModel._log_response-def"><a name="L176"></a><tt class="py-lineno">176</tt> <a class="py-toggle" href="#" id="BaseModel._log_response-toggle" onclick="return toggle('BaseModel._log_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#_log_response">_log_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BaseModel._log_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel._log_response-expanded"><a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line">    <tt class="py-docstring">"""Logs debugging information about the response if requested."""</tt> </tt>
-<a name="L178"></a><tt class="py-lineno">178</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-21" class="py-name"><a title="googleapiclient.model.dump_request_response" class="py-name" href="#" onclick="return doclink('link-21', 'dump_request_response', 'link-4');">dump_request_response</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'--response-start--'</tt><tt class="py-op">)</tt> </tt>
-<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">        <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'%s: %s'</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
-<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">content</tt><tt class="py-op">:</tt> </tt>
-<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">        <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'--response-end--'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line"> </tt>
-<a name="BaseModel.response"></a><div id="BaseModel.response-def"><a name="L186"></a><tt class="py-lineno">186</tt> <a class="py-toggle" href="#" id="BaseModel.response-toggle" onclick="return toggle('BaseModel.response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#response">response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BaseModel.response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel.response-expanded"><a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert the response wire format into a Python object.</tt> </tt>
-<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line"><tt class="py-docstring">      resp: httplib2.Response, the HTTP response headers and status</tt> </tt>
-<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the body of the HTTP response</tt> </tt>
-<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line"><tt class="py-docstring">      The body de-serialized as a Python object.</tt> </tt>
-<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
-<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if a non 2xx response is received.</tt> </tt>
-<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Method googleapiclient.model.BaseModel._log_response()=googleapiclient.model.BaseModel-class.html#_log_response"><a title="googleapiclient.model.BaseModel._log_response" class="py-name" href="#" onclick="return doclink('link-22', '_log_response', 'link-22');">_log_response</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line">    <tt class="py-comment"># Error handling is TBD, for example, do we retry</tt> </tt>
-<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line">    <tt class="py-comment"># for some operation/error combinations?</tt> </tt>
-<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">300</tt><tt class="py-op">:</tt> </tt>
-<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">204</tt><tt class="py-op">:</tt> </tt>
-<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">        <tt class="py-comment"># A 204: No Content response should be treated differently</tt> </tt>
-<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line">        <tt class="py-comment"># to all the other success states</tt> </tt>
-<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name"><a title="googleapiclient.model.BaseModel.no_content_response
+googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-31', 'alt_param', 'link-11');">alt_param</a></tt><tt class="py-op">}</tt><tt class="py-op">)</tt> </tt>
+<a name="L166"></a><tt class="py-lineno">166</tt>  <tt class="py-line">    <tt class="py-name">astuples</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L167"></a><tt class="py-lineno">167</tt>  <tt class="py-line">    <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">params</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L168"></a><tt class="py-lineno">168</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L169"></a><tt class="py-lineno">169</tt>  <tt class="py-line">        <tt class="py-keyword">for</tt> <tt class="py-name">x</tt> <tt class="py-keyword">in</tt> <tt class="py-name">value</tt><tt class="py-op">:</tt> </tt>
+<a name="L170"></a><tt class="py-lineno">170</tt>  <tt class="py-line">          <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-name">x</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L171"></a><tt class="py-lineno">171</tt>  <tt class="py-line">          <tt class="py-name">astuples</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">x</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L172"></a><tt class="py-lineno">172</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L173"></a><tt class="py-lineno">173</tt>  <tt class="py-line">        <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">,</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">text_type</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">callable</tt><tt class="py-op">(</tt><tt class="py-name">value</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L174"></a><tt class="py-lineno">174</tt>  <tt class="py-line">          <tt class="py-name">value</tt> <tt class="py-op">=</tt> <tt class="py-name">value</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line">        <tt class="py-name">astuples</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">value</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L176"></a><tt class="py-lineno">176</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">'?'</tt> <tt class="py-op">+</tt> <tt class="py-name">urlencode</tt><tt class="py-op">(</tt><tt class="py-name">astuples</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line"> </tt>
+<a name="BaseModel._log_response"></a><div id="BaseModel._log_response-def"><a name="L178"></a><tt class="py-lineno">178</tt> <a class="py-toggle" href="#" id="BaseModel._log_response-toggle" onclick="return toggle('BaseModel._log_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#_log_response">_log_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BaseModel._log_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel._log_response-expanded"><a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line">    <tt class="py-docstring">"""Logs debugging information about the response if requested."""</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-32" class="py-name"><a title="googleapiclient.model.dump_request_response" class="py-name" href="#" onclick="return doclink('link-32', 'dump_request_response', 'link-5');">dump_request_response</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">      <tt id="link-33" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-33', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'--response-start--'</tt><tt class="py-op">)</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">        <tt id="link-34" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-34', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'%s: %s'</tt><tt class="py-op">,</tt> <tt class="py-name">h</tt><tt class="py-op">,</tt> <tt class="py-name">v</tt><tt class="py-op">)</tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">content</tt><tt class="py-op">:</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">        <tt id="link-35" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-35', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">      <tt id="link-36" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-36', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">info</tt><tt class="py-op">(</tt><tt class="py-string">'--response-end--'</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line"> </tt>
+<a name="BaseModel.response"></a><div id="BaseModel.response-def"><a name="L188"></a><tt class="py-lineno">188</tt> <a class="py-toggle" href="#" id="BaseModel.response-toggle" onclick="return toggle('BaseModel.response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#response">response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">resp</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BaseModel.response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel.response-expanded"><a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">    <tt class="py-docstring">"""Convert the response wire format into a Python object.</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line"><tt class="py-docstring">      resp: httplib2.Response, the HTTP response headers and status</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the body of the HTTP response</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line"><tt class="py-docstring">      The body de-serialized as a Python object.</tt> </tt>
+<a name="L197"></a><tt class="py-lineno">197</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line"><tt class="py-docstring">    Raises:</tt> </tt>
+<a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line"><tt class="py-docstring">      googleapiclient.errors.HttpError if a non 2xx response is received.</tt> </tt>
+<a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L201"></a><tt class="py-lineno">201</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name" targets="Method googleapiclient.model.BaseModel._log_response()=googleapiclient.model.BaseModel-class.html#_log_response"><a title="googleapiclient.model.BaseModel._log_response" class="py-name" href="#" onclick="return doclink('link-37', '_log_response', 'link-37');">_log_response</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line">    <tt class="py-comment"># Error handling is TBD, for example, do we retry</tt> </tt>
+<a name="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">    <tt class="py-comment"># for some operation/error combinations?</tt> </tt>
+<a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">300</tt><tt class="py-op">:</tt> </tt>
+<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">resp</tt><tt class="py-op">.</tt><tt class="py-name">status</tt> <tt class="py-op">==</tt> <tt class="py-number">204</tt><tt class="py-op">:</tt> </tt>
+<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">        <tt class="py-comment"># A 204: No Content response should be treated differently</tt> </tt>
+<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">        <tt class="py-comment"># to all the other success states</tt> </tt>
+<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="googleapiclient.model.BaseModel.no_content_response
 googleapiclient.model.JsonModel.no_content_response
 googleapiclient.model.MediaModel.no_content_response
 googleapiclient.model.ProtocolBufferModel.no_content_response
-googleapiclient.model.RawModel.no_content_response" class="py-name" href="#" onclick="return doclink('link-23', 'no_content_response', 'link-9');">no_content_response</a></tt> </tt>
-<a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name" targets="Method googleapiclient.model.BaseModel.deserialize()=googleapiclient.model.BaseModel-class.html#deserialize,Method googleapiclient.model.JsonModel.deserialize()=googleapiclient.model.JsonModel-class.html#deserialize,Method googleapiclient.model.MediaModel.deserialize()=googleapiclient.model.MediaModel-class.html#deserialize,Method googleapiclient.model.ProtocolBufferModel.deserialize()=googleapiclient.model.ProtocolBufferModel-class.html#deserialize,Method googleapiclient.model.RawModel.deserialize()=googleapiclient.model.RawModel-class.html#deserialize"><a title="googleapiclient.model.BaseModel.deserialize
+googleapiclient.model.RawModel.no_content_response" class="py-name" href="#" onclick="return doclink('link-38', 'no_content_response', 'link-10');">no_content_response</a></tt> </tt>
+<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">      <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-39" class="py-name" targets="Method googleapiclient.model.BaseModel.deserialize()=googleapiclient.model.BaseModel-class.html#deserialize,Method googleapiclient.model.JsonModel.deserialize()=googleapiclient.model.JsonModel-class.html#deserialize,Method googleapiclient.model.MediaModel.deserialize()=googleapiclient.model.MediaModel-class.html#deserialize,Method googleapiclient.model.ProtocolBufferModel.deserialize()=googleapiclient.model.ProtocolBufferModel-class.html#deserialize,Method googleapiclient.model.RawModel.deserialize()=googleapiclient.model.RawModel-class.html#deserialize"><a title="googleapiclient.model.BaseModel.deserialize
 googleapiclient.model.JsonModel.deserialize
 googleapiclient.model.MediaModel.deserialize
 googleapiclient.model.ProtocolBufferModel.deserialize
-googleapiclient.model.RawModel.deserialize" class="py-name" href="#" onclick="return doclink('link-24', 'deserialize', 'link-24');">deserialize</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L208"></a><tt class="py-lineno">208</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">      <tt class="py-name">logging</tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Content from bad request was: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-25" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-25', 'HttpError', 'link-3');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line"> </tt>
-<a name="BaseModel.serialize"></a><div id="BaseModel.serialize-def"><a name="L212"></a><tt class="py-lineno">212</tt> <a class="py-toggle" href="#" id="BaseModel.serialize-toggle" onclick="return toggle('BaseModel.serialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#serialize">serialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BaseModel.serialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel.serialize-expanded"><a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line">    <tt class="py-docstring">"""Perform the actual Python object serialization.</tt> </tt>
-<a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line"><tt class="py-docstring">      body_value: object, the request body as a Python object.</tt> </tt>
-<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line"><tt class="py-docstring">      string, the body in serialized form.</tt> </tt>
-<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line">    <tt id="link-26" class="py-name"><a title="googleapiclient.model._abstract" class="py-name" href="#" onclick="return doclink('link-26', '_abstract', 'link-5');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line"> </tt>
-<a name="BaseModel.deserialize"></a><div id="BaseModel.deserialize-def"><a name="L223"></a><tt class="py-lineno">223</tt> <a class="py-toggle" href="#" id="BaseModel.deserialize-toggle" onclick="return toggle('BaseModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BaseModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel.deserialize-expanded"><a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line">    <tt class="py-docstring">"""Perform the actual deserialization from response string to Python</tt> </tt>
-<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line"><tt class="py-docstring">    object.</tt> </tt>
-<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the body of the HTTP response</tt> </tt>
-<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
-<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line"><tt class="py-docstring">      The body de-serialized as a Python object.</tt> </tt>
-<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line">    <tt id="link-27" class="py-name"><a title="googleapiclient.model._abstract" class="py-name" href="#" onclick="return doclink('link-27', '_abstract', 'link-5');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line"> </tt>
-<a name="JsonModel"></a><div id="JsonModel-def"><a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line"> </tt>
-<a name="L236"></a><tt class="py-lineno">236</tt> <a class="py-toggle" href="#" id="JsonModel-toggle" onclick="return toggle('JsonModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html">JsonModel</a><tt class="py-op">(</tt><tt class="py-base-class">BaseModel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="JsonModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="JsonModel-expanded"><a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model class for JSON.</tt> </tt>
-<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line"><tt class="py-docstring">  Serializes and de-serializes between JSON and the Python</tt> </tt>
-<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line"><tt class="py-docstring">  object representation of HTTP request and response bodies.</tt> </tt>
-<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line">  <tt id="link-28" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.model.RawModel.deserialize" class="py-name" href="#" onclick="return doclink('link-39', 'deserialize', 'link-39');">deserialize</a></tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line">      <tt id="link-40" class="py-name"><a title="googleapiclient.discovery_cache.LOGGER
+googleapiclient.discovery_cache.appengine_memcache.LOGGER
+googleapiclient.discovery_cache.file_cache.LOGGER
+googleapiclient.http.LOGGER
+googleapiclient.model.LOGGER" class="py-name" href="#" onclick="return doclink('link-40', 'LOGGER', 'link-4');">LOGGER</a></tt><tt class="py-op">.</tt><tt class="py-name">debug</tt><tt class="py-op">(</tt><tt class="py-string">'Content from bad request was: %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L212"></a><tt class="py-lineno">212</tt>  <tt class="py-line">      <tt class="py-keyword">raise</tt> <tt id="link-41" class="py-name"><a title="googleapiclient.errors.HttpError" class="py-name" href="#" onclick="return doclink('link-41', 'HttpError', 'link-3');">HttpError</a></tt><tt class="py-op">(</tt><tt class="py-name">resp</tt><tt class="py-op">,</tt> <tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line"> </tt>
+<a name="BaseModel.serialize"></a><div id="BaseModel.serialize-def"><a name="L214"></a><tt class="py-lineno">214</tt> <a class="py-toggle" href="#" id="BaseModel.serialize-toggle" onclick="return toggle('BaseModel.serialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#serialize">serialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BaseModel.serialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel.serialize-expanded"><a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line">    <tt class="py-docstring">"""Perform the actual Python object serialization.</tt> </tt>
+<a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line"><tt class="py-docstring">      body_value: object, the request body as a Python object.</tt> </tt>
+<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L220"></a><tt class="py-lineno">220</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L221"></a><tt class="py-lineno">221</tt>  <tt class="py-line"><tt class="py-docstring">      string, the body in serialized form.</tt> </tt>
+<a name="L222"></a><tt class="py-lineno">222</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line">    <tt id="link-42" class="py-name"><a title="googleapiclient.model._abstract" class="py-name" href="#" onclick="return doclink('link-42', '_abstract', 'link-6');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line"> </tt>
+<a name="BaseModel.deserialize"></a><div id="BaseModel.deserialize-def"><a name="L225"></a><tt class="py-lineno">225</tt> <a class="py-toggle" href="#" id="BaseModel.deserialize-toggle" onclick="return toggle('BaseModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.BaseModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BaseModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="BaseModel.deserialize-expanded"><a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line">    <tt class="py-docstring">"""Perform the actual deserialization from response string to Python</tt> </tt>
+<a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line"><tt class="py-docstring">    object.</tt> </tt>
+<a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"><tt class="py-docstring">      content: string, the body of the HTTP response</tt> </tt>
+<a name="L231"></a><tt class="py-lineno">231</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line"><tt class="py-docstring">    Returns:</tt> </tt>
+<a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line"><tt class="py-docstring">      The body de-serialized as a Python object.</tt> </tt>
+<a name="L234"></a><tt class="py-lineno">234</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line">    <tt id="link-43" class="py-name"><a title="googleapiclient.model._abstract" class="py-name" href="#" onclick="return doclink('link-43', '_abstract', 'link-6');">_abstract</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line"> </tt>
+<a name="JsonModel"></a><div id="JsonModel-def"><a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line"> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt> <a class="py-toggle" href="#" id="JsonModel-toggle" onclick="return toggle('JsonModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html">JsonModel</a><tt class="py-op">(</tt><tt class="py-base-class">BaseModel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JsonModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="JsonModel-expanded"><a name="L239"></a><tt class="py-lineno">239</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model class for JSON.</tt> </tt>
+<a name="L240"></a><tt class="py-lineno">240</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L241"></a><tt class="py-lineno">241</tt>  <tt class="py-line"><tt class="py-docstring">  Serializes and de-serializes between JSON and the Python</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line"><tt class="py-docstring">  object representation of HTTP request and response bodies.</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line">  <tt id="link-44" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-28', 'accept', 'link-7');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/json'</tt> </tt>
-<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line">  <tt id="link-29" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-44', 'accept', 'link-8');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/json'</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line">  <tt id="link-45" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
 googleapiclient.model.JsonModel.content_type
 googleapiclient.model.MediaModel.content_type
 googleapiclient.model.ProtocolBufferModel.content_type
-googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-29', 'content_type', 'link-8');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/json'</tt> </tt>
-<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line">  <tt id="link-30" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
+googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-45', 'content_type', 'link-9');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/json'</tt> </tt>
+<a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line">  <tt id="link-46" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
 googleapiclient.model.JsonModel.alt_param
 googleapiclient.model.MediaModel.alt_param
 googleapiclient.model.ProtocolBufferModel.alt_param
-googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-30', 'alt_param', 'link-10');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'json'</tt> </tt>
-<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line"> </tt>
-<a name="JsonModel.__init__"></a><div id="JsonModel.__init__-def"><a name="L246"></a><tt class="py-lineno">246</tt> <a class="py-toggle" href="#" id="JsonModel.__init__-toggle" onclick="return toggle('JsonModel.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data_wrapper</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="JsonModel.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="JsonModel.__init__-expanded"><a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line">    <tt class="py-docstring">"""Construct a JsonModel.</tt> </tt>
-<a name="L248"></a><tt class="py-lineno">248</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line"><tt class="py-docstring">      data_wrapper: boolean, wrap requests and responses in a data wrapper</tt> </tt>
-<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data_wrapper</tt> <tt class="py-op">=</tt> <tt class="py-name">data_wrapper</tt> </tt>
-</div><a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line"> </tt>
-<a name="JsonModel.serialize"></a><div id="JsonModel.serialize-def"><a name="L254"></a><tt class="py-lineno">254</tt> <a class="py-toggle" href="#" id="JsonModel.serialize-toggle" onclick="return toggle('JsonModel.serialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html#serialize">serialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="JsonModel.serialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="JsonModel.serialize-expanded"><a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">body_value</tt><tt class="py-op">,</tt> <tt class="py-name">dict</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'data'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">body_value</tt> <tt class="py-keyword">and</tt> </tt>
-<a name="L256"></a><tt class="py-lineno">256</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data_wrapper</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line">      <tt class="py-name">body_value</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'data'</tt><tt class="py-op">:</tt> <tt class="py-name">body_value</tt><tt class="py-op">}</tt> </tt>
-<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line"> </tt>
-<a name="JsonModel.deserialize"></a><div id="JsonModel.deserialize-def"><a name="L260"></a><tt class="py-lineno">260</tt> <a class="py-toggle" href="#" id="JsonModel.deserialize-toggle" onclick="return toggle('JsonModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="JsonModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="JsonModel.deserialize-expanded"><a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line">        <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
-<a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line">        <tt class="py-keyword">pass</tt> </tt>
-<a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line">    <tt id="link-31" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-31', 'body', 'link-12');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data_wrapper</tt> <tt class="py-keyword">and</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-32" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-32', 'body', 'link-12');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">dict</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'data'</tt> <tt class="py-keyword">in</tt> <tt id="link-33" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-33', 'body', 'link-12');">body</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line">      <tt id="link-34" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-34', 'body', 'link-12');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-35" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-35', 'body', 'link-12');">body</a></tt><tt class="py-op">[</tt><tt class="py-string">'data'</tt><tt class="py-op">]</tt> </tt>
-<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-36" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-36', 'body', 'link-12');">body</a></tt> </tt>
-</div><a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line"> </tt>
-<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
-<a name="JsonModel.no_content_response"></a><div id="JsonModel.no_content_response-def"><a name="L271"></a><tt class="py-lineno">271</tt> <a class="py-toggle" href="#" id="JsonModel.no_content_response-toggle" onclick="return toggle('JsonModel.no_content_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html#no_content_response">no_content_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="JsonModel.no_content_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="JsonModel.no_content_response-expanded"><a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-</div></div><a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line"> </tt>
-<a name="RawModel"></a><div id="RawModel-def"><a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line"> </tt>
-<a name="L275"></a><tt class="py-lineno">275</tt> <a class="py-toggle" href="#" id="RawModel-toggle" onclick="return toggle('RawModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.RawModel-class.html">RawModel</a><tt class="py-op">(</tt><tt class="py-base-class">JsonModel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="RawModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="RawModel-expanded"><a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model class for requests that don't return JSON.</tt> </tt>
-<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line"><tt class="py-docstring">  Serializes and de-serializes between JSON and the Python</tt> </tt>
-<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line"><tt class="py-docstring">  object representation of HTTP request, and returns the raw bytes</tt> </tt>
-<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line"><tt class="py-docstring">  of the response body.</tt> </tt>
-<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line">  <tt id="link-37" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-46', 'alt_param', 'link-11');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'json'</tt> </tt>
+<a name="L247"></a><tt class="py-lineno">247</tt>  <tt class="py-line"> </tt>
+<a name="JsonModel.__init__"></a><div id="JsonModel.__init__-def"><a name="L248"></a><tt class="py-lineno">248</tt> <a class="py-toggle" href="#" id="JsonModel.__init__-toggle" onclick="return toggle('JsonModel.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data_wrapper</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JsonModel.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="JsonModel.__init__-expanded"><a name="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line">    <tt class="py-docstring">"""Construct a JsonModel.</tt> </tt>
+<a name="L250"></a><tt class="py-lineno">250</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L251"></a><tt class="py-lineno">251</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L252"></a><tt class="py-lineno">252</tt>  <tt class="py-line"><tt class="py-docstring">      data_wrapper: boolean, wrap requests and responses in a data wrapper</tt> </tt>
+<a name="L253"></a><tt class="py-lineno">253</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L254"></a><tt class="py-lineno">254</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data_wrapper</tt> <tt class="py-op">=</tt> <tt class="py-name">data_wrapper</tt> </tt>
+</div><a name="L255"></a><tt class="py-lineno">255</tt>  <tt class="py-line"> </tt>
+<a name="JsonModel.serialize"></a><div id="JsonModel.serialize-def"><a name="L256"></a><tt class="py-lineno">256</tt> <a class="py-toggle" href="#" id="JsonModel.serialize-toggle" onclick="return toggle('JsonModel.serialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html#serialize">serialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JsonModel.serialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="JsonModel.serialize-expanded"><a name="L257"></a><tt class="py-lineno">257</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">body_value</tt><tt class="py-op">,</tt> <tt class="py-name">dict</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'data'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">body_value</tt> <tt class="py-keyword">and</tt> </tt>
+<a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data_wrapper</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line">      <tt class="py-name">body_value</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'data'</tt><tt class="py-op">:</tt> <tt class="py-name">body_value</tt><tt class="py-op">}</tt> </tt>
+<a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">dumps</tt><tt class="py-op">(</tt><tt class="py-name">body_value</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line"> </tt>
+<a name="JsonModel.deserialize"></a><div id="JsonModel.deserialize-def"><a name="L262"></a><tt class="py-lineno">262</tt> <a class="py-toggle" href="#" id="JsonModel.deserialize-toggle" onclick="return toggle('JsonModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JsonModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="JsonModel.deserialize-expanded"><a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line">    <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line">        <tt class="py-name">content</tt> <tt class="py-op">=</tt> <tt class="py-name">content</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf-8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L265"></a><tt class="py-lineno">265</tt>  <tt class="py-line">    <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
+<a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line">        <tt class="py-keyword">pass</tt> </tt>
+<a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line">    <tt id="link-47" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-47', 'body', 'link-21');">body</a></tt> <tt class="py-op">=</tt> <tt class="py-name">json</tt><tt class="py-op">.</tt><tt class="py-name">loads</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+<a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_data_wrapper</tt> <tt class="py-keyword">and</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-48" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-48', 'body', 'link-21');">body</a></tt><tt class="py-op">,</tt> <tt class="py-name">dict</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'data'</tt> <tt class="py-keyword">in</tt> <tt id="link-49" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-49', 'body', 'link-21');">body</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line">      <tt id="link-50" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-50', 'body', 'link-21');">body</a></tt> <tt class="py-op">=</tt> <tt id="link-51" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-51', 'body', 'link-21');">body</a></tt><tt class="py-op">[</tt><tt class="py-string">'data'</tt><tt class="py-op">]</tt> </tt>
+<a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt id="link-52" class="py-name"><a title="googleapiclient.channel.Channel.body" class="py-name" href="#" onclick="return doclink('link-52', 'body', 'link-21');">body</a></tt> </tt>
+</div><a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line"> </tt>
+<a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
+<a name="JsonModel.no_content_response"></a><div id="JsonModel.no_content_response-def"><a name="L273"></a><tt class="py-lineno">273</tt> <a class="py-toggle" href="#" id="JsonModel.no_content_response-toggle" onclick="return toggle('JsonModel.no_content_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.JsonModel-class.html#no_content_response">no_content_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="JsonModel.no_content_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="JsonModel.no_content_response-expanded"><a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+</div></div><a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line"> </tt>
+<a name="RawModel"></a><div id="RawModel-def"><a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line"> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt> <a class="py-toggle" href="#" id="RawModel-toggle" onclick="return toggle('RawModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.RawModel-class.html">RawModel</a><tt class="py-op">(</tt><tt class="py-base-class">JsonModel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="RawModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="RawModel-expanded"><a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model class for requests that don't return JSON.</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line"><tt class="py-docstring">  Serializes and de-serializes between JSON and the Python</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line"><tt class="py-docstring">  object representation of HTTP request, and returns the raw bytes</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line"><tt class="py-docstring">  of the response body.</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">  <tt id="link-53" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-37', 'accept', 'link-7');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'*/*'</tt> </tt>
-<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line">  <tt id="link-38" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-53', 'accept', 'link-8');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'*/*'</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">  <tt id="link-54" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
 googleapiclient.model.JsonModel.content_type
 googleapiclient.model.MediaModel.content_type
 googleapiclient.model.ProtocolBufferModel.content_type
-googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-38', 'content_type', 'link-8');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/json'</tt> </tt>
-<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">  <tt id="link-39" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
+googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-54', 'content_type', 'link-9');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/json'</tt> </tt>
+<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line">  <tt id="link-55" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
 googleapiclient.model.JsonModel.alt_param
 googleapiclient.model.MediaModel.alt_param
 googleapiclient.model.ProtocolBufferModel.alt_param
-googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-39', 'alt_param', 'link-10');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line"> </tt>
-<a name="RawModel.deserialize"></a><div id="RawModel.deserialize-def"><a name="L286"></a><tt class="py-lineno">286</tt> <a class="py-toggle" href="#" id="RawModel.deserialize-toggle" onclick="return toggle('RawModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.RawModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="RawModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="RawModel.deserialize-expanded"><a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
-</div><a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line"> </tt>
-<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
-<a name="RawModel.no_content_response"></a><div id="RawModel.no_content_response-def"><a name="L290"></a><tt class="py-lineno">290</tt> <a class="py-toggle" href="#" id="RawModel.no_content_response-toggle" onclick="return toggle('RawModel.no_content_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.RawModel-class.html#no_content_response">no_content_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="RawModel.no_content_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="RawModel.no_content_response-expanded"><a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
-</div></div><a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line"> </tt>
-<a name="MediaModel"></a><div id="MediaModel-def"><a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line"> </tt>
-<a name="L294"></a><tt class="py-lineno">294</tt> <a class="py-toggle" href="#" id="MediaModel-toggle" onclick="return toggle('MediaModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.MediaModel-class.html">MediaModel</a><tt class="py-op">(</tt><tt class="py-base-class">JsonModel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="MediaModel-expanded"><a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model class for requests that return Media.</tt> </tt>
-<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line"><tt class="py-docstring">  Serializes and de-serializes between JSON and the Python</tt> </tt>
-<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line"><tt class="py-docstring">  object representation of HTTP request, and returns the raw bytes</tt> </tt>
-<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line"><tt class="py-docstring">  of the response body.</tt> </tt>
-<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line">  <tt id="link-40" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-55', 'alt_param', 'link-11');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line"> </tt>
+<a name="RawModel.deserialize"></a><div id="RawModel.deserialize-def"><a name="L288"></a><tt class="py-lineno">288</tt> <a class="py-toggle" href="#" id="RawModel.deserialize-toggle" onclick="return toggle('RawModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.RawModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="RawModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="RawModel.deserialize-expanded"><a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
+</div><a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line"> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
+<a name="RawModel.no_content_response"></a><div id="RawModel.no_content_response-def"><a name="L292"></a><tt class="py-lineno">292</tt> <a class="py-toggle" href="#" id="RawModel.no_content_response-toggle" onclick="return toggle('RawModel.no_content_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.RawModel-class.html#no_content_response">no_content_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="RawModel.no_content_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="RawModel.no_content_response-expanded"><a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
+</div></div><a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line"> </tt>
+<a name="MediaModel"></a><div id="MediaModel-def"><a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line"> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt> <a class="py-toggle" href="#" id="MediaModel-toggle" onclick="return toggle('MediaModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.MediaModel-class.html">MediaModel</a><tt class="py-op">(</tt><tt class="py-base-class">JsonModel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="MediaModel-expanded"><a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model class for requests that return Media.</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line"><tt class="py-docstring">  Serializes and de-serializes between JSON and the Python</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line"><tt class="py-docstring">  object representation of HTTP request, and returns the raw bytes</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line"><tt class="py-docstring">  of the response body.</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">  <tt id="link-56" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-40', 'accept', 'link-7');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'*/*'</tt> </tt>
-<a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line">  <tt id="link-41" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-56', 'accept', 'link-8');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'*/*'</tt> </tt>
+<a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line">  <tt id="link-57" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
 googleapiclient.model.JsonModel.content_type
 googleapiclient.model.MediaModel.content_type
 googleapiclient.model.ProtocolBufferModel.content_type
-googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-41', 'content_type', 'link-8');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/json'</tt> </tt>
-<a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">  <tt id="link-42" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
+googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-57', 'content_type', 'link-9');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/json'</tt> </tt>
+<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line">  <tt id="link-58" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
 googleapiclient.model.JsonModel.alt_param
 googleapiclient.model.MediaModel.alt_param
 googleapiclient.model.ProtocolBufferModel.alt_param
-googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-42', 'alt_param', 'link-10');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'media'</tt> </tt>
-<a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line"> </tt>
-<a name="MediaModel.deserialize"></a><div id="MediaModel.deserialize-def"><a name="L305"></a><tt class="py-lineno">305</tt> <a class="py-toggle" href="#" id="MediaModel.deserialize-toggle" onclick="return toggle('MediaModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.MediaModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="MediaModel.deserialize-expanded"><a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
-</div><a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line"> </tt>
-<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
-<a name="MediaModel.no_content_response"></a><div id="MediaModel.no_content_response-def"><a name="L309"></a><tt class="py-lineno">309</tt> <a class="py-toggle" href="#" id="MediaModel.no_content_response-toggle" onclick="return toggle('MediaModel.no_content_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.MediaModel-class.html#no_content_response">no_content_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MediaModel.no_content_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="MediaModel.no_content_response-expanded"><a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
-</div></div><a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line"> </tt>
-<a name="ProtocolBufferModel"></a><div id="ProtocolBufferModel-def"><a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line"> </tt>
-<a name="L313"></a><tt class="py-lineno">313</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel-toggle" onclick="return toggle('ProtocolBufferModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a><tt class="py-op">(</tt><tt class="py-base-class">BaseModel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ProtocolBufferModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ProtocolBufferModel-expanded"><a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model class for protocol buffers.</tt> </tt>
-<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line"><tt class="py-docstring">  Serializes and de-serializes the binary protocol buffer sent in the HTTP</tt> </tt>
-<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line"><tt class="py-docstring">  request and response bodies.</tt> </tt>
-<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line">  <tt id="link-43" class="py-name"><a title="googleapiclient.model.BaseModel.accept
+googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-58', 'alt_param', 'link-11');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'media'</tt> </tt>
+<a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line"> </tt>
+<a name="MediaModel.deserialize"></a><div id="MediaModel.deserialize-def"><a name="L307"></a><tt class="py-lineno">307</tt> <a class="py-toggle" href="#" id="MediaModel.deserialize-toggle" onclick="return toggle('MediaModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.MediaModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="MediaModel.deserialize-expanded"><a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">content</tt> </tt>
+</div><a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line"> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
+<a name="MediaModel.no_content_response"></a><div id="MediaModel.no_content_response-def"><a name="L311"></a><tt class="py-lineno">311</tt> <a class="py-toggle" href="#" id="MediaModel.no_content_response-toggle" onclick="return toggle('MediaModel.no_content_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.MediaModel-class.html#no_content_response">no_content_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="MediaModel.no_content_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="MediaModel.no_content_response-expanded"><a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-string">''</tt> </tt>
+</div></div><a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line"> </tt>
+<a name="ProtocolBufferModel"></a><div id="ProtocolBufferModel-def"><a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line"> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel-toggle" onclick="return toggle('ProtocolBufferModel');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a><tt class="py-op">(</tt><tt class="py-base-class">BaseModel</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ProtocolBufferModel-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ProtocolBufferModel-expanded"><a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line">  <tt class="py-docstring">"""Model class for protocol buffers.</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line"><tt class="py-docstring">  Serializes and de-serializes the binary protocol buffer sent in the HTTP</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line"><tt class="py-docstring">  request and response bodies.</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line">  <tt id="link-59" class="py-name"><a title="googleapiclient.model.BaseModel.accept
 googleapiclient.model.JsonModel.accept
 googleapiclient.model.MediaModel.accept
 googleapiclient.model.ProtocolBufferModel.accept
-googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-43', 'accept', 'link-7');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/x-protobuf'</tt> </tt>
-<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line">  <tt id="link-44" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
+googleapiclient.model.RawModel.accept" class="py-name" href="#" onclick="return doclink('link-59', 'accept', 'link-8');">accept</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/x-protobuf'</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line">  <tt id="link-60" class="py-name"><a title="googleapiclient.model.BaseModel.content_type
 googleapiclient.model.JsonModel.content_type
 googleapiclient.model.MediaModel.content_type
 googleapiclient.model.ProtocolBufferModel.content_type
-googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-44', 'content_type', 'link-8');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/x-protobuf'</tt> </tt>
-<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line">  <tt id="link-45" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
+googleapiclient.model.RawModel.content_type" class="py-name" href="#" onclick="return doclink('link-60', 'content_type', 'link-9');">content_type</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'application/x-protobuf'</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line">  <tt id="link-61" class="py-name"><a title="googleapiclient.model.BaseModel.alt_param
 googleapiclient.model.JsonModel.alt_param
 googleapiclient.model.MediaModel.alt_param
 googleapiclient.model.ProtocolBufferModel.alt_param
-googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-45', 'alt_param', 'link-10');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'proto'</tt> </tt>
-<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line"> </tt>
-<a name="ProtocolBufferModel.__init__"></a><div id="ProtocolBufferModel.__init__-def"><a name="L323"></a><tt class="py-lineno">323</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel.__init__-toggle" onclick="return toggle('ProtocolBufferModel.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">protocol_buffer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ProtocolBufferModel.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ProtocolBufferModel.__init__-expanded"><a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructs a ProtocolBufferModel.</tt> </tt>
-<a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line"><tt class="py-docstring">    The serialzed protocol buffer returned in an HTTP response will be</tt> </tt>
-<a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line"><tt class="py-docstring">    de-serialized using the given protocol buffer class.</tt> </tt>
-<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
-<a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line"><tt class="py-docstring">      protocol_buffer: The protocol buffer class used to de-serialize a</tt> </tt>
-<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line"><tt class="py-docstring">      response from the API.</tt> </tt>
-<a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
-<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_protocol_buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">protocol_buffer</tt> </tt>
-</div><a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line"> </tt>
-<a name="ProtocolBufferModel.serialize"></a><div id="ProtocolBufferModel.serialize-def"><a name="L335"></a><tt class="py-lineno">335</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel.serialize-toggle" onclick="return toggle('ProtocolBufferModel.serialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html#serialize">serialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ProtocolBufferModel.serialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ProtocolBufferModel.serialize-expanded"><a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">body_value</tt><tt class="py-op">.</tt><tt class="py-name">SerializeToString</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line"> </tt>
-<a name="ProtocolBufferModel.deserialize"></a><div id="ProtocolBufferModel.deserialize-def"><a name="L338"></a><tt class="py-lineno">338</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel.deserialize-toggle" onclick="return toggle('ProtocolBufferModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ProtocolBufferModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ProtocolBufferModel.deserialize-expanded"><a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_protocol_buffer</tt><tt class="py-op">.</tt><tt class="py-name">FromString</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line"> </tt>
-<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
-<a name="ProtocolBufferModel.no_content_response"></a><div id="ProtocolBufferModel.no_content_response-def"><a name="L342"></a><tt class="py-lineno">342</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel.no_content_response-toggle" onclick="return toggle('ProtocolBufferModel.no_content_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html#no_content_response">no_content_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ProtocolBufferModel.no_content_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ProtocolBufferModel.no_content_response-expanded"><a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_protocol_buffer</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line"> </tt>
-<a name="makepatch"></a><div id="makepatch-def"><a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line"> </tt>
-<a name="L346"></a><tt class="py-lineno">346</tt> <a class="py-toggle" href="#" id="makepatch-toggle" onclick="return toggle('makepatch');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model-module.html#makepatch">makepatch</a><tt class="py-op">(</tt><tt class="py-param">original</tt><tt class="py-op">,</tt> <tt class="py-param">modified</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="makepatch-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="makepatch-expanded"><a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line">  <tt class="py-docstring">"""Create a patch object.</tt> </tt>
-<a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line"><tt class="py-docstring">  Some methods support PATCH, an efficient way to send updates to a resource.</tt> </tt>
-<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line"><tt class="py-docstring">  This method allows the easy construction of patch bodies by looking at the</tt> </tt>
-<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line"><tt class="py-docstring">  differences between a resource before and after it was modified.</tt> </tt>
-<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
-<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line"><tt class="py-docstring">    original: object, the original deserialized resource</tt> </tt>
-<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line"><tt class="py-docstring">    modified: object, the modified deserialized resource</tt> </tt>
-<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
-<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line"><tt class="py-docstring">    An object that contains only the changes from original to modified, in a</tt> </tt>
-<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line"><tt class="py-docstring">    form suitable to pass to a PATCH method.</tt> </tt>
-<a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line"><tt class="py-docstring">  Example usage:</tt> </tt>
-<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line"><tt class="py-docstring">    item = service.activities().get(postid=postid, userid=userid).execute()</tt> </tt>
-<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line"><tt class="py-docstring">    original = copy.deepcopy(item)</tt> </tt>
-<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line"><tt class="py-docstring">    item['object']['content'] = 'This is updated.'</tt> </tt>
-<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line"><tt class="py-docstring">    service.activities.patch(postid=postid, userid=userid,</tt> </tt>
-<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line"><tt class="py-docstring">      body=makepatch(original, item)).execute()</tt> </tt>
-<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
-<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line">  <tt class="py-name">patch</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">original_value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">original</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line">    <tt class="py-name">modified_value</tt> <tt class="py-op">=</tt> <tt class="py-name">modified</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
+googleapiclient.model.RawModel.alt_param" class="py-name" href="#" onclick="return doclink('link-61', 'alt_param', 'link-11');">alt_param</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'proto'</tt> </tt>
+<a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line"> </tt>
+<a name="ProtocolBufferModel.__init__"></a><div id="ProtocolBufferModel.__init__-def"><a name="L325"></a><tt class="py-lineno">325</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel.__init__-toggle" onclick="return toggle('ProtocolBufferModel.__init__');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">protocol_buffer</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ProtocolBufferModel.__init__-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ProtocolBufferModel.__init__-expanded"><a name="L326"></a><tt class="py-lineno">326</tt>  <tt class="py-line">    <tt class="py-docstring">"""Constructs a ProtocolBufferModel.</tt> </tt>
+<a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line"><tt class="py-docstring">    The serialzed protocol buffer returned in an HTTP response will be</tt> </tt>
+<a name="L329"></a><tt class="py-lineno">329</tt>  <tt class="py-line"><tt class="py-docstring">    de-serialized using the given protocol buffer class.</tt> </tt>
+<a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line"><tt class="py-docstring">    Args:</tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line"><tt class="py-docstring">      protocol_buffer: The protocol buffer class used to de-serialize a</tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line"><tt class="py-docstring">      response from the API.</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line"><tt class="py-docstring">    """</tt> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_protocol_buffer</tt> <tt class="py-op">=</tt> <tt class="py-name">protocol_buffer</tt> </tt>
+</div><a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line"> </tt>
+<a name="ProtocolBufferModel.serialize"></a><div id="ProtocolBufferModel.serialize-def"><a name="L337"></a><tt class="py-lineno">337</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel.serialize-toggle" onclick="return toggle('ProtocolBufferModel.serialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html#serialize">serialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">body_value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ProtocolBufferModel.serialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ProtocolBufferModel.serialize-expanded"><a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">body_value</tt><tt class="py-op">.</tt><tt class="py-name">SerializeToString</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line"> </tt>
+<a name="ProtocolBufferModel.deserialize"></a><div id="ProtocolBufferModel.deserialize-def"><a name="L340"></a><tt class="py-lineno">340</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel.deserialize-toggle" onclick="return toggle('ProtocolBufferModel.deserialize');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html#deserialize">deserialize</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">content</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ProtocolBufferModel.deserialize-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ProtocolBufferModel.deserialize-expanded"><a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_protocol_buffer</tt><tt class="py-op">.</tt><tt class="py-name">FromString</tt><tt class="py-op">(</tt><tt class="py-name">content</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line"> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line">  <tt class="py-decorator">@</tt><tt class="py-decorator">property</tt> </tt>
+<a name="ProtocolBufferModel.no_content_response"></a><div id="ProtocolBufferModel.no_content_response-def"><a name="L344"></a><tt class="py-lineno">344</tt> <a class="py-toggle" href="#" id="ProtocolBufferModel.no_content_response-toggle" onclick="return toggle('ProtocolBufferModel.no_content_response');">-</a><tt class="py-line">  <tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model.ProtocolBufferModel-class.html#no_content_response">no_content_response</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ProtocolBufferModel.no_content_response-collapsed" style="display:none;" pad="+++" indent="++++++"></div><div id="ProtocolBufferModel.no_content_response-expanded"><a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_protocol_buffer</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line"> </tt>
+<a name="makepatch"></a><div id="makepatch-def"><a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line"> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt> <a class="py-toggle" href="#" id="makepatch-toggle" onclick="return toggle('makepatch');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="googleapiclient.model-module.html#makepatch">makepatch</a><tt class="py-op">(</tt><tt class="py-param">original</tt><tt class="py-op">,</tt> <tt class="py-param">modified</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="makepatch-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="makepatch-expanded"><a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line">  <tt class="py-docstring">"""Create a patch object.</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line"><tt class="py-docstring">  Some methods support PATCH, an efficient way to send updates to a resource.</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"><tt class="py-docstring">  This method allows the easy construction of patch bodies by looking at the</tt> </tt>
+<a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line"><tt class="py-docstring">  differences between a resource before and after it was modified.</tt> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line"><tt class="py-docstring">  Args:</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line"><tt class="py-docstring">    original: object, the original deserialized resource</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line"><tt class="py-docstring">    modified: object, the modified deserialized resource</tt> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line"><tt class="py-docstring">  Returns:</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line"><tt class="py-docstring">    An object that contains only the changes from original to modified, in a</tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line"><tt class="py-docstring">    form suitable to pass to a PATCH method.</tt> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line"><tt class="py-docstring"></tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line"><tt class="py-docstring">  Example usage:</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line"><tt class="py-docstring">    item = service.activities().get(postid=postid, userid=userid).execute()</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line"><tt class="py-docstring">    original = copy.deepcopy(item)</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line"><tt class="py-docstring">    item['object']['content'] = 'This is updated.'</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line"><tt class="py-docstring">    service.activities.patch(postid=postid, userid=userid,</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line"><tt class="py-docstring">      body=makepatch(original, item)).execute()</tt> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line"><tt class="py-docstring">  """</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line">  <tt class="py-name">patch</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">original_value</tt> <tt class="py-keyword">in</tt> <tt class="py-name">six</tt><tt class="py-op">.</tt><tt class="py-name">iteritems</tt><tt class="py-op">(</tt><tt class="py-name">original</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">    <tt class="py-name">modified_value</tt> <tt class="py-op">=</tt> <tt class="py-name">modified</tt><tt class="py-op">.</tt><tt id="link-62" class="py-name" targets="Method googleapiclient.discovery_cache.appengine_memcache.Cache.get()=googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#get,Method googleapiclient.discovery_cache.base.Cache.get()=googleapiclient.discovery_cache.base.Cache-class.html#get,Method googleapiclient.discovery_cache.file_cache.Cache.get()=googleapiclient.discovery_cache.file_cache.Cache-class.html#get,Method googleapiclient.schema.Schemas.get()=googleapiclient.schema.Schemas-class.html#get"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
 googleapiclient.discovery_cache.file_cache.Cache.get
-googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-46', 'get', 'link-46');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">modified_value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">      <tt class="py-comment"># Use None to signal that the element is deleted</tt> </tt>
-<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line">      <tt class="py-name">patch</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">original_value</tt> <tt class="py-op">!=</tt> <tt class="py-name">modified_value</tt><tt class="py-op">:</tt> </tt>
-<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">original_value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">        <tt class="py-comment"># Recursively descend objects</tt> </tt>
-<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line">        <tt class="py-name">patch</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-47" class="py-name" targets="Function googleapiclient.model.makepatch()=googleapiclient.model-module.html#makepatch"><a title="googleapiclient.model.makepatch" class="py-name" href="#" onclick="return doclink('link-47', 'makepatch', 'link-47');">makepatch</a></tt><tt class="py-op">(</tt><tt class="py-name">original_value</tt><tt class="py-op">,</tt> <tt class="py-name">modified_value</tt><tt class="py-op">)</tt> </tt>
-<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line">        <tt class="py-comment"># In the case of simple types or arrays we just replace</tt> </tt>
-<a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line">        <tt class="py-name">patch</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">modified_value</tt> </tt>
-<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line">      <tt class="py-comment"># Don't add anything to patch if there's no change</tt> </tt>
-<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">      <tt class="py-keyword">pass</tt> </tt>
-<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">modified</tt><tt class="py-op">:</tt> </tt>
-<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">original</tt><tt class="py-op">:</tt> </tt>
-<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">      <tt class="py-name">patch</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">modified</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
-<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line"> </tt>
-<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">patch</tt> </tt>
-</div><a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+googleapiclient.schema.Schemas.get" class="py-name" href="#" onclick="return doclink('link-62', 'get', 'link-62');">get</a></tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">modified_value</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">      <tt class="py-comment"># Use None to signal that the element is deleted</tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">      <tt class="py-name">patch</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">original_value</tt> <tt class="py-op">!=</tt> <tt class="py-name">modified_value</tt><tt class="py-op">:</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line">      <tt class="py-keyword">if</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">original_value</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">        <tt class="py-comment"># Recursively descend objects</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line">        <tt class="py-name">patch</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-63" class="py-name" targets="Function googleapiclient.model.makepatch()=googleapiclient.model-module.html#makepatch"><a title="googleapiclient.model.makepatch" class="py-name" href="#" onclick="return doclink('link-63', 'makepatch', 'link-63');">makepatch</a></tt><tt class="py-op">(</tt><tt class="py-name">original_value</tt><tt class="py-op">,</tt> <tt class="py-name">modified_value</tt><tt class="py-op">)</tt> </tt>
+<a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line">      <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line">        <tt class="py-comment"># In the case of simple types or arrays we just replace</tt> </tt>
+<a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line">        <tt class="py-name">patch</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">modified_value</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line">      <tt class="py-comment"># Don't add anything to patch if there's no change</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">      <tt class="py-keyword">pass</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">  <tt class="py-keyword">for</tt> <tt class="py-name">key</tt> <tt class="py-keyword">in</tt> <tt class="py-name">modified</tt><tt class="py-op">:</tt> </tt>
+<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt class="py-name">key</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">original</tt><tt class="py-op">:</tt> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">      <tt class="py-name">patch</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">modified</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line"> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line">  <tt class="py-keyword">return</tt> <tt class="py-name">patch</tt> </tt>
+</div><a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -569,7 +635,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.model.BaseModel-class.html b/docs/epy/googleapiclient.model.BaseModel-class.html
index 6ce1647..54826df 100644
--- a/docs/epy/googleapiclient.model.BaseModel-class.html
+++ b/docs/epy/googleapiclient.model.BaseModel-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class BaseModel</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.model-pysrc.html#BaseModel">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_37" name="uml_class_diagram_for_googleap_37">
+<center>  <map id="uml_class_diagram_for_googleap_38" name="uml_class_diagram_for_googleap_38">
 <area shape="rect" id="node1_8" href="googleapiclient.model.BaseModel-class.html#accept" title="googleapiclient.model.BaseModel.accept" alt="" coords="18,89,406,108"/>
 <area shape="rect" id="node1_9" href="googleapiclient.model.BaseModel-class.html#content_type" title="googleapiclient.model.BaseModel.content_type" alt="" coords="18,108,406,127"/>
 <area shape="rect" id="node1_10" href="googleapiclient.model.BaseModel-class.html#no_content_response" title="googleapiclient.model.BaseModel.no_content_response" alt="" coords="18,127,406,145"/>
@@ -70,7 +70,7 @@
 <area shape="rect" id="node1" href="googleapiclient.model.BaseModel-class.html" title="Base model class." alt="" coords="5,67,417,248"/>
 <area shape="rect" id="node2" href="googleapiclient.model.Model-class.html" title="Model base class." alt="" coords="181,5,241,48"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_37.gif" alt='' usemap="#uml_class_diagram_for_googleap_37" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_38.gif" alt='' usemap="#uml_class_diagram_for_googleap_38" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -545,7 +545,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.model.JsonModel-class.html b/docs/epy/googleapiclient.model.JsonModel-class.html
index 8723d02..bd574dd 100644
--- a/docs/epy/googleapiclient.model.JsonModel-class.html
+++ b/docs/epy/googleapiclient.model.JsonModel-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class JsonModel</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.model-pysrc.html#JsonModel">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_38" name="uml_class_diagram_for_googleap_38">
+<center>  <map id="uml_class_diagram_for_googleap_39" name="uml_class_diagram_for_googleap_39">
 <area shape="rect" id="node1_9" href="googleapiclient.model.JsonModel-class.html#accept" title="googleapiclient.model.JsonModel.accept" alt="" coords="107,183,318,201"/>
 <area shape="rect" id="node1_10" href="googleapiclient.model.JsonModel-class.html#content_type" title="googleapiclient.model.JsonModel.content_type" alt="" coords="107,201,318,220"/>
 <area shape="rect" id="node1_11" href="googleapiclient.model.JsonModel-class.html#alt_param" title="googleapiclient.model.JsonModel.alt_param" alt="" coords="107,220,318,239"/>
@@ -72,7 +72,7 @@
 <area shape="rect" id="node2" href="googleapiclient.model.BaseModel-class.html" title="Base model class." alt="" coords="5,67,417,141"/>
 <area shape="rect" id="node3" href="googleapiclient.model.Model-class.html" title="Model base class." alt="" coords="181,5,241,48"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_38.gif" alt='' usemap="#uml_class_diagram_for_googleap_38" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_39.gif" alt='' usemap="#uml_class_diagram_for_googleap_39" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -432,7 +432,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.model.MediaModel-class.html b/docs/epy/googleapiclient.model.MediaModel-class.html
index fe8bae3..a48a49b 100644
--- a/docs/epy/googleapiclient.model.MediaModel-class.html
+++ b/docs/epy/googleapiclient.model.MediaModel-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class MediaModel</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.model-pysrc.html#MediaModel">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_39" name="uml_class_diagram_for_googleap_39">
+<center>  <map id="uml_class_diagram_for_googleap_40" name="uml_class_diagram_for_googleap_40">
 <area shape="rect" id="node1_9" href="googleapiclient.model.MediaModel-class.html#accept" title="googleapiclient.model.MediaModel.accept" alt="" coords="131,276,294,295"/>
 <area shape="rect" id="node1_10" href="googleapiclient.model.MediaModel-class.html#content_type" title="googleapiclient.model.MediaModel.content_type" alt="" coords="131,295,294,313"/>
 <area shape="rect" id="node1_11" href="googleapiclient.model.MediaModel-class.html#alt_param" title="googleapiclient.model.MediaModel.alt_param" alt="" coords="131,313,294,332"/>
@@ -73,7 +73,7 @@
 <area shape="rect" id="node3" href="googleapiclient.model.BaseModel-class.html" title="Base model class." alt="" coords="5,67,417,141"/>
 <area shape="rect" id="node4" href="googleapiclient.model.Model-class.html" title="Model base class." alt="" coords="181,5,241,48"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_39.gif" alt='' usemap="#uml_class_diagram_for_googleap_39" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_40.gif" alt='' usemap="#uml_class_diagram_for_googleap_40" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -339,7 +339,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.model.Model-class.html b/docs/epy/googleapiclient.model.Model-class.html
index 3a872f6..d308da0 100644
--- a/docs/epy/googleapiclient.model.Model-class.html
+++ b/docs/epy/googleapiclient.model.Model-class.html
@@ -58,12 +58,12 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class Model</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.model-pysrc.html#Model">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_40" name="uml_class_diagram_for_googleap_40">
+<center>  <map id="uml_class_diagram_for_googleap_41" name="uml_class_diagram_for_googleap_41">
 <area shape="rect" id="node1_2" href="googleapiclient.model.Model-class.html#request" title="Updates outgoing requests with a serialized body." alt="" coords="18,36,406,55"/>
 <area shape="rect" id="node1_3" href="googleapiclient.model.Model-class.html#response" title="Convert the response wire format into a Python object." alt="" coords="18,55,406,73"/>
 <area shape="rect" id="node1" href="googleapiclient.model.Model-class.html" title="Model base class." alt="" coords="5,5,417,80"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_40.gif" alt='' usemap="#uml_class_diagram_for_googleap_40" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_41.gif" alt='' usemap="#uml_class_diagram_for_googleap_41" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -297,7 +297,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.model.ProtocolBufferModel-class.html b/docs/epy/googleapiclient.model.ProtocolBufferModel-class.html
index d797875..9ab7e40 100644
--- a/docs/epy/googleapiclient.model.ProtocolBufferModel-class.html
+++ b/docs/epy/googleapiclient.model.ProtocolBufferModel-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class ProtocolBufferModel</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.model-pysrc.html#ProtocolBufferModel">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_41" name="uml_class_diagram_for_googleap_41">
+<center>  <map id="uml_class_diagram_for_googleap_42" name="uml_class_diagram_for_googleap_42">
 <area shape="rect" id="node1_9" href="googleapiclient.model.ProtocolBufferModel-class.html#accept" title="googleapiclient.model.ProtocolBufferModel.accept" alt="" coords="123,183,301,201"/>
 <area shape="rect" id="node1_10" href="googleapiclient.model.ProtocolBufferModel-class.html#content_type" title="googleapiclient.model.ProtocolBufferModel.content_type" alt="" coords="123,201,301,220"/>
 <area shape="rect" id="node1_11" href="googleapiclient.model.ProtocolBufferModel-class.html#alt_param" title="googleapiclient.model.ProtocolBufferModel.alt_param" alt="" coords="123,220,301,239"/>
@@ -72,7 +72,7 @@
 <area shape="rect" id="node2" href="googleapiclient.model.BaseModel-class.html" title="Base model class." alt="" coords="5,67,417,141"/>
 <area shape="rect" id="node3" href="googleapiclient.model.Model-class.html" title="Model base class." alt="" coords="181,5,241,48"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_41.gif" alt='' usemap="#uml_class_diagram_for_googleap_41" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_42.gif" alt='' usemap="#uml_class_diagram_for_googleap_42" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -436,7 +436,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.model.RawModel-class.html b/docs/epy/googleapiclient.model.RawModel-class.html
index d243838..0fd35e6 100644
--- a/docs/epy/googleapiclient.model.RawModel-class.html
+++ b/docs/epy/googleapiclient.model.RawModel-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class RawModel</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.model-pysrc.html#RawModel">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_42" name="uml_class_diagram_for_googleap_42">
+<center>  <map id="uml_class_diagram_for_googleap_43" name="uml_class_diagram_for_googleap_43">
 <area shape="rect" id="node1_9" href="googleapiclient.model.RawModel-class.html#accept" title="googleapiclient.model.RawModel.accept" alt="" coords="131,276,294,295"/>
 <area shape="rect" id="node1_10" href="googleapiclient.model.RawModel-class.html#content_type" title="googleapiclient.model.RawModel.content_type" alt="" coords="131,295,294,313"/>
 <area shape="rect" id="node1_11" href="googleapiclient.model.RawModel-class.html#alt_param" title="googleapiclient.model.RawModel.alt_param" alt="" coords="131,313,294,332"/>
@@ -73,7 +73,7 @@
 <area shape="rect" id="node3" href="googleapiclient.model.BaseModel-class.html" title="Base model class." alt="" coords="5,67,417,141"/>
 <area shape="rect" id="node4" href="googleapiclient.model.Model-class.html" title="Model base class." alt="" coords="181,5,241,48"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_42.gif" alt='' usemap="#uml_class_diagram_for_googleap_42" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_43.gif" alt='' usemap="#uml_class_diagram_for_googleap_43" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -339,7 +339,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.sample_tools-module.html b/docs/epy/googleapiclient.sample_tools-module.html
index c8f6b2e..479ad14 100644
--- a/docs/epy/googleapiclient.sample_tools-module.html
+++ b/docs/epy/googleapiclient.sample_tools-module.html
@@ -204,7 +204,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.sample_tools-pysrc.html b/docs/epy/googleapiclient.sample_tools-pysrc.html
index 61d01bb..a74392b 100644
--- a/docs/epy/googleapiclient.sample_tools-pysrc.html
+++ b/docs/epy/googleapiclient.sample_tools-pysrc.html
@@ -195,7 +195,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.schema-module.html b/docs/epy/googleapiclient.schema-module.html
index 10dd0a8..aa75543 100644
--- a/docs/epy/googleapiclient.schema-module.html
+++ b/docs/epy/googleapiclient.schema-module.html
@@ -167,7 +167,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.schema-pysrc.html b/docs/epy/googleapiclient.schema-pysrc.html
index 87723bd..77d431d 100644
--- a/docs/epy/googleapiclient.schema-pysrc.html
+++ b/docs/epy/googleapiclient.schema-pysrc.html
@@ -328,7 +328,8 @@
 <a name="L258"></a><tt class="py-lineno">258</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-26" class="py-name"><a title="googleapiclient.schema._SchemaToStruct.emitBegin" class="py-name" href="#" onclick="return doclink('link-26', 'emitBegin', 'link-23');">emitBegin</a></tt><tt class="py-op">(</tt><tt class="py-string">'"a_key": '</tt><tt class="py-op">)</tt> </tt>
 <a name="L259"></a><tt class="py-lineno">259</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name"><a title="googleapiclient.schema._SchemaToStruct._to_str_impl" class="py-name" href="#" onclick="return doclink('link-27', '_to_str_impl', 'link-24');">_to_str_impl</a></tt><tt class="py-op">(</tt><tt id="link-28" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-28', 'schema', 'link-7');">schema</a></tt><tt class="py-op">[</tt><tt class="py-string">'additionalProperties'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
 <a name="L260"></a><tt class="py-lineno">260</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-29" class="py-name" targets="Method googleapiclient.schema._SchemaToStruct.undent()=googleapiclient.schema._SchemaToStruct-class.html#undent"><a title="googleapiclient.schema._SchemaToStruct.undent" class="py-name" href="#" onclick="return doclink('link-29', 'undent', 'link-29');">undent</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method googleapiclient.schema._SchemaToStruct.emit()=googleapiclient.schema._SchemaToStruct-class.html#emit"><a title="googleapiclient.schema._SchemaToStruct.emit" class="py-name" href="#" onclick="return doclink('link-30', 'emit', 'link-30');">emit</a></tt><tt class="py-op">(</tt><tt class="py-string">'},'</tt><tt class="py-op">)</tt> </tt>
+<a name="L261"></a><tt class="py-lineno">261</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method googleapiclient.NullHandler.emit()=googleapiclient.NullHandler-class.html#emit,Method googleapiclient.schema._SchemaToStruct.emit()=googleapiclient.schema._SchemaToStruct-class.html#emit"><a title="googleapiclient.NullHandler.emit
+googleapiclient.schema._SchemaToStruct.emit" class="py-name" href="#" onclick="return doclink('link-30', 'emit', 'link-30');">emit</a></tt><tt class="py-op">(</tt><tt class="py-string">'},'</tt><tt class="py-op">)</tt> </tt>
 <a name="L262"></a><tt class="py-lineno">262</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-string">'$ref'</tt> <tt class="py-keyword">in</tt> <tt id="link-31" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-31', 'schema', 'link-7');">schema</a></tt><tt class="py-op">:</tt> </tt>
 <a name="L263"></a><tt class="py-lineno">263</tt>  <tt class="py-line">      <tt class="py-name">schemaName</tt> <tt class="py-op">=</tt> <tt id="link-32" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-32', 'schema', 'link-7');">schema</a></tt><tt class="py-op">[</tt><tt class="py-string">'$ref'</tt><tt class="py-op">]</tt> </tt>
 <a name="L264"></a><tt class="py-lineno">264</tt>  <tt class="py-line">      <tt class="py-name">description</tt> <tt class="py-op">=</tt> <tt id="link-33" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-33', 'schema', 'link-7');">schema</a></tt><tt class="py-op">.</tt><tt id="link-34" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
@@ -339,7 +340,8 @@
 <a name="L266"></a><tt class="py-lineno">266</tt>  <tt class="py-line">      <tt class="py-name">parts</tt> <tt class="py-op">=</tt> <tt class="py-name">s</tt><tt class="py-op">.</tt><tt class="py-name">splitlines</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
 <a name="L267"></a><tt class="py-lineno">267</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name"><a title="googleapiclient.schema._SchemaToStruct.emitEnd" class="py-name" href="#" onclick="return doclink('link-35', 'emitEnd', 'link-16');">emitEnd</a></tt><tt class="py-op">(</tt><tt class="py-name">parts</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">description</tt><tt class="py-op">)</tt> </tt>
 <a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">      <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">parts</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name"><a title="googleapiclient.schema._SchemaToStruct.emit" class="py-name" href="#" onclick="return doclink('link-36', 'emit', 'link-30');">emit</a></tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name"><a title="googleapiclient.NullHandler.emit
+googleapiclient.schema._SchemaToStruct.emit" class="py-name" href="#" onclick="return doclink('link-36', 'emit', 'link-30');">emit</a></tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
 <a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line">    <tt class="py-keyword">elif</tt> <tt class="py-name">stype</tt> <tt class="py-op">==</tt> <tt class="py-string">'boolean'</tt><tt class="py-op">:</tt> </tt>
 <a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line">      <tt class="py-name">value</tt> <tt class="py-op">=</tt> <tt id="link-37" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-37', 'schema', 'link-7');">schema</a></tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="googleapiclient.discovery_cache.appengine_memcache.Cache.get
 googleapiclient.discovery_cache.base.Cache.get
@@ -395,9 +397,11 @@
 <a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-67" class="py-name"><a title="googleapiclient.schema._SchemaToStruct.emitBegin" class="py-name" href="#" onclick="return doclink('link-67', 'emitBegin', 'link-23');">emitBegin</a></tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
 <a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="googleapiclient.schema._SchemaToStruct._to_str_impl" class="py-name" href="#" onclick="return doclink('link-68', '_to_str_impl', 'link-24');">_to_str_impl</a></tt><tt class="py-op">(</tt><tt id="link-69" class="py-name"><a title="googleapiclient.schema" class="py-name" href="#" onclick="return doclink('link-69', 'schema', 'link-7');">schema</a></tt><tt class="py-op">[</tt><tt class="py-string">'items'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
 <a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="googleapiclient.schema._SchemaToStruct.undent" class="py-name" href="#" onclick="return doclink('link-70', 'undent', 'link-29');">undent</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="googleapiclient.schema._SchemaToStruct.emit" class="py-name" href="#" onclick="return doclink('link-71', 'emit', 'link-30');">emit</a></tt><tt class="py-op">(</tt><tt class="py-string">'],'</tt><tt class="py-op">)</tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="googleapiclient.NullHandler.emit
+googleapiclient.schema._SchemaToStruct.emit" class="py-name" href="#" onclick="return doclink('link-71', 'emit', 'link-30');">emit</a></tt><tt class="py-op">(</tt><tt class="py-string">'],'</tt><tt class="py-op">)</tt> </tt>
 <a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line">    <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="googleapiclient.schema._SchemaToStruct.emit" class="py-name" href="#" onclick="return doclink('link-72', 'emit', 'link-30');">emit</a></tt><tt class="py-op">(</tt><tt class="py-string">'Unknown type! %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">stype</tt><tt class="py-op">)</tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="googleapiclient.NullHandler.emit
+googleapiclient.schema._SchemaToStruct.emit" class="py-name" href="#" onclick="return doclink('link-72', 'emit', 'link-30');">emit</a></tt><tt class="py-op">(</tt><tt class="py-string">'Unknown type! %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">stype</tt><tt class="py-op">)</tt> </tt>
 <a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">      <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="googleapiclient.schema._SchemaToStruct.emitEnd" class="py-name" href="#" onclick="return doclink('link-73', 'emitEnd', 'link-16');">emitEnd</a></tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
 <a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line"> </tt>
 <a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line">    <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">string</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">value</tt><tt class="py-op">)</tt> </tt>
@@ -450,7 +454,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.schema.Schemas-class.html b/docs/epy/googleapiclient.schema.Schemas-class.html
index ff95ee9..fca3ccc 100644
--- a/docs/epy/googleapiclient.schema.Schemas-class.html
+++ b/docs/epy/googleapiclient.schema.Schemas-class.html
@@ -58,14 +58,14 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class Schemas</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.schema-pysrc.html#Schemas">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_43" name="uml_class_diagram_for_googleap_43">
+<center>  <map id="uml_class_diagram_for_googleap_44" name="uml_class_diagram_for_googleap_44">
 <area shape="rect" id="node1_4" href="googleapiclient.schema.Schemas-class.html#__init__" title="Constructor." alt="" coords="18,36,217,55"/>
 <area shape="rect" id="node1_5" href="googleapiclient.schema.Schemas-class.html#prettyPrintByName" title="Get pretty printed object prototype from the schema name." alt="" coords="18,55,217,73"/>
 <area shape="rect" id="node1_6" href="googleapiclient.schema.Schemas-class.html#prettyPrintSchema" title="Get pretty printed object prototype of schema." alt="" coords="18,73,217,92"/>
 <area shape="rect" id="node1_7" href="googleapiclient.schema.Schemas-class.html#get" title="Get deserialized JSON schema from the schema name." alt="" coords="18,92,217,111"/>
 <area shape="rect" id="node1" href="googleapiclient.schema.Schemas-class.html" title="Schemas for an API." alt="" coords="5,5,228,117"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_43.gif" alt='' usemap="#uml_class_diagram_for_googleap_43" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_44.gif" alt='' usemap="#uml_class_diagram_for_googleap_44" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -485,7 +485,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/googleapiclient.schema._SchemaToStruct-class.html b/docs/epy/googleapiclient.schema._SchemaToStruct-class.html
index 4d75dba..50f84b2 100644
--- a/docs/epy/googleapiclient.schema._SchemaToStruct-class.html
+++ b/docs/epy/googleapiclient.schema._SchemaToStruct-class.html
@@ -58,7 +58,7 @@
 <!-- ==================== CLASS DESCRIPTION ==================== -->
 <h1 class="epydoc">Class _SchemaToStruct</h1><p class="nomargin-top"><span class="codelink"><a href="googleapiclient.schema-pysrc.html#_SchemaToStruct">source&nbsp;code</a></span></p>
 <center>
-<center>  <map id="uml_class_diagram_for_googleap_44" name="uml_class_diagram_for_googleap_44">
+<center>  <map id="uml_class_diagram_for_googleap_45" name="uml_class_diagram_for_googleap_45">
 <area shape="rect" id="node1_7" href="googleapiclient.schema._SchemaToStruct-class.html#__init__" title="Constructor." alt="" coords="18,36,238,55"/>
 <area shape="rect" id="node1_8" href="googleapiclient.schema._SchemaToStruct-class.html#emit" title="Add text as a line to the output." alt="" coords="18,55,238,73"/>
 <area shape="rect" id="node1_9" href="googleapiclient.schema._SchemaToStruct-class.html#emitBegin" title="Add text to the output, but with no line terminator." alt="" coords="18,73,238,92"/>
@@ -68,7 +68,7 @@
 <area shape="rect" id="node1_13" href="googleapiclient.schema._SchemaToStruct-class.html#to_str" title="Prototype object based on the schema, in Python code with comments." alt="" coords="18,148,238,167"/>
 <area shape="rect" id="node1" href="googleapiclient.schema._SchemaToStruct-class.html" title="Convert schema to a prototype object." alt="" coords="5,5,249,173"/>
 </map>
-  <img src="uml_class_diagram_for_googleap_44.gif" alt='' usemap="#uml_class_diagram_for_googleap_44" ismap="ismap" class="graph-without-title" />
+  <img src="uml_class_diagram_for_googleap_45.gif" alt='' usemap="#uml_class_diagram_for_googleap_45" ismap="ismap" class="graph-without-title" />
 </center>
 </center>
 <hr />
@@ -509,7 +509,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:26 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:26 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/help.html b/docs/epy/help.html
index 6423594..f5620dc 100644
--- a/docs/epy/help.html
+++ b/docs/epy/help.html
@@ -246,7 +246,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/identifier-index.html b/docs/epy/identifier-index.html
index c06a3e8..26379e8 100644
--- a/docs/epy/identifier-index.html
+++ b/docs/epy/identifier-index.html
@@ -250,6 +250,14 @@
 <td valign="top">
 <table class="link-index" width="100%" border="1">
 <tr>
+<td width="33%" class="link-index"><a href="googleapiclient.NullHandler-class.html#emit">emit()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.NullHandler-class.html">NullHandler</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.channel-module.html#EPOCH">EPOCH</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.channel-module.html">googleapiclient.channel</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#execute">execute()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
+</tr>
+<tr>
 <td width="33%" class="link-index"><a href="googleapiclient.schema._SchemaToStruct-class.html#emit">emit()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.schema._SchemaToStruct-class.html" onclick="show_private();">_SchemaToStruct</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.file_cache-module.html#EPOCH">EPOCH</a><br />
@@ -272,13 +280,6 @@
 <span class="index-where">(in&nbsp;<a href="googleapiclient-module.html">googleapiclient</a>)</span></td>
 <td width="33%" class="link-index">&nbsp;</td>
 </tr>
-<tr>
-<td width="33%" class="link-index"><a href="googleapiclient.channel-module.html#EPOCH">EPOCH</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.channel-module.html">googleapiclient.channel</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#execute">execute()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="F">F</a></h2></td>
@@ -407,11 +408,19 @@
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#logger">logger</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.file_cache-module.html#logger">logger</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.file_cache-module.html">googleapiclient.discovery_cache.file_cache</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.appengine_memcache-module.html#LOGGER">LOGGER</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.appengine_memcache-module.html">googleapiclient.discovery_cache.appengine_memcache</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http-module.html#LOGGER">LOGGER</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http-module.html">googleapiclient.http</a>)</span></td>
 </tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
+<tr>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache-module.html#LOGGER">LOGGER</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache-module.html">googleapiclient.discovery_cache</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.file_cache-module.html#LOGGER">LOGGER</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.file_cache-module.html">googleapiclient.discovery_cache.file_cache</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.model-module.html#LOGGER">LOGGER</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.model-module.html">googleapiclient.model</a>)</span></td>
+</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="M">M</a></h2></td>
@@ -472,35 +481,41 @@
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.appengine_memcache-module.html#NAMESPACE">NAMESPACE</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.appengine_memcache-module.html">googleapiclient.discovery_cache.appengine_memcache</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.http.MediaIoBaseDownload-class.html#next_chunk">next_chunk()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaIoBaseDownload-class.html">MediaIoBaseDownload</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.model.ProtocolBufferModel-class.html#no_content_response">no_content_response()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="googleapiclient.http.MediaUpload-class.html#new_from_json">new_from_json()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.model.BaseModel-class.html#no_content_response">no_content_response</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.model.RawModel-class.html#no_content_response">no_content_response()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.model.RawModel-class.html">RawModel</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="googleapiclient.channel-module.html#new_webhook_channel">new_webhook_channel()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.channel-module.html">googleapiclient.channel</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.model.JsonModel-class.html#no_content_response">no_content_response()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.model.JsonModel-class.html">JsonModel</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.channel.Notification-class.html">Notification</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.channel-module.html">googleapiclient.channel</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.http.HttpRequest-class.html#next_chunk">next_chunk()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.model.MediaModel-class.html#no_content_response">no_content_response()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.model.MediaModel-class.html">MediaModel</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http.MediaUpload-class.html#new_from_json">new_from_json()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.model.JsonModel-class.html#no_content_response">no_content_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.model.JsonModel-class.html">JsonModel</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.channel-module.html#notification_from_headers">notification_from_headers()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.channel-module.html">googleapiclient.channel</a>)</span></td>
 </tr>
+<tr>
+<td width="33%" class="link-index"><a href="googleapiclient.channel-module.html#new_webhook_channel">new_webhook_channel()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.channel-module.html">googleapiclient.channel</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.model.MediaModel-class.html#no_content_response">no_content_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.model.MediaModel-class.html">MediaModel</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.NullHandler-class.html">NullHandler</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient-module.html">googleapiclient</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="googleapiclient.http.HttpRequest-class.html#next_chunk">next_chunk()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.model.ProtocolBufferModel-class.html#no_content_response">no_content_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="googleapiclient.http.MediaIoBaseDownload-class.html#next_chunk">next_chunk()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaIoBaseDownload-class.html">MediaIoBaseDownload</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.model.RawModel-class.html#no_content_response">no_content_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.model.RawModel-class.html">RawModel</a>)</span></td>
+<td width="33%" class="link-index">&nbsp;</td>
+</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="P">P</a></h2></td>
@@ -694,10 +709,12 @@
 <td valign="top">
 <table class="link-index" width="100%" border="1">
 <tr>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#V1_DISCOVERY_URI">V1_DISCOVERY_URI</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#V2_DISCOVERY_URI">V2_DISCOVERY_URI</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#VARNAME">VARNAME</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-<td width="33%" class="link-index">&nbsp;</td>
 </tr>
 <tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
 </table>
@@ -728,167 +745,167 @@
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.http.RequestMockBuilder-class.html#__call__">__call__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.RequestMockBuilder-class.html">RequestMockBuilder</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.http.RequestMockBuilder-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.RequestMockBuilder-class.html">RequestMockBuilder</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_id_to_header">_id_to_header()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="googleapiclient.mimeparse-module.html#__credits__">__credits__</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.mimeparse-module.html">googleapiclient.mimeparse</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.http._StreamSlice-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http._StreamSlice-class.html" onclick="show_private();">_StreamSlice</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.model.BaseModel-class.html#_log_request">_log_request()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="googleapiclient.mimeparse-module.html#__email__">__email__</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.mimeparse-module.html">googleapiclient.mimeparse</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.model.JsonModel-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.model.JsonModel-class.html">JsonModel</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.model.BaseModel-class.html#_log_response">_log_response()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#__getstate__">__getstate__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.mimeparse-module.html#__credits__">__credits__</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.mimeparse-module.html">googleapiclient.mimeparse</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.model.JsonModel-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.model.JsonModel-class.html">JsonModel</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_media_path_url_from_info">_media_path_url_from_info()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="googleapiclient.mimeparse-module.html#__email__">__email__</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.mimeparse-module.html">googleapiclient.mimeparse</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.model.ProtocolBufferModel-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.model.ProtocolBufferModel-class.html">ProtocolBufferModel</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_media_path_url_from_info">_media_path_url_from_info()</a><br />
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_MEDIA_SIZE_BIT_SHIFTS">_MEDIA_SIZE_BIT_SHIFTS</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#__getstate__">__getstate__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.schema.Schemas-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_media_size_to_long">_media_size_to_long()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.channel.Channel-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.channel.Channel-class.html">Channel</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.schema.Schemas-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_MEDIA_SIZE_BIT_SHIFTS">_MEDIA_SIZE_BIT_SHIFTS</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="googleapiclient.channel.Notification-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.channel.Notification-class.html">Notification</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.schema._SchemaToStruct-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.schema._SchemaToStruct-class.html" onclick="show_private();">_SchemaToStruct</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_media_size_to_long">_media_size_to_long()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.base.Cache-class.html#__metaclass__">__metaclass__</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.base.Cache-class.html">Cache</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_new_id">_new_id()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery.ResourceMethodParameters-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.ResourceMethodParameters-class.html" onclick="show_private();">ResourceMethodParameters</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.errors.BatchError-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.BatchError-class.html">BatchError</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.channel.Notification-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.channel.Notification-class.html">Notification</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.base.Cache-class.html#__metaclass__">__metaclass__</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.base.Cache-class.html">Cache</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.schema.Schemas-class.html#_prettyPrintByName">_prettyPrintByName()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html">Cache</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.errors.HttpError-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.errors.BatchError-class.html#__repr__">__repr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.BatchError-class.html">BatchError</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.schema.Schemas-class.html#_prettyPrintSchema">_prettyPrintSchema()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.schema.Schemas-class.html">Schemas</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.file_cache.Cache-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.file_cache.Cache-class.html">Cache</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#__setstate__">__setstate__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery.ResourceMethodParameters-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.ResourceMethodParameters-class.html" onclick="show_private();">ResourceMethodParameters</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.errors.HttpError-class.html#__repr__">__repr__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.http.HttpRequest-class.html#_process_response">_process_response()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.errors.BatchError-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.BatchError-class.html">BatchError</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.model-module.html#_abstract">_abstract()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.model-module.html">googleapiclient.model</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html">Cache</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#__setstate__">__setstate__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.file_cache-module.html#_read_or_initialize_cache">_read_or_initialize_cache()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.file_cache-module.html">googleapiclient.discovery_cache.file_cache</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.errors.HttpError-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#_add_basic_methods">_add_basic_methods()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.file_cache.Cache-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.file_cache.Cache-class.html">Cache</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.model-module.html#_abstract">_abstract()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.model-module.html">googleapiclient.model</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_refresh_and_apply_credentials">_refresh_and_apply_credentials()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.errors.UnexpectedBodyError-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.UnexpectedBodyError-class.html">UnexpectedBodyError</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#_add_nested_resources">_add_nested_resources()</a><br />
+<td width="33%" class="link-index"><a href="googleapiclient.errors.BatchError-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.BatchError-class.html">BatchError</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#_add_basic_methods">_add_basic_methods()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_retrieve_discovery_doc">_retrieve_discovery_doc()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.errors.UnexpectedMethodError-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.UnexpectedMethodError-class.html">UnexpectedMethodError</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#_add_next_methods">_add_next_methods()</a><br />
+<td width="33%" class="link-index"><a href="googleapiclient.errors.HttpError-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#_add_nested_resources">_add_nested_resources()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.http-module.html#_retry_request">_retry_request()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http-module.html">googleapiclient.http</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.model.BaseModel-class.html#_build_query">_build_query()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.errors.UnexpectedBodyError-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.UnexpectedBodyError-class.html">UnexpectedBodyError</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#_add_next_methods">_add_next_methods()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.schema._SchemaToStruct-class.html">_SchemaToStruct</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.schema-module.html">googleapiclient.schema</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.http.HttpMock-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpMock-class.html">HttpMock</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery._BytesGenerator-class.html">_BytesGenerator</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.errors.UnexpectedMethodError-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.UnexpectedMethodError-class.html">UnexpectedMethodError</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.model.BaseModel-class.html#_build_query">_build_query()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_serialize_request">_serialize_request()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.http.HttpMockSequence-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpMockSequence-class.html">HttpMockSequence</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_cast">_cast()</a><br />
+<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery._BytesGenerator-class.html">_BytesGenerator</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#_set_dynamic_attr">_set_dynamic_attr()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.http.HttpRequest-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_deserialize_response">_deserialize_response()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http.HttpMock-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpMock-class.html">HttpMock</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_cast">_cast()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery.Resource-class.html#_set_service_methods">_set_service_methods()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery.Resource-class.html" onclick="show_private();">Resource</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="googleapiclient.http.HttpRequestMock-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpRequestMock-class.html">HttpRequestMock</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http.HttpMockSequence-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpMockSequence-class.html">HttpMockSequence</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_deserialize_response">_deserialize_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http-module.html#_should_retry_response">_should_retry_response()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http-module.html">googleapiclient.http</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="googleapiclient.http.HttpRequest-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpRequest-class.html">HttpRequest</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_execute">_execute()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http-module.html#_ssl_SSLError">_ssl_SSLError</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http-module.html">googleapiclient.http</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="googleapiclient.http.HttpRequestMock-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.HttpRequestMock-class.html">HttpRequestMock</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.mimeparse-module.html#_filter_blank">_filter_blank()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.mimeparse-module.html">googleapiclient.mimeparse</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.http._StreamSlice-class.html">_StreamSlice</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http-module.html">googleapiclient.http</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.http.MediaDownloadProgress-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaDownloadProgress-class.html">MediaDownloadProgress</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.mimeparse-module.html#_filter_blank">_filter_blank()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.mimeparse-module.html">googleapiclient.mimeparse</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_fix_up_media_upload">_fix_up_media_upload()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.http.MediaUpload-class.html#_to_json">_to_json()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaUpload-class.html">MediaUpload</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.http.MediaFileUpload-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaFileUpload-class.html">MediaFileUpload</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_fix_up_media_upload">_fix_up_media_upload()</a><br />
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_fix_up_method_description">_fix_up_method_description()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.schema._SchemaToStruct-class.html#_to_str_impl">_to_str_impl()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.schema._SchemaToStruct-class.html" onclick="show_private();">_SchemaToStruct</a>)</span></td>
@@ -896,7 +913,7 @@
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.http.MediaInMemoryUpload-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaInMemoryUpload-class.html">MediaInMemoryUpload</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_fix_up_method_description">_fix_up_method_description()</a><br />
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_fix_up_parameters">_fix_up_parameters()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery_cache.file_cache-module.html#_to_timestamp">_to_timestamp()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery_cache.file_cache-module.html">googleapiclient.discovery_cache.file_cache</a>)</span></td>
@@ -904,24 +921,32 @@
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.http.MediaIoBaseDownload-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaIoBaseDownload-class.html">MediaIoBaseDownload</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_fix_up_parameters">_fix_up_parameters()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.channel-module.html#_upper_header_keys">_upper_header_keys()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.channel-module.html">googleapiclient.channel</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.errors.HttpError-class.html#_get_reason">_get_reason()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http-module.html#_TOO_MANY_REQUESTS">_TOO_MANY_REQUESTS</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http-module.html">googleapiclient.http</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.http.MediaIoBaseUpload-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaIoBaseUpload-class.html">MediaIoBaseUpload</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.errors.HttpError-class.html#_get_reason">_get_reason()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.errors.HttpError-class.html">HttpError</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_urljoin">_urljoin()</a><br />
-<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_header_to_id">_header_to_id()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.channel-module.html#_upper_header_keys">_upper_header_keys()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.channel-module.html">googleapiclient.channel</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="googleapiclient.http.MediaUploadProgress-class.html#__init__">__init__()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.MediaUploadProgress-class.html">MediaUploadProgress</a>)</span></td>
-<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_header_to_id">_header_to_id()</a><br />
+<td width="33%" class="link-index"><a href="googleapiclient.http.BatchHttpRequest-class.html#_id_to_header">_id_to_header()</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.http.BatchHttpRequest-class.html">BatchHttpRequest</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.discovery-module.html#_urljoin">_urljoin()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.discovery-module.html">googleapiclient.discovery</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="googleapiclient.http.RequestMockBuilder-class.html#__init__">__init__()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.http.RequestMockBuilder-class.html">RequestMockBuilder</a>)</span></td>
+<td width="33%" class="link-index"><a href="googleapiclient.model.BaseModel-class.html#_log_request">_log_request()</a><br />
+<span class="index-where">(in&nbsp;<a href="googleapiclient.model.BaseModel-class.html">BaseModel</a>)</span></td>
 <td width="33%" class="link-index"><a href="googleapiclient.discovery._BytesGenerator-class.html#_write_lines">_write_lines</a><br />
 <span class="index-where">(in&nbsp;<a href="googleapiclient.discovery._BytesGenerator-class.html" onclick="show_private();">_BytesGenerator</a>)</span></td>
 </tr>
@@ -954,7 +979,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/module-tree.html b/docs/epy/module-tree.html
index 1cff6d9..256d1de 100644
--- a/docs/epy/module-tree.html
+++ b/docs/epy/module-tree.html
@@ -101,7 +101,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Fri Feb 19 16:00:24 2016
+    Generated by Epydoc 3.0.1 on Thu May 19 10:53:24 2016
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/epy/redirect.html b/docs/epy/redirect.html
index 8ec2e0d..bc03ec6 100644
--- a/docs/epy/redirect.html
+++ b/docs/epy/redirect.html
@@ -7,7 +7,7 @@
 <body>
 <script type="text/javascript">
 <!--
-var pages = ["googleapiclient.discovery_cache.appengine_memcache.Cache-c", "googleapiclient.discovery_cache.appengine_memcache-m", "googleapiclient.discovery.ResourceMethodParameters-c", "googleapiclient.discovery_cache.file_cache.Cache-c", "googleapiclient.errors.UnacceptableMimeTypeError-c", "googleapiclient.errors.InvalidNotificationError-c", "googleapiclient.errors.UnknownApiNameOrVersion-c", "googleapiclient.errors.InvalidChunkSizeError-c", "googleapiclient.errors.UnexpectedMethodError-c", "googleapiclient.errors.MediaUploadSizeError-c", "googleapiclient.errors.ResumableUploadError-c", "googleapiclient.discovery_cache.file_cache-m", "googleapiclient.discovery_cache.base.Cache-c", "googleapiclient.errors.UnexpectedBodyError-c", "googleapiclient.http.MediaDownloadProgress-c", "googleapiclient.discovery._BytesGenerator-c", "googleapiclient.model.ProtocolBufferModel-c", "googleapiclient.http.MediaInMemoryUpload-c", "googleapiclient.http.MediaIoBaseDownload-c", "googleapiclient.http.MediaUploadProgress-c", "googleapiclient.errors.InvalidJsonError-c", "googleapiclient.http.RequestMockBuilder-c", "googleapiclient.errors.UnknownFileType-c", "googleapiclient.errors.UnknownLinkType-c", "googleapiclient.http.MediaIoBaseUpload-c", "googleapiclient.schema._SchemaToStruct-c", "googleapiclient.http.BatchHttpRequest-c", "googleapiclient.http.HttpMockSequence-c", "googleapiclient.discovery_cache.base-m", "googleapiclient.channel.Notification-c", "googleapiclient.http.HttpRequestMock-c", "googleapiclient.http.MediaFileUpload-c", "googleapiclient.discovery.Resource-c", "googleapiclient.errors.BatchError-c", "googleapiclient.http._StreamSlice-c", "googleapiclient.errors.HttpError-c", "googleapiclient.http.HttpRequest-c", "googleapiclient.http.MediaUpload-c", "googleapiclient.model.MediaModel-c", "googleapiclient.discovery_cache-m", "googleapiclient.channel.Channel-c", "googleapiclient.model.BaseModel-c", "googleapiclient.model.JsonModel-c", "googleapiclient.model.RawModel-c", "googleapiclient.schema.Schemas-c", "googleapiclient.http.HttpMock-c", "googleapiclient.sample_tools-m", "googleapiclient.errors.Error-c", "googleapiclient.model.Model-c", "googleapiclient.discovery-m", "googleapiclient.mimeparse-m", "googleapiclient.channel-m", "googleapiclient.errors-m", "googleapiclient.schema-m", "googleapiclient.model-m", "googleapiclient.http-m", "googleapiclient-m"];
+var pages = ["googleapiclient.discovery_cache.appengine_memcache.Cache-c", "googleapiclient.discovery_cache.appengine_memcache-m", "googleapiclient.discovery.ResourceMethodParameters-c", "googleapiclient.discovery_cache.file_cache.Cache-c", "googleapiclient.errors.UnacceptableMimeTypeError-c", "googleapiclient.errors.InvalidNotificationError-c", "googleapiclient.errors.UnknownApiNameOrVersion-c", "googleapiclient.errors.InvalidChunkSizeError-c", "googleapiclient.errors.UnexpectedMethodError-c", "googleapiclient.errors.MediaUploadSizeError-c", "googleapiclient.errors.ResumableUploadError-c", "googleapiclient.discovery_cache.file_cache-m", "googleapiclient.discovery_cache.base.Cache-c", "googleapiclient.errors.UnexpectedBodyError-c", "googleapiclient.http.MediaDownloadProgress-c", "googleapiclient.discovery._BytesGenerator-c", "googleapiclient.model.ProtocolBufferModel-c", "googleapiclient.http.MediaInMemoryUpload-c", "googleapiclient.http.MediaIoBaseDownload-c", "googleapiclient.http.MediaUploadProgress-c", "googleapiclient.errors.InvalidJsonError-c", "googleapiclient.http.RequestMockBuilder-c", "googleapiclient.errors.UnknownFileType-c", "googleapiclient.errors.UnknownLinkType-c", "googleapiclient.http.MediaIoBaseUpload-c", "googleapiclient.schema._SchemaToStruct-c", "googleapiclient.http.BatchHttpRequest-c", "googleapiclient.http.HttpMockSequence-c", "googleapiclient.discovery_cache.base-m", "googleapiclient.channel.Notification-c", "googleapiclient.http.HttpRequestMock-c", "googleapiclient.http.MediaFileUpload-c", "googleapiclient.discovery.Resource-c", "googleapiclient.errors.BatchError-c", "googleapiclient.http._StreamSlice-c", "googleapiclient.errors.HttpError-c", "googleapiclient.http.HttpRequest-c", "googleapiclient.http.MediaUpload-c", "googleapiclient.model.MediaModel-c", "googleapiclient.discovery_cache-m", "googleapiclient.channel.Channel-c", "googleapiclient.model.BaseModel-c", "googleapiclient.model.JsonModel-c", "googleapiclient.model.RawModel-c", "googleapiclient.schema.Schemas-c", "googleapiclient.http.HttpMock-c", "googleapiclient.sample_tools-m", "googleapiclient.errors.Error-c", "googleapiclient.NullHandler-c", "googleapiclient.model.Model-c", "googleapiclient.discovery-m", "googleapiclient.mimeparse-m", "googleapiclient.channel-m", "googleapiclient.errors-m", "googleapiclient.schema-m", "googleapiclient.model-m", "googleapiclient.http-m", "googleapiclient-m"];
 var dottedName = get_anchor();
 if (dottedName) {
     var target = redirect_url(dottedName);
diff --git a/docs/epy/toc-everything.html b/docs/epy/toc-everything.html
index a68e242..71a6bdf 100644
--- a/docs/epy/toc-everything.html
+++ b/docs/epy/toc-everything.html
@@ -13,7 +13,8 @@
 <h1 class="toc">Everything</h1>
 <hr />
   <h2 class="toc">All Classes</h2>
-    <a target="mainFrame" href="googleapiclient.channel.Channel-class.html"
+    <a target="mainFrame" href="googleapiclient.NullHandler-class.html"
+     >googleapiclient.NullHandler</a><br />    <a target="mainFrame" href="googleapiclient.channel.Channel-class.html"
      >googleapiclient.channel.Channel</a><br />    <a target="mainFrame" href="googleapiclient.channel.Notification-class.html"
      >googleapiclient.channel.Notification</a><br />  <div class="private">
     <a target="mainFrame" href="googleapiclient.discovery.Resource-class.html"
@@ -117,6 +118,9 @@
   <div class="private">
     <a target="mainFrame" href="googleapiclient.http-module.html#_retry_request"
      >googleapiclient.http._retry_request</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="googleapiclient.http-module.html#_should_retry_response"
+     >googleapiclient.http._should_retry_response</a><br />  </div>
     <a target="mainFrame" href="googleapiclient.http-module.html#set_user_agent"
      >googleapiclient.http.set_user_agent</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#tunnel_patch"
      >googleapiclient.http.tunnel_patch</a><br />  <div class="private">
@@ -169,6 +173,12 @@
     <a target="mainFrame" href="googleapiclient.discovery-module.html#URITEMPLATE"
      >googleapiclient.discovery.URITEMPLATE</a><br />  </div>
   <div class="private">
+    <a target="mainFrame" href="googleapiclient.discovery-module.html#V1_DISCOVERY_URI"
+     >googleapiclient.discovery.V1_DISCOVERY_URI</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="googleapiclient.discovery-module.html#V2_DISCOVERY_URI"
+     >googleapiclient.discovery.V2_DISCOVERY_URI</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="googleapiclient.discovery-module.html#VARNAME"
      >googleapiclient.discovery.VARNAME</a><br />  </div>
   <div class="private">
@@ -178,17 +188,27 @@
     <a target="mainFrame" href="googleapiclient.discovery-module.html#logger"
      >googleapiclient.discovery.logger</a><br />  </div>
     <a target="mainFrame" href="googleapiclient.discovery_cache-module.html#DISCOVERY_DOC_MAX_AGE"
-     >googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.appengine_memcache-module.html#NAMESPACE"
+     >googleapiclient.discovery_cache.DISCOVERY_DOC_MAX_AGE</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache-module.html#LOGGER"
+     >googleapiclient.discovery_cache.LOGGER</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.appengine_memcache-module.html#LOGGER"
+     >googleapiclient.discovery_cache.appengine_memcache.LOGGER</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.appengine_memcache-module.html#NAMESPACE"
      >googleapiclient.discovery_cache.appengine_memcache.NAMESPACE</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.appengine_memcache-module.html#cache"
      >googleapiclient.discovery_cache.appengine_memcache.cache</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#EPOCH"
      >googleapiclient.discovery_cache.file_cache.EPOCH</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#FILENAME"
-     >googleapiclient.discovery_cache.file_cache.FILENAME</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#cache"
-     >googleapiclient.discovery_cache.file_cache.cache</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#logger"
-     >googleapiclient.discovery_cache.file_cache.logger</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#DEFAULT_CHUNK_SIZE"
-     >googleapiclient.http.DEFAULT_CHUNK_SIZE</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#MAX_URI_LENGTH"
-     >googleapiclient.http.MAX_URI_LENGTH</a><br />    <a target="mainFrame" href="googleapiclient.mimeparse-module.html#__credits__"
+     >googleapiclient.discovery_cache.file_cache.FILENAME</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#LOGGER"
+     >googleapiclient.discovery_cache.file_cache.LOGGER</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#cache"
+     >googleapiclient.discovery_cache.file_cache.cache</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#DEFAULT_CHUNK_SIZE"
+     >googleapiclient.http.DEFAULT_CHUNK_SIZE</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#LOGGER"
+     >googleapiclient.http.LOGGER</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#MAX_URI_LENGTH"
+     >googleapiclient.http.MAX_URI_LENGTH</a><br />  <div class="private">
+    <a target="mainFrame" href="googleapiclient.http-module.html#_TOO_MANY_REQUESTS"
+     >googleapiclient.http._TOO_MANY_REQUESTS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="googleapiclient.http-module.html#_ssl_SSLError"
+     >googleapiclient.http._ssl_SSLError</a><br />  </div>
+    <a target="mainFrame" href="googleapiclient.mimeparse-module.html#__credits__"
      >googleapiclient.mimeparse.__credits__</a><br />    <a target="mainFrame" href="googleapiclient.mimeparse-module.html#__email__"
-     >googleapiclient.mimeparse.__email__</a><br />    <a target="mainFrame" href="googleapiclient.model-module.html#dump_request_response"
+     >googleapiclient.mimeparse.__email__</a><br />    <a target="mainFrame" href="googleapiclient.model-module.html#LOGGER"
+     >googleapiclient.model.LOGGER</a><br />    <a target="mainFrame" href="googleapiclient.model-module.html#dump_request_response"
      >googleapiclient.model.dump_request_response</a><br /><hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
     onclick="toggle_private();">hide&nbsp;private</a>]</span>
diff --git a/docs/epy/toc-googleapiclient-module.html b/docs/epy/toc-googleapiclient-module.html
index e011c77..bdfe3f0 100644
--- a/docs/epy/toc-googleapiclient-module.html
+++ b/docs/epy/toc-googleapiclient-module.html
@@ -12,7 +12,9 @@
       alink="#204080">
 <h1 class="toc">Module googleapiclient</h1>
 <hr />
-<hr />
+  <h2 class="toc">Classes</h2>
+    <a target="mainFrame" href="googleapiclient.NullHandler-class.html"
+     >NullHandler</a><br /><hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
     onclick="toggle_private();">hide&nbsp;private</a>]</span>
 
diff --git a/docs/epy/toc-googleapiclient.discovery-module.html b/docs/epy/toc-googleapiclient.discovery-module.html
index ca8bc25..b562a9a 100644
--- a/docs/epy/toc-googleapiclient.discovery-module.html
+++ b/docs/epy/toc-googleapiclient.discovery-module.html
@@ -86,6 +86,12 @@
     <a target="mainFrame" href="googleapiclient.discovery-module.html#URITEMPLATE"
      >URITEMPLATE</a><br />  </div>
   <div class="private">
+    <a target="mainFrame" href="googleapiclient.discovery-module.html#V1_DISCOVERY_URI"
+     >V1_DISCOVERY_URI</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="googleapiclient.discovery-module.html#V2_DISCOVERY_URI"
+     >V2_DISCOVERY_URI</a><br />  </div>
+  <div class="private">
     <a target="mainFrame" href="googleapiclient.discovery-module.html#VARNAME"
      >VARNAME</a><br />  </div>
   <div class="private">
diff --git a/docs/epy/toc-googleapiclient.discovery_cache-module.html b/docs/epy/toc-googleapiclient.discovery_cache-module.html
index 84c5586..5dc2e74 100644
--- a/docs/epy/toc-googleapiclient.discovery_cache-module.html
+++ b/docs/epy/toc-googleapiclient.discovery_cache-module.html
@@ -16,7 +16,8 @@
     <a target="mainFrame" href="googleapiclient.discovery_cache-module.html#autodetect"
      >autodetect</a><br />  <h2 class="toc">Variables</h2>
     <a target="mainFrame" href="googleapiclient.discovery_cache-module.html#DISCOVERY_DOC_MAX_AGE"
-     >DISCOVERY_DOC_MAX_AGE</a><br /><hr />
+     >DISCOVERY_DOC_MAX_AGE</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache-module.html#LOGGER"
+     >LOGGER</a><br /><hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
     onclick="toggle_private();">hide&nbsp;private</a>]</span>
 
diff --git a/docs/epy/toc-googleapiclient.discovery_cache.appengine_memcache-module.html b/docs/epy/toc-googleapiclient.discovery_cache.appengine_memcache-module.html
index 9a653af..f8a098d 100644
--- a/docs/epy/toc-googleapiclient.discovery_cache.appengine_memcache-module.html
+++ b/docs/epy/toc-googleapiclient.discovery_cache.appengine_memcache-module.html
@@ -15,7 +15,8 @@
   <h2 class="toc">Classes</h2>
     <a target="mainFrame" href="googleapiclient.discovery_cache.appengine_memcache.Cache-class.html"
      >Cache</a><br />  <h2 class="toc">Variables</h2>
-    <a target="mainFrame" href="googleapiclient.discovery_cache.appengine_memcache-module.html#NAMESPACE"
+    <a target="mainFrame" href="googleapiclient.discovery_cache.appengine_memcache-module.html#LOGGER"
+     >LOGGER</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.appengine_memcache-module.html#NAMESPACE"
      >NAMESPACE</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.appengine_memcache-module.html#cache"
      >cache</a><br /><hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
diff --git a/docs/epy/toc-googleapiclient.discovery_cache.file_cache-module.html b/docs/epy/toc-googleapiclient.discovery_cache.file_cache-module.html
index 54f2beb..43bf6a2 100644
--- a/docs/epy/toc-googleapiclient.discovery_cache.file_cache-module.html
+++ b/docs/epy/toc-googleapiclient.discovery_cache.file_cache-module.html
@@ -24,9 +24,9 @@
   <h2 class="toc">Variables</h2>
     <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#EPOCH"
      >EPOCH</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#FILENAME"
-     >FILENAME</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#cache"
-     >cache</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#logger"
-     >logger</a><br /><hr />
+     >FILENAME</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#LOGGER"
+     >LOGGER</a><br />    <a target="mainFrame" href="googleapiclient.discovery_cache.file_cache-module.html#cache"
+     >cache</a><br /><hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
     onclick="toggle_private();">hide&nbsp;private</a>]</span>
 
diff --git a/docs/epy/toc-googleapiclient.http-module.html b/docs/epy/toc-googleapiclient.http-module.html
index c4d61e6..1cb4bf2 100644
--- a/docs/epy/toc-googleapiclient.http-module.html
+++ b/docs/epy/toc-googleapiclient.http-module.html
@@ -33,12 +33,22 @@
   <div class="private">
     <a target="mainFrame" href="googleapiclient.http-module.html#_retry_request"
      >_retry_request</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="googleapiclient.http-module.html#_should_retry_response"
+     >_should_retry_response</a><br />  </div>
     <a target="mainFrame" href="googleapiclient.http-module.html#set_user_agent"
      >set_user_agent</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#tunnel_patch"
      >tunnel_patch</a><br />  <h2 class="toc">Variables</h2>
     <a target="mainFrame" href="googleapiclient.http-module.html#DEFAULT_CHUNK_SIZE"
-     >DEFAULT_CHUNK_SIZE</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#MAX_URI_LENGTH"
-     >MAX_URI_LENGTH</a><br /><hr />
+     >DEFAULT_CHUNK_SIZE</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#LOGGER"
+     >LOGGER</a><br />    <a target="mainFrame" href="googleapiclient.http-module.html#MAX_URI_LENGTH"
+     >MAX_URI_LENGTH</a><br />  <div class="private">
+    <a target="mainFrame" href="googleapiclient.http-module.html#_TOO_MANY_REQUESTS"
+     >_TOO_MANY_REQUESTS</a><br />  </div>
+  <div class="private">
+    <a target="mainFrame" href="googleapiclient.http-module.html#_ssl_SSLError"
+     >_ssl_SSLError</a><br />  </div>
+<hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
     onclick="toggle_private();">hide&nbsp;private</a>]</span>
 
diff --git a/docs/epy/toc-googleapiclient.model-module.html b/docs/epy/toc-googleapiclient.model-module.html
index 695bdcc..fa0a883 100644
--- a/docs/epy/toc-googleapiclient.model-module.html
+++ b/docs/epy/toc-googleapiclient.model-module.html
@@ -25,7 +25,8 @@
      >_abstract</a><br />  </div>
     <a target="mainFrame" href="googleapiclient.model-module.html#makepatch"
      >makepatch</a><br />  <h2 class="toc">Variables</h2>
-    <a target="mainFrame" href="googleapiclient.model-module.html#dump_request_response"
+    <a target="mainFrame" href="googleapiclient.model-module.html#LOGGER"
+     >LOGGER</a><br />    <a target="mainFrame" href="googleapiclient.model-module.html#dump_request_response"
      >dump_request_response</a><br /><hr />
 <span class="options">[<a href="javascript:void(0);" class="privatelink"
     onclick="toggle_private();">hide&nbsp;private</a>]</span>
diff --git a/docs/epy/uml_class_diagram_for_googleap.gif b/docs/epy/uml_class_diagram_for_googleap.gif
index f3328f8..f6be004 100644
--- a/docs/epy/uml_class_diagram_for_googleap.gif
+++ b/docs/epy/uml_class_diagram_for_googleap.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_10.gif b/docs/epy/uml_class_diagram_for_googleap_10.gif
index c4c03a7..f513ae1 100644
--- a/docs/epy/uml_class_diagram_for_googleap_10.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_10.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_11.gif b/docs/epy/uml_class_diagram_for_googleap_11.gif
index aa21ffc..c4c03a7 100644
--- a/docs/epy/uml_class_diagram_for_googleap_11.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_11.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_12.gif b/docs/epy/uml_class_diagram_for_googleap_12.gif
index 994f909..aa21ffc 100644
--- a/docs/epy/uml_class_diagram_for_googleap_12.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_12.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_13.gif b/docs/epy/uml_class_diagram_for_googleap_13.gif
index 189d9fb..994f909 100644
--- a/docs/epy/uml_class_diagram_for_googleap_13.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_13.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_14.gif b/docs/epy/uml_class_diagram_for_googleap_14.gif
index b7d84d0..189d9fb 100644
--- a/docs/epy/uml_class_diagram_for_googleap_14.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_14.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_15.gif b/docs/epy/uml_class_diagram_for_googleap_15.gif
index 4d181af..b7d84d0 100644
--- a/docs/epy/uml_class_diagram_for_googleap_15.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_15.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_16.gif b/docs/epy/uml_class_diagram_for_googleap_16.gif
index 7c0f0fe..4d181af 100644
--- a/docs/epy/uml_class_diagram_for_googleap_16.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_16.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_17.gif b/docs/epy/uml_class_diagram_for_googleap_17.gif
index 6530ff5..7c0f0fe 100644
--- a/docs/epy/uml_class_diagram_for_googleap_17.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_17.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_18.gif b/docs/epy/uml_class_diagram_for_googleap_18.gif
index 95672f0..6530ff5 100644
--- a/docs/epy/uml_class_diagram_for_googleap_18.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_18.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_19.gif b/docs/epy/uml_class_diagram_for_googleap_19.gif
index 27a3f2f..95672f0 100644
--- a/docs/epy/uml_class_diagram_for_googleap_19.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_19.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_2.gif b/docs/epy/uml_class_diagram_for_googleap_2.gif
index d77c2e6..f3328f8 100644
--- a/docs/epy/uml_class_diagram_for_googleap_2.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_2.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_20.gif b/docs/epy/uml_class_diagram_for_googleap_20.gif
index 7a7a76f..27a3f2f 100644
--- a/docs/epy/uml_class_diagram_for_googleap_20.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_20.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_21.gif b/docs/epy/uml_class_diagram_for_googleap_21.gif
index 78f19e5..7a7a76f 100644
--- a/docs/epy/uml_class_diagram_for_googleap_21.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_21.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_22.gif b/docs/epy/uml_class_diagram_for_googleap_22.gif
index 8324bf0..78f19e5 100644
--- a/docs/epy/uml_class_diagram_for_googleap_22.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_22.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_23.gif b/docs/epy/uml_class_diagram_for_googleap_23.gif
index 6efdc7f..8324bf0 100644
--- a/docs/epy/uml_class_diagram_for_googleap_23.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_23.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_24.gif b/docs/epy/uml_class_diagram_for_googleap_24.gif
index fb544cb..6efdc7f 100644
--- a/docs/epy/uml_class_diagram_for_googleap_24.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_24.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_25.gif b/docs/epy/uml_class_diagram_for_googleap_25.gif
index 2ce1d96..fb544cb 100644
--- a/docs/epy/uml_class_diagram_for_googleap_25.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_25.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_26.gif b/docs/epy/uml_class_diagram_for_googleap_26.gif
index 4c471ee..2ce1d96 100644
--- a/docs/epy/uml_class_diagram_for_googleap_26.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_26.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_27.gif b/docs/epy/uml_class_diagram_for_googleap_27.gif
index 29eb3c9..4c471ee 100644
--- a/docs/epy/uml_class_diagram_for_googleap_27.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_27.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_28.gif b/docs/epy/uml_class_diagram_for_googleap_28.gif
index 97ea4c7..29eb3c9 100644
--- a/docs/epy/uml_class_diagram_for_googleap_28.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_28.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_29.gif b/docs/epy/uml_class_diagram_for_googleap_29.gif
index 51360e8..97ea4c7 100644
--- a/docs/epy/uml_class_diagram_for_googleap_29.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_29.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_3.gif b/docs/epy/uml_class_diagram_for_googleap_3.gif
index cb5948e..d77c2e6 100644
--- a/docs/epy/uml_class_diagram_for_googleap_3.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_3.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_30.gif b/docs/epy/uml_class_diagram_for_googleap_30.gif
index c7c3bb1..51360e8 100644
--- a/docs/epy/uml_class_diagram_for_googleap_30.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_30.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_31.gif b/docs/epy/uml_class_diagram_for_googleap_31.gif
index a0cf5eb..c7c3bb1 100644
--- a/docs/epy/uml_class_diagram_for_googleap_31.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_31.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_32.gif b/docs/epy/uml_class_diagram_for_googleap_32.gif
index 661fd4d..a0cf5eb 100644
--- a/docs/epy/uml_class_diagram_for_googleap_32.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_32.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_33.gif b/docs/epy/uml_class_diagram_for_googleap_33.gif
index da0446b..661fd4d 100644
--- a/docs/epy/uml_class_diagram_for_googleap_33.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_33.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_34.gif b/docs/epy/uml_class_diagram_for_googleap_34.gif
index 9a19804..da0446b 100644
--- a/docs/epy/uml_class_diagram_for_googleap_34.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_34.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_35.gif b/docs/epy/uml_class_diagram_for_googleap_35.gif
index 512da76..9a19804 100644
--- a/docs/epy/uml_class_diagram_for_googleap_35.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_35.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_36.gif b/docs/epy/uml_class_diagram_for_googleap_36.gif
index dd46986..512da76 100644
--- a/docs/epy/uml_class_diagram_for_googleap_36.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_36.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_37.gif b/docs/epy/uml_class_diagram_for_googleap_37.gif
index dd4ab32..dd46986 100644
--- a/docs/epy/uml_class_diagram_for_googleap_37.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_37.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_38.gif b/docs/epy/uml_class_diagram_for_googleap_38.gif
index ac6af59..dd4ab32 100644
--- a/docs/epy/uml_class_diagram_for_googleap_38.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_38.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_39.gif b/docs/epy/uml_class_diagram_for_googleap_39.gif
index d9785dc..ac6af59 100644
--- a/docs/epy/uml_class_diagram_for_googleap_39.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_39.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_4.gif b/docs/epy/uml_class_diagram_for_googleap_4.gif
index a87b89b..cb5948e 100644
--- a/docs/epy/uml_class_diagram_for_googleap_4.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_4.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_40.gif b/docs/epy/uml_class_diagram_for_googleap_40.gif
index 1d25a50..d9785dc 100644
--- a/docs/epy/uml_class_diagram_for_googleap_40.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_40.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_41.gif b/docs/epy/uml_class_diagram_for_googleap_41.gif
index feaeeb3..1d25a50 100644
--- a/docs/epy/uml_class_diagram_for_googleap_41.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_41.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_42.gif b/docs/epy/uml_class_diagram_for_googleap_42.gif
index dedc3ab..feaeeb3 100644
--- a/docs/epy/uml_class_diagram_for_googleap_42.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_42.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_43.gif b/docs/epy/uml_class_diagram_for_googleap_43.gif
index d0e499a..dedc3ab 100644
--- a/docs/epy/uml_class_diagram_for_googleap_43.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_43.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_44.gif b/docs/epy/uml_class_diagram_for_googleap_44.gif
index 5dd601e..d0e499a 100644
--- a/docs/epy/uml_class_diagram_for_googleap_44.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_44.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_45.gif b/docs/epy/uml_class_diagram_for_googleap_45.gif
new file mode 100644
index 0000000..5dd601e
--- /dev/null
+++ b/docs/epy/uml_class_diagram_for_googleap_45.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_5.gif b/docs/epy/uml_class_diagram_for_googleap_5.gif
index 59a6ec3..a87b89b 100644
--- a/docs/epy/uml_class_diagram_for_googleap_5.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_5.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_6.gif b/docs/epy/uml_class_diagram_for_googleap_6.gif
index 4ebc877..59a6ec3 100644
--- a/docs/epy/uml_class_diagram_for_googleap_6.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_6.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_7.gif b/docs/epy/uml_class_diagram_for_googleap_7.gif
index 7f24432..4ebc877 100644
--- a/docs/epy/uml_class_diagram_for_googleap_7.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_7.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_8.gif b/docs/epy/uml_class_diagram_for_googleap_8.gif
index 4ebc877..7f24432 100644
--- a/docs/epy/uml_class_diagram_for_googleap_8.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_8.gif
Binary files differ
diff --git a/docs/epy/uml_class_diagram_for_googleap_9.gif b/docs/epy/uml_class_diagram_for_googleap_9.gif
index f513ae1..4ebc877 100644
--- a/docs/epy/uml_class_diagram_for_googleap_9.gif
+++ b/docs/epy/uml_class_diagram_for_googleap_9.gif
Binary files differ